Cài đặt OpenCV 3.2 Python/C++ cho Raspberry PI
Để sử dụng phiên bản mới nhất OpenCV với Python bạn cần build OpenCV từ mã nguồn mở dùng và sử dụng Cmake. Cách làm khá đơn giản nhung bạn cần khá nhiều bước để thực hiện.
Xóa OpenCV mặc định phiên bản cũ
Hệ điều hành Raspbian mặc định cung cấp cho chúng ta OpenCV phiên bản. 2.4.9. Phiên bản này khá là cũ vì vậy chúng ta cần xóa và update phiển bản mới nhất để có được các chức năng mới và tốt nhất.
Thực hiện lệnh dưới đây để xóa phiên bản OopenCV cũ:
sudo apt-get remove libopencv*
sudo apt-get autoremove
Kiểm tra dung lượng bộ nhớ Raspberry Của Bạn ?
Ở bài này chúng ta cần cài đặt OpenCV 3.2 từ ban đầu vì vậy chúng ta cần khoảng 2Gb bộ nhớ tạm trống để build OpenCV.
Chúng ta có thể kiểm tra dung lượng trống Raspberry bằng câu lệnh dưới đây.
Chúng ta có thể kiểm tra dung lượng trống Raspberry bằng câu lệnh dưới đây.
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 6.1G 5.1G 673M 89% /
devtmpfs 427M 0 427M 0% /dev
...
Như trong trường hợp này là còn 673MB bộ nhớ trống !
Giải pháp đơn giản để có được thêm dung lượng là chúng ta có thể sử dụng bộ nhớ USB hoặc thẻ nhớ nơi mà chúng ta có thể tải và build OpenCV.
Giải pháp đơn giản để có được thêm dung lượng là chúng ta có thể sử dụng bộ nhớ USB hoặc thẻ nhớ nơi mà chúng ta có thể tải và build OpenCV.
A Linux file system like ext2 is required because build process uses Linux symbolic link. You can't use some USB stick formatted as FAT or NTFS otherwise, at compile time, you will receive the obscure error:
CMake Error: cmake_symlink_library: System Error: Operation not permitted
Nếu bạn đã có đủ bộ nhớ trống trên KIT Raspberry Pi của bạn hoặc bạn đã có thẻ nhớ/USB đã format dưới dạng Linux filesystem bạn có thể bỏ qua các bước sau đây:
Format USB như Linux Partition
WARNING!!!!! THE OPERATIONS DESCRIBED IN THIS PARAGRAPH WILL DESTROY ALL DATA PRESENT ON YOUR USB MEMORY. In addiction, to use the memory under MS Windows you will have to repartition as Windows and reformat it as vFAT or NTFS
- Cắm USB vào Raspberry dung lượng tối thiểu 2Gb và kiểm tra tên thiết bị thường chuẩn là /dev/sda1 sử dụng lệnh lsblk để hiển thị các thiết bị trên Raspberry PI của bạn:
lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 1 14.6G 0 disk sda1 8:1 1 14.6G 0 part mmcblk0 179:0 0 7.4G 0 disk mmcblk0p1 179:1 0 1G 0 part mmcblk0p2 179:2 0 1K 0 part mmcblk0p3 179:3 0 32M 0 part mmcblk0p5 179:5 0 60M 0 part /boot mmcblk0p6 179:6 0 6.2G 0 part /
- Chắc chắn rằng USB đã được thoát ra. Trong trường hợp chưa tháo ra có thể sử dụng lệnh để unmount
sudo umonut /dev/your-dev-name
- Tạo Linux partition
sudo fdisk /dev/your-dev-name
- In danh sách partitions sử dụng lệnh p
- Xóa tất cả các partition sử dụng lệnh d cho mỗi partitions
- Tạo một partition sử dụng lệnh c
- Chắc chắn kiểu partition là Linux. Trong trường họp thay đổi sử dụng lệnh t
- Lưu thay đổi và thoát w
- Format partition mới:
sudo mkfs -t ext2 /dev/your-dev-name
- Tạo một mount point và mount bộ nhớ:
mkdir ~/usbmem sudo mount /dev/your-dev-name ~/usbmem
Sau cùng chúng ta sử dụng
/home/pi/usbmem
như là thư mục làm việc cho các bước tiếp theo.Quá trình cài đặt OpenCV
Cập nhật hệ thống
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
sudo reboot
Chúng ta nên thực hiện cập nhật hệ thống và khởi động lại KIT trước khi tiếp thành cài đặt để tránh những lỗi không tương thích sau này.
Cài đặt devel tools
sudo apt-get install build-essential cmake cmake-curses-gui pkg-config
Cài đặt các thư viện cần thiết
sudo apt-get install \
libjpeg-dev \
libtiff5-dev \
libjasper-dev \
libpng12-dev \
libavcodec-dev \
libavformat-dev \
libswscale-dev \
libeigen3-dev \
libxvidcore-dev \
libx264-dev \
libgtk2.0-dev
Video4Linux
Python quản lý Raspberry's camera bằng cách sử dụng
picamera
module. Chúng có thể sự dụng module này trong OpenCV nhưng chúng ta cần phải grab images sang numpy.array
sau đó map array sang OpenCV Mat.
Để sử dụng
cv2.VideoCapture(0)
với raspicam chúng ta cần sử dụng thư viện Video4Linux.- Kiểm tra điều kiện ban đầu(vớisudo raspi-config):
- Enable the camera
- Đặt large memory cho
gpu_mem
(Advance Options > Memmory Split
đặt128 min)
- Cài thư viện v4l từ repository:
sudo apt-get -y install libv4l-dev v4l-utils
- Bật kernel module:
sudo modprobe bcm2835-v4l2
- Test module với:
v4l2-ctl --list-devices
Chúng ta se nhận được:mmal service 16.1 (platform:bcm2835-v4l2): /dev/video0
- Test: thư grab một frame và kiểm tra
~/test.jpg
v4l2-ctl --set-fmt-video=width=800,height=600,pixelformat=3 v4l2-ctl --stream-mmap=3 --stream-count=1 --stream-to=~/test.jpg
- Info: kiểm tra tất cả các chức năng điều khiển như brightness, contrast,.. với:
v4l2-ctl --list-ctrls
Nếu tất cả đều làm việc binhf thường, thêm module
bcm2835-v4l2
vào danh sách modules loaded tại thời điểm boot trong /etc/modules-load.d/modules.conf
Các thư viện có thêm:
sudo apt-get install libatlas-base-dev gfortran
Cài đặt Python
Trên Raspbian Jessie Python 2.7 và Python 3 đều có. Ở đây chúng ta cài đặt OpenCV 3.2.0 cho cả hai phiên bản Python .
Is a Python best practice to use a virtualenv to isolate packages into dedicated environment. Adrian Rosebrock on pyimagesearch has very nice tutorial on how to do this (check the link in the Credit paragraph).
Because our Raspberry PI is dedicated to OpenCV we don't use virtualenv here.
Because our Raspberry PI is dedicated to OpenCV we don't use virtualenv here.
Cài đặt python-dev & numpy
sudo apt-get install python2.7-dev python2-numpy
sudo apt-get install python3-dev python3-numpy
Tiến hành cài OpenCV
Ở đây chúng ta sẽ download, cấu hình, build và cài đặt OpenCV.
Download OpenCV
Nhớ rằng nếu chúng ta không có 2GB bộ nhớ trên root partition, chúng ta cần phải dùng các bộ nhớ ngoài với Linux partition. Ở đây chúng ta sư dụng USB memory mounted trong
/home/pi/usbmem
.sudo mount /dev/your-dev-name /home/pi/usbmem
mkdir /home/pi/usbmem/opencv
cd /home/pi/usbmem/opencv
wget https://github.com/opencv/opencv/archive/3.2.0.zip -O opencv_source.zip
wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip -O opencv_contrib.zip
Chúng ta sẽ tiến hành cài đặt
opencv_contrib
mặc dù repo này có một số module không được ổn định nhưng đôi khi chúng ta cũng cần vì riêng source thì không có.Giải nén Unzip files
cd /home/pi/usbmem/opencv
unzip opencv_source.zip
unzip opencv_contrib.zip
Build & Cài đặt OpenCV
Để build và cài đặt OpenCV cho C++, Python2 và Python3 chúng ta cần sử dụng CMake. OpenCV có rất nhiều lự chọn trong việc biện dịch. Chúng ta có thể sử dụng ccmake
Tạo thư mục làm việc:
cd /home/pi/usbmem/opencv/opencv-3.2.0
mkdir build
cd build
Bắt đầu cấu hình build sử dụng command line switch
Dưới đây là cấu hình mặc định. Chúng ta không muốn kể cả phiên bản Debug hoặc Test. Chúng ta được khuyến nghị sử dụng NEON optimization cho ARM Cortex để tăng hiệu năng OpenCV .
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D BUILD_WITH_DEBUG_INFO=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_EXAMPLES=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_opencv_ts=OFF \
-D BUILD_PERF_TESTS=OFF \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.2.0/modules \
-D ENABLE_NEON=ON \
-D WITH_LIBV4L=ON \
../
Sau khi chạy CMake chúng ta sẽ nhận được:
.....
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/usbmem/opencv/opencv-3.2.0/build
Nếu chúng ta không nhìn thấy
Generating done
thì là có vận đề gì đẵ xảy ra (Chúng ta có thể đọc ERROR MSG để phân tích tìm ra nguyên nhân).
Review/modify cấu hình sử dụng CMake TextGUI
Chúng ta có thể thay đổi một số lệnh line switch ở trên hoặc chugns ta có thể dùng ccmake để cấu hình cho các chức năng.
$ ccmake ../
Page 1 of ..
ANT_EXECUTABLE ANT_EXECUTABLE-NOTFOUND
BUILD_CUDA_STUBS OFF
BUILD_DOCS OFF
BUILD_EXAMPLES OFF
BUILD_JASPER ON
BUILD_JPEG ON
BUILD_LIBPROTOBUF_FROM_SOURCES OFF
BUILD_OPENEXR OFF
... more options here ....
Press [enter] to edit option
Press [c] to configure
Press [h] for help Press [q] to quit without generating
Press [t] to toggle advanced mode (Currently Off)
Sau khi cấu hình xong ấn c để kết thúc quá trình. Nếu không có lỗi nào xay ra ấn g để tạo makefile.
Build OpenCV
(sử dụng
-jn
)make -j4
Quá trình biên dịch sẽ khá là lâu ...Nếu có lỗi xay ra thì trình dịch cũng dừng lạ, sau khoảng 2 tiếng chúng ta có thể thấy kết quả:
[100%] Built target ...
Cài đặt OpenCV
Rất đơn giản chỉ cần gõ lệnh sau:
sudo make install
sudo ldconfig
Xin chúc mừng, Raspberry PI đẵ sẵn sàng sử dụng OpenCV :
/usr/local/lib/libcv*
/usr/local/lib/python2.7/dist-packages/cv*
/usr/local/lib/python3.4/dist-packages/cv*
/usr/local/include/opencv2/
/usr/local/bin/opencv_*
/usr/local/share/OpenCV/
Kiểm tra cài đặt
Test với Python 2 hoặc Python 3
Từ cửa sổ terminal chạy python, import cv2 và print version:
$ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print (cv2.__version__)
3.2.0
>>>
Một ví dụ khác
~/ocv-tests/SimpleGrab.py
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
if cap.isOpened() == False:
print('Unable to open the camera')
else:
print('Start grabbing, press a key on Live window to terminate')
cv2.namedWindow('Live');
cap.set(cv2.CAP_PROP_FRAME_WIDTH,320)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,240)
while( cap.isOpened() ):
ret,frame = cap.read()
if ret==False:
print('Unable to grab from the camera')
break
cv2.imshow('Live',frame)
#cv2.waitKey(0);
key = cv2.waitKey(5)
if key==255: key=-1 #Solve bug in 3.2.0
if key >= 0:
break
print('Closing the camera')
cap.release()
cv2.destroyAllWindows()
print('bye bye!')
quit()
Chạy bằng cách ấn F5.Chúng ta có thể xem thêm các ví dụ mẫu ở thư mục
/usr/local/share/OpenCV/samples/python
Test với C++
Tạo file mới với tên
~/ocv-tests/SimpleGrab.cpp
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace std;
int main(int argc,char ** argv)
{
VideoCapture cap(0);
if (!cap.isOpened()) {
cerr << "ERROR: Unable to open the camera" << endl;
return 0;
}
Mat frame;
cout << "Start grabbing, press a key on Live window to terminate" << endl;
while(1) {
cap >> frame;
if (frame.empty()) {
cerr << "ERROR: Unable to grab from the camera" << endl;
break;
}
imshow("Live",frame);
int key = cv::waitKey(5);
key = (key==255) ? -1 : key; //#Solve bug in 3.2.0
if (key>=0)
break;
}
cout << "Closing the camera" << endl;
cap.release();
destroyAllWindows();
cout << "bye!" <<endl;
return 0;
}
Build với lệnh:
g++ $(pkg-config --libs --cflags opencv) -o SimpleGrab SimpleGrab.cpp
chạy file ./SimpleGrab ...
Video Hướng Dẫn:
Video Hướng Dẫn:
Cài đặt OpenCV 3.2 Python/C++ cho Raspberry PI
Reviewed by Jacky
on
tháng 12 26, 2017
Rating:
Không có nhận xét nào: