2017年11月6日 星期一

[RPI3] 安裝opencv 3.3



最近想在Rpi3上使用opencv ,網路上找到許多方法,有的版本不太符合經測試後將安裝過程紀錄於此以下設定以2017-06-21-raspbian-jessie版本為準 紅色粗體字表示設定項目 藍色粗體字表示指令 黑色粗體字表示編輯內容、選擇設定或輸入

一般若是要安裝現成的套件,可以直接下指令
sudo apt-get install libopencv-dev
不過得到的OpenCV版本可能較舊,如須叫新版本須自行下載原始碼自行編譯。

先更新系統
sudo apt-get update
sudo apt-get upgrade

安裝基本編譯工具
sudo apt-get install build-essential cmake gcc pkg-config git
sudo apt-get install libatlas-base-dev gfortran

安裝影像與視訊支援程式庫
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk2.0-dev

安裝python以進行編譯工作
sudo apt-get install python2.7-dev python3-dev

下載opencv原始程式碼 (紅字為版本號碼)
cd ~
wget -O opencv-3.3.0.zip.zip https://github.com/Itseez/opencv/archive/3.3.0.zip
wget -O opencv_contrib-3.3.0.zip.zip https://github.com/Itseez/opencv_contrib/archive/3.3.0.zip
unzip opencv-3.3.0.zip.zip
unzip opencv_contrib-3.3.0.zip.zip

安裝pytyhon virtualenv工具
sudo pip install virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip

設定執行環境編輯~/.profile檔案
echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.profile
echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile

執行以下指令讓.profile生效
source ~/.profile

建立pythonvirtualenv 環境
mkvirtualenv cv -p python3

若找不到mkvirtualenv可執行source ~/.profile

每次重開機後須啟用virtual cv環境
source ~/.profile
workon cv
安裝成功的話,會看到提示符號前面多一個(cv),表示已在cv環境

安裝要使用的python package (大約需要10分鐘)
pip install numpy

開始進行編譯,須確認在 (cv) 環境下才能開始編譯 (啟用virtual cv環境)
cd ~/opencv-3.3.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.3.0/modules \
    -D BUILD_EXAMPLES=ON ..
cmake會根據環境產生需要的makeflie,如無失敗訊息就可繼續進行make
make –j4

如果用4核心編譯失敗的話須清除後再重新用單核心編譯
make clean
make

建立安裝程式庫
sudo make install
sudo ldconfig

檢查版本是否正確
pkg-config --modversion opencv

以下根據python版本進行設定

設定Python 2.7檔案連結 (此步驟預設是不用做 )
檢查是否有cv2.so函式庫:
ls -l /usr/local/lib/python2.7/site-packages/
設定鏈結:
cd ~/.virtualenvs/cv/lib/python2.7/site-packages/
ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so

設定Python 3檔案連結 (此步驟預設是要做 )
檢查是否有cv2.cpython-34m.so函式庫:
ls -l /usr/local/lib/python3.4/site-packages/
改檔名以避免版本混淆:
cd /usr/local/lib/python3.4/site-packages/
sudo mv cv2.cpython-34m.so cv2.so
設定鏈結:
cd ~/.virtualenvs/cv/lib/python3.4/site-packages/
ln -s /usr/local/lib/python3.4/site-packages/cv2.so cv2.so
 
Python程式測試先下載測試影像watch.jpg
wget https://pythonprogramming.net/static/images/opencv/watch.jpg

編輯一個opencv_test.py程式

import cv2
img = cv2.imread('watch.jpg',cv2.IMREAD_GRAYSCALE)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

執行
python opencv_test.py

gcc程式測試編輯一個opencv_test.cpp程式

 #include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char **argv)
{
    Mat image = imread("watch.jpg", CV_LOAD_IMAGE_COLOR);
    namedWindow("watch", WINDOW_AUTOSIZE);
    imshow("watch", image);
    waitKey(0);
    return 0;
}

 編譯:
g++ -lopencv_core -lopencv_highgui -lopencv_imgcodecs opencv_test.cpp
g++ `pkg-config --libs opencv` opencv_test.cpp –o opencv_test

執行:
./opencv_test

--安裝成功刪除無用檔案
cd ~
rm -rf opencv-3.3.0 opencv_contrib-3.3.0
rm opencv-3.3.0.zip opencv_contrib-3.3.0.zip


--參考資料
https://www.pyimagesearch.com/2016/04/18/install-guide-raspberry-pi-3-raspbian-jessie-opencv-3/
http://yehnan.blogspot.tw/2015/12/raspberry-piraspbianopencv.html

沒有留言:

張貼留言