Raspberry Pi được phát triển đầu tiên vào năm 2012. Raspberry Pi ban đầu như một thẻ card được cắm trên bo mạch máy tính được phát triển bởi các nhà phát triển ở Anh. Sau đó Raspberry Pi đã được phát triển thành một bo mạch đơn có chức năng như một máy tính mini dùng để giảng dạy ở các trường trung học. Được phát triển bởi Raspberry Pi Foundation một tổ chức phi lợi nhuận với tiêu chí xây dựng hệ thống mà nhiều người có thể sử dụng được trong những công việc tùy biến khác nhau.
Mặc dù chậm hơn so với các dòng laptop, máy tính hiện đại nhưng Raspberry Pi vẫn được xem là máy tính Linux hoàn chỉnh và có thể cung cấp tất cả các khả năng mà người dùng mong đợi, với mức tiêu thụ năng lượng thấp, nhỏ gọn và tiện lợi. Với những ưu điểm trên, Raspberry Pi là lựa chọn tốt nhất hiện nay cho đề tài này.
Hình 17: Module Raspberry Pi 3B+ 3.2.2 Cấu tạo phần cứng của kit Raspberry Pi 3B+
Raspberry Pi 3 Model B+ là một phiên bản nâng cấp của Raspberry Pi 3 Model B. Cụ thể, điểm nâng cấp chính của Raspberry Pi 3 Model B+ là vi xử lý và kết nối mạng. Model B+ dùng vi xử lý Broadcom BCM2837B0 4 nhân 1.4GHz (cao hơn so với BCM2837 1.2GHz trên Pi 3 Model B). Cấu hình chi tiết Raspberry Pi 3 Model B+:
- Vi xử lý: Broadcom BCM2837B0, quad-core A53 (ARMv8) 64-bit SoC @1.4GHz.
25 - Ram: 1GB LPDDR2 SDRAM
- Kết nối: 2.4GHz and 5GHz IEEE 802.11 b/g/n/ac wireless LAN, Bluetooth 4.2, BLE, Gigabit Ethernet over USB 2.0 (Tối đa 300Mbps).
- Cổng USB: 4 x 2.0. - Mở rộng: 40-pin GPIO.
- Video và âm thanh: 1 cổng full-sized HDMI, Cổng MIPI DSI Display, cổng MIPI CSI Camera, cổng stereo output và composite video 4 chân.
- Multimedia: H.264, MPEG-4 decode (1080p30), H.264 encode (1080p30); OpenGL ES 1.1, 2.0 graphics.
- Lưu trữ: MicroSD.
- Nguồn điện sử dụng: 5V/2.5A DC cổng microUSB, 5V DC trên chân GPIO, Power over Ethernet (PoE).
Hình 18: Cấu trúc Raspberry Pi 3 Model B+ 3.2.3 Hệ điều hành của Raspberry Pi
Có 6 phiên bản hệ điều hành được cung cấp chính thức cho Raspberry Pi:
Raspbian: Đây là hệ điều hành cơ bản, phổ biến nhất và do chính Raspberry Pi Foundation cung cấp. Nó cũng được hãng khuyến cáo sử dụng, nhất là cho người mới bắt đầu làm quen với RPI. Raspbian hoạt động rất ổn định, tốc độ nhanh (đặc biệt là trên Raspberry Pi 3).
26
Ubuntu Mate: tương tự như Raspbian, Ubuntu Mate cũng hướng đến người dùng sử dụng Raspberry Pi như máy tính văn phòng. Tuy nhiên Ubuntu Mate có giao diện đẹp hơn rất nhiều so với Raspbian. Được phát triển từ Ubuntu – hệ điều hành được xem là đối đầu trực tiếp với Windows.
Snappy Core Ubuntu: Snappy Ubuntu Core được xây dựng trong dự án Ubuntu Core. Ubuntu Core là nhân của hệ điều hành Ubuntu, khá trần trụi nhưng là một thành phần rất quan trọng của hệ điều hành Ubuntu, Snappy Ubuntu Core được thiết kế để chạy trong một môi trường khá hạn chế. Thế mạnh của nó là chạy được nhiều ứng dụng mà không cần một hệ điều hành Ubuntu đầy đủ.
Windows 10 IoT Core: Tương tự như Snappy Core Ubuntu, Windows 10 IoT Core cũng chỉ có nhân của Windown, nó không có giao diện đồ họa hay các phần mềm thông dụng như Office, … Windows 10 IoT được sử dụng cho mục đích phát triển các ứng dụng IoT. Microsoft cho biết IOT Core được thiết kế để có thể hoạt động với một loạt các ngôn ngữ mã nguồn mở, khiến các nhà sản xuất dễ dàng cài đặt trên các thiết bị của mình cũng như phát triển ứng dụng riêng cho mình.
OSMC và LibreELEC: Đây là 2 hệ điều hành phổ biến cho nhu cầu giải trí qua Raspberry Pi. OSMC được phát triển từ RaspBMC còn LibreELEC thì đi lên từ Xbian. Cả OSMC và LibreELEC đều được phát triển để chạy KODI, tuy nhiên OSMC được phát triển với đầy đủ nền tảng của Debian ở phía dưới, vì vậy OSMC có thể làm được nhiều điều hơn LibreELEC. Cả 2 hệ điều hành này phù hợp cho nhu cầu biến Raspberry Pi thành một Media Center trong nhà hoặc làm một thiết bị chơi Video/Audio trên xe ô tô.
3.3 Cài đặt hệ điều hành cho Raspberry
3.3.1 Thiết bị cần dùng để cài đặt
Để thiết lập cho Pi, chúng ta cần sử dụng các linh kiện phần cứng như sau: - 1 Raspberry Pi 3+.
27 - Bộ nguồn sử dụng cổng micro USB: Trong trường hợp chỉ sử dụng Pi trong các ứng dụng tiêu thụ năng lượng ít (Camera Pi, Webcam và các cảm biến của bên thứ 3), khi đó có thể sử dụng bộ nguồn loại 5V-2A.
- Bàn phím tiêu chuẩn kết nối bằng USB.
- Thẻ MicroSD và đầu đọc (cần thẻ MicroSD với dung lượng tối thiểu là 4GB). - Chuột kết nối bằng USB.
- Màn hình (có thể sử dụng màn hình HDMI hoặc VGA).
- Cáp kết nối màn hình và bộ chuyển đổi (nếu dụng màn hình HDMI thì chỉ cần cap HDMI là đủ, còn nếu sử dụng màn hình VGA thì cần dùng thêm bộ chuyển đổi HDMI sang VGA kèm theo cáp VGA).
3.3.2 Cài đặt hệ điều hành Raspbian
Bước 1: Download hệ điều hành Raspbian về máy.
Chúng ta có thể vào trang www.raspberrypi.org và tải phiên bản mới nhất về máy.
Hình 19: Raspberry Pi Imager
Lựa chọn phiên bản phụ hợp với hệ điều hành và download. Bước 2: Tải phần mềm SD Formatter và cài đặt.
Đây là bước cực kì quan trọng để đảm bảo việc cài đặt suôn sẻ thuận lợi. Theo trang web của RPi khuyến khích nên format bằng công cụ format của chính Hiệp hội thẻ SD, chúng ta có thể download tại trang www.sdcard.org. Sau khi cài đặt hoàn tất, ta mở phần mềm và định dạng thẻ.
28 Hình 20:Phần mềm SD Card Formatter
Hình 21: Sau khi Format thành công
29 Hình 22: Giao diện Raspberry Pi Imager v1.5
Bước 4: Chọn hệ điều hành muốn cài đặt.
Ta chọn hệ điều hành muốn cài đặt như hình bên dưới.
Hình 23: Chọn hệ điều hành cần cài đặt Bước 5: Chọn địa chỉ thẻ nhớ muốn cài đặt.
30 Hình 24: Chọn địa chỉ thẻ nhớ muốn cài đặt
Bước 6: Tiến hành ghi file vào thẻ nhớ.
Sau khi lựa chọn địa chỉ thẻ nhớ ta tiến hành ghi file bằng cách click vào “WRITE”.
Hình 25: Tiến hành ghi file vào thẻ nhớ Sau đó chọn “yes” để tiến hành ghi file vào thẻ nhớ.
31 Hình 26: Quá trình ghi file
32 Sau khi hoàn tất quá trình ghi file ta tháo thẻ nhớ ra và gắn vào Raspberry Pi. Sau đó ta khởi động và cấu hình cơ bản cho Raspberry Pi ta có được giao diện như hình bên dưới.
Hình 28: Giao diện màn hình RPi sau khi đã cài đặt thành công
3.4 Cài đặt thư viện cho Raspberry Pi
3.4.1 cài đặt thư viện OpenCV
Để cài đặt thư viện OpenCV cho RPi ta thức hiện theo các bước như sau:
Bước 1: Kết nối RPi với Internet thông qua cáp Ethernet hoặc dongle USB Wifi. Bước 2: Chạy lệnh sau để khởi động lại dịch vụ mạng.
Sudo service networking restart
Bước 3: Đảm bảo rằng Raspberry Pi được kết nối với Internet bằng cách nhập lệnh sau:
Ping -c4 www.google.com
Nếu lệnh này không chạy thành công thì chúng ta cần kiểm tra lại kết nối internet của Pi (có thể do dây cáp bị lỏng) rồi giải quyết sự cố. Sau đó, lặp lại các bước ở trên.
33 Bước 4: Chạy lần lượt các lệnh sau đây:
Sudo apt-get update
Lệnh này đồng bộ hóa danh sách gói từ nguồn. Chỉ mục của tất cả các gói được làm mới. Lệnh này phải được đưa ra trước khi thực hiện lệnh nâng cấp.
Sudo apt-get upgrade
Thao tác này sẽ cài đặt các phiên bản mới nhất của phần mềm đã được cài đặt. Các gói / tiện ích lỗi thời không tự động bị xóa. Nếu phần mềm được cập nhật, thì nó vẫn như vậy.
Sudo rpi-update
Lệnh này được sử dụng để nâng cấp phần sụn.
Bước 5: Bây giờ, chúng ta sẽ cần cài đặt một vài gói và phụ thuộc cần thiết cho OpenCV. Sau đây là danh sách các gói cần cài đặt. Chúng ta chỉ cần kết nối Pi với Internet và gõ lệnh:
sudo apt-get install <packagename> -y
34 Hình 29: Danh sách gói cài đặt
Ví dụ, nếu muốn cài đặt x264, chỉ cần gõ sudo apt-get install x264.
Bước 6: Cuối cùng, cài đặt OpenCV cho Python bằng cách sử dụng lệnh sau:
sudo apt-get install python-opencv -y
Đây là cách dễ nhất để cài đặt OpenCV cho Python. Tuy nhiên, có một vấn đề với điều này. Các kho lưu trữ Raspbian có thể không phải lúc nào cũng chứa phiên bản mới nhất của OpenCV. Đối với Python API, phiên bản mới nhất sẽ luôn chứa nhiều hỗ trợ tốt hơn và nhiều chức năng hơn.
35 >>> import cv2
>>> print cv2.__version__
Hình 30: Kiểm tra version của OpenCV 3.4.2 Cài đặt thư viện Dlib
Bước 1: Cài đặt các điều kiện tiên quyết của dlib. Thư viện dlib yêu cầu 4 điều kiện tiên quyết:
-Boost
-Boost.Python -Cmake -X11
Chúng ta có thể cài đặt thông qua các lệnh sau:
$ Sudo apt-get update
$ Sudo apt-get install build-essential cmake $ Sudo apt-get install libgtk-3-dev
36 Bước 2: Cài đặt thư viện Dlib
Chúng ta có thể cài đặt thông qua lệnh:
Pip3 install dlib
Bước 3: Kiểm tra cài đặt
Chúng ta kiểm tra bằng lệnh sau: >>> import dlib
Nếu lệnh được thực hiện thì chúng ta đã cài đặt thành công thư viện.
3.5 Camera Pi
3.5.1 Lựa chọn Camera
Có hai loại Camera Pi khác nhau thường được dùng trong xử lý ảnh là: Camera Pi bình thường và Camera Pi Noir.
Có nhiều sự khác biệt đáng kể giữa hai loại camera. Vào ban ngày thì Camera Pi Noir cho hình ảnh thu được không được đẹp như Camera bình thường. Tuy nhiên, Camera Pi Noir lại hoạt động tốt hơn vào ban đêm khi có sự hổ trợ của ánh sáng hồng ngoại.
Vì tình trạng ngủ gật và mệt mỏi thường xảy ra vào ban đêm nên Camera Pi Noir là lựa chọn tốt nhất cho đề tài này.
3.5.2 Camera Pi Noir V2
37 Tháng 4/2016, cùng với sản phẩm Camera Module V2, Raspberry Pi Foundation cũng ra mắt sản phẩm Raspberry Pi Camera Module NoIR (hồng ngoại) V2 và sử dụng sensor Sony IMX219 8 Megapixel.
Raspberry Pi Camera Module NoIR V2 có một cảm biến 8-megapixel của Sony IMX219 (so với cảm biến 5-megapixel OmniVision OV5647 trên Camera Hồng ngoại cũ).
Camera Module NoIR V2 mang trong mình mọi tính năng, công dụng của Camera Module thông thường, tuy nhiên có 1 điểm khác biệt là nó không sử dụng bộ lọc hồng ngoại (NoIR = NoInfrared). Điều này có nghĩa là hình ảnh chụp bằng ánh sáng ban ngày sẽ nhìn hơi mờ, nhưng nó mang lại khả năng nhìn trong bóng tối với ánh sáng hồng ngoại. Nó là một sản phẩm hoàn hảo để quan sát vào ban đêm (như camera giám sát), chụp ảnh trong môi trường ánh sáng thấp (như hoàng hôn chẳng hạn).
Thông số kỹ thuật:
- Ống kính tiêu cự cố định.
- Cảm biến độ phân giải 8 megapixel cho khả năng chụp ảnh kích thước 3280 x 2464.
- Hỗ trợ video 1080p30, 720p60 và 640x480p90. - Kích thước 25mm x 23mm x 9mm.
- Trọng lượng chỉ hơn 3g.
- Kết nối với Raspberry Pi thông qua cáp ribbon đi kèm dài 15 cm. - Camera Module được hỗ trợ với phiên bản mới nhất của Raspbian.
3.5.3 Kết nối Camera Pi với Raspberry Pi
Có 2 cách để kích hoạt Camera Pi.
Cách 1: Trong môi trường Desktop, di chuyển đến cửa sổ Raspberry Pi Configuration trong trình đơn preferences, mở tab Interfaces và kích hoạt Camera như hình bên dưới:
38 Hình 32: Cửa sổ Raspberry Pi Configuration
Cách 2: Kích hoạt từ giao diện Terminal bằng dòng lệnh:
Sudo raspi-config
Khi đó giao diện Raspberry Pi Software Configuration Tool được hiển thị. Nhấp chọn Interfacing Options:
Hình 33: Giao diện Raspberry Pi Software Configuration Tool Sau đó kích hoạt Camera và khởi động lại Pi:
39 Hình 34: kích hoạt Camera Pi
40
CHƯƠNG 4: CHƯƠNG TRÌNH PHÁT HIỆN NGỦ GẬT VÀ NGÁP NGỦ
4.1 Lưu đồ giải thuật
41
Khởi động camera
Đầu tiên ta sẽ thiết lập một camera để thu nhận hình ảnh đầu vào. Để truy cập vào camera, ta cần dùng thư viện imutils – một bộ các chức năng xử lý hình ảnh giúp làm việc trên OpenCV dễ dàng hơn.
Lấy ảnh từ camera và xử lý
Ảnh sẽ được lấy trực tiếp từ camera. Tuy nhiên chương trình đòi hỏi ảnh đầu vào phải ở dạng mức xám. Do đó, tất cả ảnh màu đầu vào sẽ được chuyển hết về dạng mức xám với câu lệnh trong OpenCV như sau:
gray=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY).
Phát hiện khuôn mặt
OpenCV đã tích hợp nhiều bộ phân loại (cascade) đã được huấn luyện cho việc nhận dạng các đối tượng như khuôn mặt, đôi mắt, nụ cười ... Đó là những file XML được lưu trữ trong thư mục “opencv / data / haarcascades”.
Đầu tiên chúng ta cần phải load các phân loại (cascade) XML cần thiết. Ở đây chúng ta cần bộ phân loại để huấn luyện cho khuôn mặt như sau:
haarcascade_frontalface_alt.xml: bộ dữ liệu huấn luyện (training) cho quá trình xử lý phát hiện khuôn mặt.
Ta có thể truy cập đường link sau để dowdload:
https://github.com/opencv/opencv/tree/master/data/haarcascades Lưu ý: tệp XML này phải nằm chung thư mục với file chương trình.
Đánh dấu cấu trúc khuôn mặt dùng Facial Landmarks
Bước tiếp theo là áp dụng thuật toán đánh dấu cấu trúc với 68 điểm trên vùng mặt của thư viện dlib để định vị từng khu vực quan trọng trên khuôn mặt. Các khu vực đó bao gồm: mày, mắt, mũi, miệng và đường viền khuôn mặt.
42 Máy dò mốc trên khuôn mặt được đào tạo trước bên trong thư viện dlib được sử dụng để ước tính vị trí của 68 tọa độ (x, y) ánh xạ đến các cấu trúc trên khuôn mặt.
Ta có thể truy cập đường link sau để dowdload: https://github.com/davisking/dlib-
models/blob/master/shape_predictor_68_face_landmarks.dat.bz2
Trích xuất vùng mắt và miệng
Mỗi mắt được biểu thị bằng 6 tọa độ (x, y), bắt đầu từ góc trái của mắt (với mắt trái được đánh dấu từ 37 đến 40 và mắt phải được đánh dấu từ 43 đến 46). Sử dụng phương pháp cắt mảng NumPy, chúng ta có thể trích xuất các tọa độ (x, y) của mắt trái và mắt phải.
Miệng được biểu diễn bởi một tập hợp 20 tọa độ (x.y), bắt đầu từ góc trái của miệng. Được chia thành 2 phần môi trên và môi dưới (với môi trên được đánh dấu từ 49 đến 60 và môi dưới được đánh dấu từ 61 đến 68).
Sử dụng phương pháp cắt mảng NumPy, chúng ta có thể trích xuất các tọa độ (x, y) của mắt trái, mắt phải và miệng.
Tính toán tỉ lệ mắt (EAR)
Mỗi mắt được biểu thị bằng 6 tọa độ (x, y), bắt đầu từ góc trái của mắt, sau đó làm việc theo chiều kim đồng hồ xung quanh phần còn lại của vùng:
Hình 36: Điểm mốc trên khuôn mặt liên quan đến mắt Dựa vào hình ảnh trên, chúng ta rút ra được 2 điểm chính:
43 -Có một mối quan hệ giữa chiều rộng và chiều cao của các tọa độ này -Dựa trên công trình của Soukupová và Čech trong bài báo năm 2016, chúng ta có thể rút ra một phương trình phản ánh mối quan hệ này được gọi là tỷ lệ khung hình của mắt (EAR) [3]:
Hình 37: Phương trình tỷ lệ khung hình của mắt
Trong đó p1 đến p6 là các vị trí đánh dấu mốc trên mắt. Tử số của phương trình này tính khoảng cách giữa các điểm mốc dọc trong khi mẫu số tính khoảng cách giữa các điểm mốc ngang, trọng số mẫu số bằng 2 là thích hợp vì chỉ có một tập các điểm ngang mà có hai bộ điểm thẳng đứng.