Top Ad unit 728 × 90


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.
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.
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
  1. 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 /
    
  2. 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
  3. 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
  4. Format partition mới:
    sudo mkfs -t ext2 /dev/your-dev-name
  5. 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.
  1. Kiểm tra điều kiện ban đầu(vớisudo raspi-config):
    1. Enable the camera
    2. Đặt large memory cho gpu_mem (Advance Options > Memmory Split đặt128 min)
  2. Cài thư viện v4l từ repository:
    sudo apt-get -y install libv4l-dev v4l-utils
  3. Bật kernel module:
    sudo modprobe bcm2835-v4l2
  4. Test module với:
    v4l2-ctl --list-devices
    Chúng ta se nhận được:
    mmal service 16.1 (platform:bcm2835-v4l2):
             /dev/video0
  5. 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
  6. 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.

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:


Cài đặt OpenCV 3.2 Python/C++ cho Raspberry PI Reviewed by Jacky on tháng 12 26, 2017 Rating: 5

Không có nhận xét nào:

All Rights Reserved by Cộng Đồng OpenCV © 2017
Edit bởi: Jacky Le | Youtube Channel: JACKY LE

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Được tạo bởi Blogger.