HỆ ĐIỀU HÀNH CHO KIT RASPBERRYP I3

Một phần của tài liệu DEMSOLUONGNGUOITRONGANHSUDUNGKITRASPBERY (Trang 48)

Có 5 phiên bản hệ điều hành được cung cấp chính thức cho Raspberry Pi:

Raspbian "wheezy": Đây là distro dựa trên Debian wheezy, sử dụng hard- float ABI (tính toán dấu chấm động bằng phần cứng) cho thời gian chạy các ứng dụng nhanh hơn với giao diện LXDE (thay vì GNOME). Có đầy đủ web browser, media player, tools, etc … Nói chung này dành cho những người muốn dùng Raspberry Pinhư một cái PC.

Soft-float "wheezy": Vẫn được xây dựng dựa trên Debian wheezy nhưng việc xử lý dấu chấm động được thực hiện bằng phần mềm. Việc này giúp bạn có thể sửdụng máy ảo Java (Oracle JVM) trên Raspberry.

Arch Linux: Phiên bản giành cho ARM. Đảm bảo thời gian khởi động trong vòng 10 giây. Chỉ khởi động và load các gói cần thiết. Để sử dụng được Arch Linux bạn cần có kiến thức cơ bản về Linux.

phát triển ARM thiết kế riêng. Đây không phải là một phiên bản Linux, do vậy bạn cần làm quen với cấu trúc và câu lệnh đặctrưng cho hệ điều hành này.

Ngoài ra còn nhiều hệ điều hành khác bạn có thể cài đặt: Raspbmc, Android...

Trong đề tài nhóm chúng em đã lựa chọn hệ điều hành Raspbian là hệ điều hành cho kit Raspberry Pi 3.

3.3.2. CÀI ĐẶT HỆ ĐIỀU HÀNH CHO KIT RASPBERRY PI 3 [4] 3.3.2.1 Thiết bị cần dùng để cài đặt

Thẻ nhớ SD dung lượng tối thiểu là 8GB, Class 4.

Máy tính cá nhân để điều khiển từ xa.

Dây mạng.

Nguồn điện 5V, 2.5A (tối thiểu là 1A).

3.3.2.2 Cài đặt hệ điều hành Raspbian

Bước 1: Tải bản cài đặt về máy tính và giải nén.

Chúng ta sẽ vào trang www.raspberrypi.org và tải phiên bản mới nhất đó là hệ điều hành Raspbian Stretch with desktop.

Hình 3.13. Hệ điều hành Raspbian Stretch. Bước 2: Tải phần mềm SD Card Formatter và cài đặt.

Chúng ta dùng phần mềm này để định dạng thẻ nhớ SD. Sau khi đã cài đặt hoànthành, ta mở phần mềm và định dạng thẻ.

Hình 3.14. Phần mềm SD Card Formatter Bước 3: Tải phần mềm Win32 Disk Imager và cài đặt.

Khi cài đặt xong. Chúng ta mở phần mềm, chọn đường dẫn đến file chứa hệ điều hành Raspbian Stretch và chọn Write. Chờ báo hoàn thành là đã xong bước cài hệđiều hành vào thẻ nhớ.

Hình 3.15. Phần mềm Win32 Disk Imager. 3.3.2.3. Điều khiển Raspberry Pi 3 từ xa bằng cách remote máy tính

Bước 1: Gắn thẻ nhớ vào máy tính sẽ xuất hiện ổ đĩa SD tên là Boot, vào Boot và

đây 192.168.137.2 là địa chỉ của Raspberry Pi (có thể đặt số khác với yêu cầu khác số 1).

Hình 3.16. Vào ổ đĩa Boot

Hình 3.17. Thêm địa chỉ IP của Raspberry vào file cmdline.text

Bước 2: Gắn thẻ nhớ vào kit Raspberry Pi 3, kết nối dây mạng Ethernet giữa máy tínhvới kit và cấp nguồn.

Bước 3: Tải phần mềm Putty vào máy tính và cài đặt:

Hình 3.18. Nhập địa chỉ ip của Raspberry Pi

Sau đó, cho phép chuyển tiếp X11

Hình 3.19. Chuyển tiếp X11

Bước 4: Sau khi nhấn Open, ta sẽ truy cập được vào màn hình command line của Raspberry Pi, sau đó nhập username và password (mặc định là pi và raspberry). Sau đó cài đặt xrdp bằng lệnh : sudo apt-get install xrdp

Hình 3.20. Cài đặt xrdp thành công.

Bước 5: Sau khi cài đặt xong, chúng ta mở Remote Desktop và nhập địa chỉ ip của

Raspberry và kết nối.

Hình 3.21. Mở Remote Desktop và kết nối với Raspberry.

Bước 6: Sau khi đã kết nối, chúng ta đăng nhập bằng cách nhập usename và passwordnhư bình thường.

Hình 3.22. Nhập usename và password

Bước 7: Cuối cùng ta đã kết nối được màn hình Raspberry và làm việc bình thường.

Hình 3.23. Giao diện của hệ điều hành Raspbian Stretch. 3.3.3. CÀI ĐẶT THƯ VIỆN CHO RASPBERRY PI3 [4] 3.3.3.1. Cài đặt OpenCV

Bước 1: Mở rộng hệ thống tập tin

$ sudo raspi-config

$ sudo reboot

Sau khi khởi động lại, hệ thống tập tin cần được mở rộng bao gồm tất cả các không gian có sẵn trên thẻ nhớ micro-SD. Chúng ta xác minh rằng đĩa đã được mở rộng bằng cách thực hiện df-h và kiểm tra đầu ra.

OpenCV, cùng với tất cả các phụ thuộc của nó, sẽ cần một vài gigabyte trong quá trình biên dịch, vì vậy nên xóa các công cụ Wolfram để giải phóng một số khônggian trên Pi:

$ Sudo apt-get purge wolfram-engine

Sau khi gỡ bỏ Wolfram Engine, có thể phục hồi gần 700MB.

Bước 2: Những cài đặt ràng buộc

Bước đầu tiên là cập nhật và nâng cấp các gói: $ sudo apt-get update

$ sudo apt-get upgrade

Sau đó chúng ta cần phải cài đặt một số công cụ phát triển, bao gồm cả CMake,giúp cấu hình quá trình xây dựng OpenCV:

$ sudo apt-get install build-essential cmake pkg-config

Tiếp theo, chúng ta cần phải cài đặt một số gói ảnh I/O cho phép chúng ta tải các định dạng tệp hình ảnh khác nhau từ đĩa. Ví dụ về định dạng tệp như JPEG, PNG,TIFF, vv ..:

$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

Cũng như các gói I/O hình ảnh, chúng ta cũng cần các gói I/O video. Các thư viện này cho phép đọc các định dạng tệp video khác nhau từ đĩa cũng như làm việc trực tiếp với các luồng video:

$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

$ sudo apt-get install libxvidcore-dev libx264-dev

Thư viện OpenCV đi kèm với một mô đun phụ có tên highgui được sử dụng để hiển thị hình ảnh lên màn hình của chúng tôi và xây dựng các GUI cơ bản. Để biên dịch mô đun highgui, cần phải cài đặt thư viện phát triển GTK: $ sudo apt-get install libgtk2.0-dev

Nhiều hoạt động bên trong OpenCV (cụ thể là hoạt động ma trận) có thể đượctối ưu hóa hơn nữa bằng cách cài đặt một vài phụ thuộc:

$ sudo apt-get install libatlas-base-dev gfortran

Những thư viện tối ưu hóa này rất quan trọng đối với các thiết bị hạn chế nguồn lực như Raspberry Pi. Cuối cùng, cài đặt Python 3 để biên dịch OpenCV với các ràng buộc Python:

$ sudo apt-get install python3-dev

Bước 3: Tải mã nguồn OpenCV

Bây giờ chúng ta cài đặt OpenCV 3.1.0 và giải nén:

$ cd ~

$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip

$ unzip opencv.zip

Chúng ta sẽ cài đặt đầy đủ OpenCV 3 (để có quyền truy cập vào các tính năng như SIFT và SURF), vì vậy chúng ta cũng cần lấy tập tin chứa opencv_contrib:

$ wget -O opencv_contrib.zip

https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip

$ unzip opencv_contrib.zip

Bước 4: Python3

Trước khi biên dịch OpenCV trên Raspberry Pi 3, chúng ta cần phải cài đặt pip,một trình quản lý gói Python:

$ wget https://bootstrap.pypa.io/get-pip.py

Cài đặt môi trường ảo. Môi trường ảo là một công cụ đặc biệt được sử dụng để giữ các yêu cầu phụ thuộc vào các dự án khác nhau ở các vị trí riêng biệt bằng cách tạo ra các môi trường Python độc lập, độc lập cho mỗi môi trường ảo nên sử dụng môitrường ảo sẽ tiện lợi và cần thiết.

$ sudo pip install virtualenv virtualenvwrapper

$ sudo rm -rf ~ / .cache / pip

Mở một thiết bị đầu cuối mới

$ source ~ / .profile

Tiếp theo, chúng ta hãy tạo ra môi trường ảo Python mà chúng ta sẽ sử dụng đểphát triển tầm nhìn máy tính:

$ mkvirtualenv cv -p python3

Lệnh này sẽ tạo một môi trường ảo Python mới có tên cv bằng Python 3. Môi trường ảo cv Python hoàn toàn độc lập và bị cô lập từ phiên bản Python mặc định được tải xuống của Raspbian Stretch. Bất kỳ gói Python nào trong thư mục các gói trang web toàn cầu sẽ không có sẵn cho môi trường ảo cv. Tương tự như vậy, bất kỳ gói Python nào được cài đặt trong gói trang web của cv sẽ không có sẵn choviệc cài đặt toàn cầu của Python. Điều này sẽ giúp chúng ta tránh nhầm lẫn.

Cài đặt NumPy trên Raspberry Pi Cài đặt NumPy trong môi trường ảo cv: $ pip install numpy

Bước 5: Biên dịch và cài đặt OpenCV

Một khi đảm bảo rằng đang ở trong môi trường ảo cv, chúng ta thiết lập xây dựng bằng cách sử dụng CMake:

$ cd ~ / opencv-3.1.0 /

$ mkdir build

$ cd build

$ cmake -D CMAKE_BUILD_TYPE = RELEASE \

-D CMAKE_INSTALL_PREFIX = / usr / local \

-D INSTALL_PYTHON_EXAMPLES = ON \

-D OPENCV_EXTRA_MODULES_PATH = ~ / opencv_contrib-3.1.0 / modules \

-D BUILD_EXAMPLES = ON ..

Cuối cùng, chúng ta biên dịch OpenCV:

Từ đó, cài đặt OpenCV 3 trên Raspberry Pi 3:

$ sudo make install

$ sudo ldconfig

Bước 6: Kết thúc cài đặt OpenCV trên Raspberry PiĐối với Python 3: Bước 5 kết thúc mà không có lỗi, OpenCV nên được cài đặt trong / usr/local/lib/python3/site-pacakges, xác minh điều này bằng lệnh ls:

$ ls -l /usr/local/lib/python2.7/site-packages/

total 1852

-rw-r--r-- 1 root staff 1895772 Mar 20 20:00 cv2.so

Bước cuối cùng là liên kết OpenCV vào môi trường ảo cv cho Python 3: $ cd ~ / .virtualenvs / cv / lib / python2.7 / site-packages /

$ ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so

Bước 7: Kiểm tra cài đặt OpenCV 3

Mở một thiết bị đầu cuối mới, thực hiện lệnh nguồn và workon và cuối cùng làcố gắng nhập các ràng buộc Python + OpenCV:

$ workon cv $ python3 >>> import cv2 >>> version cv2 .____ '3.1.0' >>>

Hình 3.26. Xác nhận OpenCV 3 đã cài đặt thành công.

Cuối cùng, OpenCV 3 đã được cài đặt thành công trên Raspberry Pi 3 trong môitrường Python 3.

Chương 4. THI CÔNG HỆ THỐNG

4.1 Lưu đồ giải thuật

Hình 4.1. Lưu đồ hệ thống

