上一篇咱們講了在linux環境下給樹莓派安裝系統及入門各類資料 ,今天咱們更進一步,嘗試在PI3上安裝openCV開發環境。html
博主在作的過程當中主要參考一個國外小哥的文章(見最後連接1),不過其教程中有一個地方稍微有點問題,致使我入坑很久!這裏也會着重說明下。python
新安裝系統以後,首要的工做就是擴大文件系統。由於,用SD卡安裝完系統後一大部分空間實際是未被分配的:linux
sudo raspi-config
選擇7高級,而後選擇「1. Expand File System」,以後點擊finish,而後reboot 。git
sudo reboot
以後,你能夠用df -h命令確認文件系統是否被擴大:(以下,個人SD卡爲閃迪的32G內存卡)github
➜ ~ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 30G 6.2G 22G 23% / devtmpfs 466M 0 466M 0% /dev tmpfs 470M 0 470M 0% /dev/shm tmpfs 470M 6.4M 464M 2% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 470M 0 470M 0% /sys/fs/cgroup /dev/mmcblk0p1 41M 21M 21M 51% /boot tmpfs 94M 0 94M 0% /run/user/1000
接下來是安裝openCV的依賴,下面步驟有點多,你們千萬別漏了其中一兩個(我操做的時候就把ibjpeg-dev libtiff5-dev libjasper-dev libpng12-dev給忘了,結果又得花幾個小時從新編譯一遍!!!)web
2.1 更新算法
$ sudo apt-get update $ sudo apt-get upgrade
2.2 安裝CMake等編譯openCV源碼的工具bootstrap
$ sudo apt-get install build-essential cmake pkg-config
2.3 安裝幾種常見格式的圖像操做的包,方便咱們能從硬盤上讀取不一樣格式的圖像(有個同窗建議下面的libpng12-dev和後面的gtk2.0會衝突,改爲libpng-dev就合適,若是改爲libpng-dev,系統好像是會自動匹配版本。因爲太忙沒有驗證,先貼這裏,供你們參考選擇)ubuntu
$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
2.4 一樣的,咱們也須要視頻操做的包app
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev $ sudo apt-get install libxvidcore-dev libx264-dev
2.5 openCV用於圖像/GUI展現的功能依賴highgui模塊,爲了編譯highgui,咱們須要安裝GTK development library
$ sudo apt-get install libgtk2.0-dev
2.6 安裝額外的一些依賴
$ sudo apt-get install libatlas-base-dev gfortran
^-^ 記得看一下上面幾個安裝過程有沒有少哦
2.7 接下來還須要安裝python dev
sudo apt-get install python2.7-dev python3-dev
下載並解壓3.1.0版本的源碼:
$ cd ~ $ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip $ unzip opencv.zip
爲了安裝完整的openCV3,體驗新的features,還須要下載並解壓 opencv_contrib(注意和opencv版本保持一致):
$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip $ unzip opencv_contrib.zip
4.1 安裝python包管理器:
$ wget https://bootstrap.pypa.io/get-pip.py $ sudo python get-pip.py
4.2 安裝python虛擬環境virtualenv virtualenvwrapper
首先說明下爲何要裝這兩個包:
First, it’s important to understand that a virtual environment is a special tool used to keep the dependencies required by different projects in separate places by creating isolated, independent Python environments for each of them.
In short, it solves the 「Project X depends on version 1.x, but Project Y needs 4.x」 dilemma. It also keeps your global site-packages neat, tidy, and free from clutter.
If you would like a full explanation on why Python virtual environments are good practice, absolutely give this excellent blog post on RealPython a read.
用虛擬開發環境能夠爲每一個工程提供獨立的python開發環境、獨立的包、獨立的版本,每一個獨立的環境會在~/.virtualenvs/下造成資源包~
$ sudo pip install virtualenv virtualenvwrapper $ sudo rm -rf ~/.cache/pip
以後在~/.profile文件最後添加下面幾行:
# virtualenv and virtualenvwrapper export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh
以後若是想用python虛擬環境,在每次打開一個新的terminal就要執行一次source ~/.profile
$ source ~/.profile
接下來咱們生成一個python虛擬環境來用於opencv的開發提供環境:(這裏不講python2,強烈建議用python3)
$ mkvirtualenv cv -p python3
注:再次說明python虛擬環境是徹底獨立的,也就是說在cv的環境下安裝的python包,步適用於全局;在全局安裝的包,不適合cv。
如何驗證你如何將cv環境生成好了呢?——新開一個terminal,執行下列命令:
$ source ~/.profile
$ workon cv
若是terminal前面的文字變成了(cv)代表成功建立了名爲cv的python虛擬環境:
4.3 在cv虛擬環境下安裝numpy
在接下來的操做中都要保持在cv環境中!
(cv) -> ~ $ pip install numpy
5.1 編譯前的準備
首先肯定是在cv虛擬環境中,若是不在,能夠執行:
$ source ~/.profile
$ workon cv
接下來用cmake進行編譯opencv:
注:這一步參考連接1的介紹中缺乏一個編譯選項,致使老是make出錯:(當其出錯時,按照下面的方法進行嘗試:)
make -j4 老是報錯:
解決方法:刪除build下的全部東西(cmake產生的和make -j4產生的),從新cmake,多加一個下面的選項
反思:以前一直複製網上的,結果網上坑爹把-D和後面單詞連到一塊結果仍是不成功,致使走了好多彎路。以後作事情前要分析緣由(爲何,而後再去嘗試,不要根據結果來反饋嘗試的對錯!!!這樣可能會走彎路!!!)
link:http://answers.opencv.org/question/116926/ubuntu-1610-opencv-build-fails-stdlibh-missing/
- 直接採用ubuntu中opencv的安裝方法會報QT缺乏的錯誤:http://www.samontab.com/web/2014/06/installing-opencv-2-4-9-in-ubuntu-14-04-lts/
$ cd ~/opencv-3.1.0/ $ mkdir build $ cd build $ cmake -D ENABLE_PRECOMPILED_HEADERS=OFF \ -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \ -D BUILD_EXAMPLES=ON ..
cmake結束以後,會出現下圖所示:(當時忘了截圖了,盜用別人的一張 ^-^ )
請仔細校對下python3欄的Interpreter的python虛擬環境的路徑,numpy指向python虛擬環境下的numpy安裝路徑等...
5.2 開始編譯opencv
上面準備好了一切,只等make了!請再次確保您在cv虛擬環境中:
$ make -j4
編譯過程大概會用2~3個小時!-j4是採用4線程編譯,若是採用4線程編譯出現問題請採用單線程編譯:
$ make clean $ make
編譯結束後會出現下圖所示(也沒有留截圖,直接盜別人的圖):
5.3 安裝opencv
接下來就只須要幾個簡單的命令就能安裝了:
$ sudo make install $ sudo ldconfig
接下來作一點收尾工做,而後就能用你的PI開發圖像識別的項目了!
opencv編譯好以後就能夠make install安裝了,編譯是通用的,install是將相應的模塊、DEMO放到相應的文件夾內;
下面幾步主要是在python虛擬環境中連接到opencv模塊:(知其因此然)
上面當運行完make install以後OpenCV+Python的打包文件將安裝在:/usr/local/lib/python3.4/site-packages
$ ls -l /usr/local/lib/python3.4/site-packages/ total 1852 -rw-r--r-- 1 root staff 1895932 Mar 20 21:51 cv2.cpython-34m.so
咱們須要將cv2.cpython-34m.so重命名爲cv2.so:
$ cd /usr/local/lib/python3.4/site-packages/ $ sudo mv cv2.cpython-34m.so cv2.so
而後須要將python虛擬環境中的cv2.so連接到上面剛被更名爲cv2.so的文件上:
$ cd ~/.virtualenvs/cv/lib/python3.4/site-packages/ $ ln -s /usr/local/lib/python3.4/site-packages/cv2.so cv2.so
進入cv環境,而後調用簡單的python指令:
$ source ~/.profile $ workon cv $ python >>> import cv2 >>> cv2.__version__ '3.1.0' >>>
此時在home目錄下還有兩個編譯、安裝opencv時使用的文件夾,理論上能夠直接刪除掉,可是我建議仍是先理解下整個操做流程以後再刪掉!
由於,對opencv源碼的編譯是須要很長時間的,一旦以後發現有什麼問題,能夠查看或修改opencv源碼來嘗試解決問題!
➜ ~ ls Desktop Documents Downloads get-pip.py Music opencv-3.1.0 opencv_contrib-3.1.0 Pictures Public python_games Templates Videos
編譯、安裝好以後,其DEMO放在/usr/local/share/OpenVC/sample/python目錄下:
注意:一、運行opencv的DEMO不要在ssh中運行,某些程序是須要GUI的;
二、opencv的比較多的DEMO都須要攝像頭,買不起樹莓派自帶的貴的,能夠淘寶上隨便買個20多塊錢的免去動USB攝像頭;
因爲在usr目錄下的DEMO都是隻讀文件、且其中少了data文件夾(data文件夾是DEMO所須要的一些圖片及視頻資源),
若是直接運行的話,會報資源缺乏等問題:
(cv) ➜ python python houghlines.py This example illustrates how to use Hough Transform to find lines Usage: houghlines.py [<image_name>] image argument defaults to ../data/pic1.png Traceback (most recent call last): File "houghlines.py", line 33, in <module> a,b,c = lines.shape AttributeError: 'NoneType' object has no attribute 'shape'
所以,咱們將/usr/local/share/OpenVC/sample/文件拷貝到Downloads/sample/,同時從openCV的源碼文件中找到data文件夾,並複製到sample目錄下:
cp -r /usr/local/share/OpenCV/samples ~/Downloads/samples cp -r ~/opencv-3.1.0/samples/data ~/Downloads/samples/data/ (cv) ➜ samples tree -L 1 ~/Downloads/samples /home/pi/Downloads/samples ├── data └── python
以下是運行霍夫找直線的DEMO效果:
kmeans聚類算法:(cv) ➜ python python kmeans.py
邊緣檢測算法:(cv) ➜ python python edge.py
模式識別算法:(cv) ➜ python python find_obj.py
運動方向檢測,光流算法:(cv) ➜ python python lk_track.py
參考連接
:: 若是您以爲不錯,請推薦給更多人,幫助他們更快地解決實際問題中的坑~
@beautifulzzzz 智能硬件、物聯網,熱愛技術,關注產品 博客:http://blog.beautifulzzzz.com 園友交流羣:414948975