Bài Viết Mới Nhất

10/08/2024

Hướng dẫn compile OpenCV 3.x.x trên Raspberry Pi



Hôm nay chúng ta cùng cài đặt OpenCV, một thư viện mã nguồn mở hàng đầu cho thị giác máy tính (computer vision), xử lý ảnh, máy học và các tính năng tăng tốc GPU trong hoạt động thời gian thực. Chúng ta sẽ dùng thư viện này ứng dụng vào việc xử lý ảnh và nhận dạng các đối tượng (Người, vật thể ...) với Raspberry Pi và Camera CSI cho Raspberry Pi.

Tải về Wireless Network Watcher để tìm IP của Pi (cũng có thể dùng để xem IP các thiết bị khác đang kết nối wifi của bạn). 
Mật khẩu: hano.cf

Giao diện chương trình như ở hình dưới, bạn kiếm tên thiết bị Pi ở mục Device Name, nhìn tương ứng qua có địa chỉ IP của nó hiện là 192.168.100.9


Tải Putty (SSH – telnet client) bản mới nhất về
Mở Putty và nhập vào như sau 
- Hostname: nhập vào địa chỉ IP của Pi, ở bước trên đã tìm được là 192.168.100.9
- Port 22


Bấm Open. 
Màn hình terminal đến Pi sẽ hiện lên như sau nếu không có lỗi


Nhập vào thông tin đăng nhập như sau: 
- User: pi (nếu nhập sai tên đăng nhập, tắt putty và mở lại) 
- Password : raspberry
Sau khi đăng nhập thành công màn hình sẽ hiện lên như thế này


Kiểm tra phiên bản Raspbian hiện tại bằng cách nhập lệnh
cat /etc/*-release
Nếu kết quả trả về thế này nghĩa là bạn đang dùng Raspbian Stretch
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)

Nhập lệnh sau vào terminal:
sudo raspi-config


 Sau đó, chọn mục Advanced Options


 Tiếp theo, chọn mục Expand Filesystem


 Bấm OK


Bấm Finish


Bấm Yes


Sau khi khởi động lại hệ thống, tập tin của bạn đã được mở rộng bao gồm tất cả không gian có sẵn trên thẻ MicroSD của bạn. Bạn có thể kiểm tra bằng cách nhập lệnh
df -h


Cập nhật các gói hiện có bằng cách nhập lần lượt 2 lệnh sau
sudo apt-get update
sudo apt-get upgrade

Khởi động lại Pi sau khi cập nhật phần mềm
sudo reboot

Cài đặt công cụ phát triển
sudo apt-get install build-essential cmake pkg-config

Cài đặt một số gói I/O hình ảnh cho phép tải các định dạng hình ảnh khác nhau như JPEG, PNG, TIFF…
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

Cài đặt gói video I/O cho phép tải các định dạng video khác nhau 
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev

Cài đặt thư viện phát triển GTK (công cụ tạo giao diện đồ họa) để biên soạn module phụ của OpenCV, cho phép hiển thị hình ảnh trên màn hình và xây dựng các giao diện GUI đơn giản
sudo apt-get install libgtk2.0-dev libgtk-3-dev

Cài đặt các gói tối ưu hóa (cải thiện các phép toán ma trận cho OpenCV) 
sudo apt-get install libatlas-base-dev gfortran

Cài đặt python 3 và numpy 
sudo apt-get install python3 python3-setuptools python3-dev -y
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
sudo pip3 install numpy

Tải xuống OpenCV 3.x.x (phiên bản bao nhiêu tùy bạn lựa chọn). Để biết thêm về các phiên bản OpenCV hiện có, bạn truy cập vào đây 
Tính đến thời điểm này thì OpenCV 3.4.10 đang là bản mới nhất nên chúng ta sẽ tải nó về.
cd ~
wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.10.zip
unzip opencv.zip

Nếu muốn tải phiên bản OpenCV khác thì thay vào phần tô đỏ 3.4.10
Ví dụ, muốn tải phiên bản OpenCV 3.4.0 thì thay thành dòng lệnh
wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.0.zip

Cài kho lưu trữ opencv_contrib. Lưu ý: Đảm bảo phiên bản opencv và opencv_contrib của bạn giống nhau (trong trường hợp này là 3.4.10). Nếu số phiên bản không khớp nhau, có khả năng bạn sẽ gặp phải lỗi compile-time hoặc runtime errors.
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.10.zip
unzip opencv_contrib.zip

Biên dịch và cài đặt OpenCV 3.x.x cho Python 3
$ cd opencv-3.4.10 
$ mkdir build 
$ cd build 
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
 -D CMAKE_INSTALL_PREFIX=/usr/local \
 -D BUILD_opencv_java=OFF \
 -D BUILD_opencv_python2=OFF \
 -D BUILD_opencv_python3=ON \
 -D PYTHON_DEFAULT_EXECUTABLE=$(which python3) \
 -D INSTALL_C_EXAMPLES=OFF \ -D INSTALL_PYTHON_EXAMPLES=ON \
 -D BUILD_EXAMPLES=ON\
 -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.10/modules \
 -D WITH_CUDA=OFF \
 -D BUILD_TESTS=OFF \
 -D BUILD_PERF_TESTS= OFF  ..

Tăng kích thước swap space để cho phép OpenCV biên dịch với tất cả bốn lõi của Raspberry PI mà không bị treo biên dịch do vấn đề bộ nhớ
sudo nano /etc/dphys-swapfile

Các bạn thực hiện tăng kích thước swap space của mình bằng việc sửa đổi từ CONF_SWAPSIZE  = 100 thành CONF_SWAPSIZE = 1024

Khi hoàn thành các bạn sử dụng tổ hợp phím để thoát Ctrl + X, chọn YEnter để lưu file. 

Để kích hoạt swap space mới, hãy khởi động lại swap service
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

Giờ chúng ta có thể biên dịch chương trình một cách bình thường.
make -j4

-j4 là viết tắt của số lõi để sử dụng khi biên soạn OpenCV. Vì chúng ta đang sử dụng Raspberry Pi 3 nên sẽ tận dụng tất cả bốn lõi của bộ vi xử lý để xử lý nhanh hơn.

Cài đặt OpenCV vào hệ thống bằng lệnh
sudo make install
sudo ldconfig

Kiểm tra python và OpenCV sau khi cài đặt
python3

>>> import cv2
>>> cv2.__version__

Đổi kích thước swap space về ban đầu 
sudo nano /etc/dphys-swapfile
CONF_SWAPSIZE  = 100 

Khi hoàn thành các bạn sử dụng tổ hợp phím để thoát Ctrl + X, chọn Y và Enter để lưu file. 

Cuối cùng, kích hoạt swap space mới
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

Bài viết liên quan