Lưu đồ trên biểu diễn trình tự điều khiển, hoạt động của hệ thống từ khi bắt đầu cấp điện cho đến khi kết thúc của hệ thống đếm số lượng người trong ảnh.

Khi bắt đầu cấp nguồn cho hệ thống, ta chờ khoảng 1 phút để raspberry khởi động xong. Đầu tiên ta tiến hành đọc ảnh đầu vào từ camera. Tiến hành chạy chương trình để xử lý ảnh, chuyển ảnh gốc sang ảnh xám. Sau đó, phát hiện khuôn mặt dùng phương thức detectMultiScale trong ảnh xám. Nếu không có khuôn mặt xuất hiện trong hình, chương trình xuất dữ liệu ra màng hình với kết quả là “ SO NGUOI: 0” rồi kết thúc chương trình. Ngược lại nếu có xuất hiện khuôn mặt trong

hình thì sẽ được vẽ hình chữ nhật xung quanh khuôn mặt sau khi được phát hiện, rồi tiến hành đếm số lượng người đã được vẽ hình chữ nhật. Bước cuối cùng là xuất dữ liệu ra LCD rồi kết thúc.

4.1.1. Ảnh từ camera

Ban đầu hệ thống sẽ nhận ảnh đầu vào từ camera và đọc ảnh với câu lệnh: image = cv2.imread('imange.jpg').

Hình 4.2. Ảnh gốc lấy từ camera 4.1.2. Chuyển ảnh gốc sang ảnh xám

Tiếp theo nhóm tiến hành xử lý ảnh bằng cách chuyển ảnh gốc sang ảnh xám với câu lệnh trong OpenCV: grayImage = cv2.cvtColor (image,

cv2.COLOR_BGR2GRAY).

4.1.3. Phát hiện khuôn mặt [11]

Để tìm khuôn mặt trong hình ảnh ta cần chuyển ảnh màu thành ảnh xám. Sau đónhìn vào mỗi pixel đơn lẻ và các điểm xung quanh nó.

Mục tiêu là tìm ra được độ tối của điểm ảnh hiện tại so với các điểm ảnh xung quanh. Sau đó vẽ một mũi tên chỉ ra hướng mà hình ảnh trở nên tối hơn.

Lặp lại quá trình đó cho mỗi pixel đơn trong ảnh, quá trình sẽ kết thúc với mỗi pixel được thay thế bằng một mũi tên. Những mũi tên này được gọi là gradients và chúng thể hiện hướng từ sáng đến tối trên toàn bộ hình ảnh.

Lý do để thay thế các điểm ảnh bằng các gradient là nếu phân tích pixel trực tiếp ảnh thật sự tối và thật sự sáng của cùng một người sẽ có các giá trị pixel khác nhau. Nhưng khi xem xét về hướng thay đổi độ sáng thì khi kết thúc quá trình ảnh thậtsự sáng và thật sự tối sẽ cùng được diễn tả chính xác.

Việc lưu trữ gradient cho mỗi pixel sẽ cho quá nhiều chi tiết nên tốt hơn là chỉ cần nhìn thấy hướng cơ bản của ánh sáng hay bóng tối ở mức cao hơn để nhìn thấy các mẫu cơ bản của hình ảnh. Để thực hiện việc này, thực hiện chia nhỏ hình ảnh thành những ô vuông nhỏ kích thước 16x16 pixel. Trong mỗi hình vuông đó, thực hiện đếm gradient trong mỗi hướng chính (bao nhiêu điểm lên, điểm lên phải, điểm lên trái, điểm xuống…). Sau đó thay thế hình vuông đó trong hình ảnh bằng hướng mũi tên mạnh nhất. Kết quả cuối cùng là biến hình ảnh ban đầu thành một biểu diễn đơn giảnđể nắm bắt cấu trúc cơ bản của khuôn mặt một cách đơn giản.

Để phát hiện mặt người với các đặc trưng HOG, thực hiện tìm một phần của hình ảnh trong giống nhất với một mẫu HOG đã biết được trích xuất từ một loạt khuôn mặt đã được huấn luyện, chúng tôi tiến hành các bước sau:

Bước 1: Chuẩn bị P mẫu là ảnh mặt người và trích xuất các vector đặc trưng HOG

từcác bức ảnh này.

Bước 2: Chuẩn bị N mẫu không phải ảnh mặt người (N rất lớn so với P) và trích

Bước 3: Sử dụng một bộ phân loại SVM tuyến tính để học các vector của các mẫu

tích cực (là ảnh mặt người) và tiêu cực (các ảnh không phải mặt người) đã chuẩn bị.

Bước 4: Đối với mỗi bức ảnh trong bộ ảnh tiêu cực, sử dụng một cửa sổ trượt di

chuyển đi qua tất cả các vị trí có thể của ảnh vào. Tại mỗi vị trí của cửa sổ trượt tính vector HOG của cửa sổ và đưa vào bộ phân lớp. Nếu bộ phân lớp sai một cửa sổ là ảnh mặt thì ghi lại vector tương ứng cùng với xác xuất phân lớp.

Bước 5: Lấy các mẫu nhận dạng sai ở bước 4 và sắp xếp chúng theo mức xác xuất

nhận dạng sai và cho bộ phân lớp học lại sử dụng các mẫu sai này.

Bước 6: Áp dụng bộ phân lớp đã được học lại với các ảnh cần phát hiện mặt người

Để tìm khuôn mặt trong ảnh nhóm đã dựa vào đặc trưng Haar like kết hợp với Adaboost được cài sẵn trong bộ thư viện OpenCV. Để sử dụng phương thức này trong OpenCV nhóm đã sử dụng hàm detectMultiScale trong ảnh xám vừa được chuyển với các tham số scaleFactor =1.1 và minNeighbors = 3 bằng bộ phân lớp faceCascade. Hàm này thuộc lớp CascadeClassifier (lớp phục vụ tìm kiếm đối tượng của OpenCV).

scaleFactor là tỉ lệ tăng kích thước của khung cửa sổ tìm kiếm. Khi scaleFactor =1.1 thì sau khi quét hết bức ảnh 1 lần, khung cửa sổ tăng kích thướclên 10% và thực hiện lần quét tiếp theo. Tham số này ảnh hưởng tới tốc độ xử lý vs độ tin cậy của chương trình. Nếu để tham số này quá lớn thì tốc độ chương sẽ tăng lên do số lần quét giảm đi, tuy nhiên có thể chương trình có thể bỏ qua không phát hiện được một số khuôn mặt có kích thước nằm giữa 2 khung cửa sổ liên tiếp do độ tăng kích thước khung quá lớn. Nếu để tham số này quá thấp thì chương trình có thể không bỏ sót bất kì khuôn mặt nào nhưng chương trình sẽ tốn nhiều thời gian hơn vì tăng số lần quét lên.

minNeighbors là giá trị tối thiểu số hình chữ nhật lận cận được gộp lại sau khi

quá trình quét đã xong.

4.1.4 Vẽ hình chữ nhật xung quanh khuôn mặt

Hàm detectMultiScale sau khi tìm kiếm xong sẽ trả về bộ gái trị gồm tọa độ gốc của khung hình chứa khuôn mặt x, y; chiều dài, chiều rộng của khung w, h. Các

giá trị này nằm trong mảng faces. Cấu trúc for…in sẽ duyệt qua toàn bộ giá trị này, mỗi bộ giá trị ta dùng hàm rectangle để vẽ 1 hình chữ nhật lên ảnh ban đầu với tọa độ 2 điểm trái trên và phải dưới: (x,y), (x+w, y+h). Thông số (0,255,0) là màu vẽ của khung hình chữ nhật.

Hình 4.4. Ảnh được vẽ hình chữ nhật lên khuôn mặt. 4.1.5. Đếm số lượng khuôn mặt

Sau khi vẽ hình chữ nhật xung quanh khuôn mặt xong, nhóm gọi phương thức

Một phần của tài liệu DEMSOLUONGNGUOITRONGANHSUDUNGKITRASPBERY (Trang 48)

Tải bản đầy đủ (PDF)

(81 trang)