使用OS :Ubuntu MATE 16.04,請參照前兩篇有關Raspbarry pi 3的安裝.
(1)How to install Ubuntu Mate 16.04 in Raspbarry Pi 3(如何在Raspbarry pi 3安裝Ubuntu 16.04)
http://arbu00.blogspot.tw/2016/05/how-to-install-ubuntu-mate-1604-in.html
(2)How to install SSH,WinSCP and VNC in Raspbarry pi 3(如何在Raspbarry pi 3安裝SSH,WinSCP,VNC)
http://arbu00.blogspot.tw/2016/05/how-to-install-sshwinscp-and-vnc-in.html
接下來會說明如何安裝OPENCV 以及匯入OPENCV 到Python 3.x 語言上,透過Python
即可以操作OPENCV 的功能.OPENCV原本是Intel 內部的一個計劃專案,主要可以從事影像處裡及辨識,如人臉辨識,也包含了一些機器學習,統計,類神經網路的功能.是一個強大好用的開源API.原本的OPENCV 是由C/C++的開源碼寫成. 底下透過一些方式可以將OPENCV 編譯成一個.so檔.即可以匯入Python 3 語言中使用.最後實作一個範例可以辨識出圖片的紅色區塊並將其圈起來.
底下作法參考原始連結來自Adrian Rosebrock:
http://www.pyimagesearch.com/2015/07/20/install-opencv-3-0-and-python-3-4-on-ubuntu/
基本上以下的做法大概就是使用 Adrian Rosebrock所寫,只是增加一些可能出錯的步驟上多加解釋.
Step 1: 更新必要安裝
以下指令對於linux的使用者應該不陌生,如是第一次執行可能要一段時間.進行動作前請先確認Raspbarry pi 有連上網路.
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo rpi-update
由於有更新RPi 韌體,所以需要做一次重新開機
$ sudo reboot
底下是安裝必要的編譯器來 compile OpenCV 3.0:
$ sudo apt-get install build-essential cmake git pkg-config
底下安裝是用來讀取各種圖片檔
$ sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
底下安裝是用來讀取各種影片檔
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
安裝GTK以便使用OPENCV GUI的功能
$ sudo apt-get install libgtk2.0-dev
底下的安裝是為了最佳化OPENCV 的功能,例如矩陣的運算:
$ sudo apt-get install libatlas-base-dev gfortran
Step 2: 安裝虛擬環境
取得PIP for Python 3.PIP是 Python 各種安裝套件的管理程式
$ wget https://bootstrap.pypa.io/get-pip.py
$ python3 get-pip.py
底下會安裝一個虛擬環境,我們打算把OPENCV及Python3安裝在虛擬環境上
使用 pip3 安裝 virtualenv 還有virtualenvwrapper :
$ sudo rm -rf ~/.cache/pip/
$ sudo pip install virtualenv virtualenvwrapper
在執行pip時,如果遇到以下黃色訊息,除了試著執行sudo rm -rf ~/.cache/pip/
也可以試著執行pip install virtualenv virtualenvwrapper 不用sudo試試.
更新 ~/.bashrc 檔,編輯底下敘述在檔案的最下面 :
可以用 $ sudo nano ~/.bashrc 去編輯
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
重新在終端機上執行 ~/.bashrc 使剛剛的變更生效
$ source ~/.bashrc
接來創建一個虛擬環境 cv ,我們會在這個虛擬環境上使用OPENCV及Python3
$ mkvirtualenv cv -p python3
==>這個動作會把 虛擬環境CV 的python 預設為python3
Step 2: 安裝Python (Part 2)
安裝python3.4+,注意如果你想安裝更新的python版本,如python3.5,需要把以下的python3.4-dev
改成python3.5-dev.
$ sudo apt-get install python3.5-dev
安裝numpy,這個很重要是專門用來處理OPENCV 有關影像圖檔的函式.也可以說這個是用來取代
原本在OPENCV裡的MAT 結構.在python裡我們就是用Numpy 來處理圖檔及矩陣資料.
$ sudo rm -rf ~/.cache/pip/
$ sudo pip install numpy
==>安裝Numpy 會花比較多時間
Step 3:編譯OPENCV並連結到Python3
下載OPENCV 3.0.0 原始碼.
$ cd ~
$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.0.0.zip
$ unzip opencv.zip
下載 opencv_contrib ,如果OPENCV是3.0.0版本 opencv_contrib就要下載對應的3.0.0版
$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.0.0.zip
$ unzip opencv_contrib.zip
以下命令準備進行編譯OPENCV.
$ cd ~/opencv-3.0.0/
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.0.0/modules \
-D BUILD_EXAMPLES=ON ..
這個動作執行完,拉回檢查,應該要有以下訊息如果沒有,可能要回過頭檢查之前pip 相關安裝動作有沒有正確.
底下進行OpenCV 編譯:這裡大概要幾個小時的時間,j4是代表4核心CPU,Raspbarry pi3 是4核心
所以就用j4即可.
$ make -j4
如果OPENCV編譯100%成功後,進行以下命令安裝OPENCV,如果編譯過程有遇到當機情形可以試著重新編譯幾次,他會從上次未編譯完成的地方開始繼續編譯.編譯順利的話至少也要3個小時
底下執行安裝編譯好的OPENCV
$ sudo make install
$ sudo ldconfig
Step 4: Sym-link OpenCV 3.0
如果到這邊都沒問題,應該在目錄/usr/local/lib/python3.5/site-packages/會看到cv2.cpython-35m-arm-linux-gnueabihf.so
cv2.cpython-35m-arm-linux-gnueabihf.so 這個檔名可能會因為所安裝的os 版本而略有不同
請注意換成你所生成的檔名進行下一步.
最後由於我們是在虛擬環境上使用OPENCV ,所以必須sym-link OpenCV 到所產生在/usr/local/lib/python3.5/site-packages/的 cv2.cpython-35m-arm-linux-gnueabihf.so
並把名稱改成cv2.so. 最終的目的就是為了得到cv2.so
$ cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
$ ln -s /usr/local/lib/python3.5/site-packages/cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so
Step 5: 測試OPENCV in Python3
接著直接利用import 來測試,Python 是不是可以匯入引用OPENCV的API.
$ workon cv
$ python
>>> import cv2
>>> cv2.__version__
'3.0.0'
看到底下的結果,表示一切都成功了
最後利用OPENCV實作一個辨識顏色的功能,在Python 程式裡讀進任一張圖片
它會自動辨識紅色然後圈出紅色的部分.
底下是python3+opencv 3 辨識紅色的原始碼.
##red1,py
# import the necessary packages
import numpy as np
import cv2
# load the games image
image = cv2.imread("1.jpg")
# find the red color game in the image
upper = np.array([65, 65, 255])
lower = np.array([0, 0, 200])
mask = cv2.inRange(image, lower, upper)
# find contours in the masked image and keep the largest one
(_, cnts, _) = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
c = max(cnts, key=cv2.contourArea)
# approximate the contour
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.05 * peri, True)
# draw a green bounding box surrounding the red game
cv2.drawContours(image, [approx], -1, (0, 255, 0), 4)
cv2.imshow("Image", image)
cv2.waitKey(0)
底下是我應用在阿布拉機上的兩個DEMO程式
第一個是透過攝影機 即時辨認顏色
第二個是透過攝影機 即時辨認人臉,當辨識出人臉會擺出動作說歡迎參觀
加入阿布拉機的3D列印與機器人的FB粉絲團
https://www.facebook.com/arbu00/
Scan QRcode to join FB Fans.