天天看點

樹莓派python3 opencv_[樹莓派(raspberry pi)] 02、PI3安裝openCV開發環境做圖像識别(詳細版)...

前言

上一篇我們講了在linux環境下給樹莓派安裝系統及入門各種資料 ,今天我們更進一步,嘗試在PI3上安裝openCV開發環境。

部落客在做的過程中主要參考一個國外小哥的文章(見最後連結1),不過其教程中有一個地方稍微有點問題,導緻我入坑好久!這裡也會着重說明下。

1、Expand filesystem

新安裝系統之後,首要的工作就是擴大檔案系統。因為,用SD卡安裝完系統後一大部分空間實際是未被配置設定的:

sudo raspi-config

選擇7進階,然後選擇“1. Expand File System”,之後點選finish,然後reboot 。

樹莓派python3 opencv_[樹莓派(raspberry pi)] 02、PI3安裝openCV開發環境做圖像識别(詳細版)...
樹莓派python3 opencv_[樹莓派(raspberry pi)] 02、PI3安裝openCV開發環境做圖像識别(詳細版)...

sudo reboot

之後,你可以用df -h指令确認檔案系統是否被擴大:(如下,我的SD卡為閃迪的32G記憶體卡)

➜ ~ df -h

Filesystem Size Used Avail Use%Mounted on/dev/root 30G 6.2G 22G 23% /devtmpfs 466M0 466M 0% /dev

tmpfs 470M0 470M 0% /dev/shm

tmpfs 470M6.4M 464M 2% /run

tmpfs5.0M 4.0K 5.0M 1% /run/lock

tmpfs 470M0 470M 0% /sys/fs/cgroup/dev/mmcblk0p1 41M 21M 21M 51% /boot

tmpfs 94M0 94M 0% /run/user/1000

2、Install dependencies

接下來是安裝openCV的依賴,下面步驟有點多,大家千萬别漏了其中一兩個(我操作的時候就把ibjpeg-dev libtiff5-dev libjasper-dev libpng12-dev給忘了,結果又得花幾個小時重新編譯一遍!!!)

2.1 更新

$ sudo apt-get update

$sudo apt-get upgrade

2.2 安裝CMake等編譯openCV源碼的工具

$ sudo apt-get install build-essential cmake pkg-config

2.3 安裝幾種常見格式的圖像操作的包,友善我們能從硬碟上讀取不同格式的圖像(有個同學建議下面的libpng12-dev和後面的gtk2.0會沖突,改成libpng-dev就合适,如果改成libpng-dev,系統好像是會自動比對版本。由于太忙沒有驗證,先貼這裡,供大家參考選擇)

$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

2.4  同樣的,我們也需要視訊操作的包

$ 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、Download the OpenCV source code

下載下傳并解壓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、準備python環境

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 installvirtualenv 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虛拟環境:

樹莓派python3 opencv_[樹莓派(raspberry pi)] 02、PI3安裝openCV開發環境做圖像識别(詳細版)...

4.3 在cv虛拟環境下安裝numpy

在接下來的操作中都要保持在cv環境中!

(cv) -> ~ $ pip install numpy

5、編譯和安裝openCV

5.1 編譯前的準備

首先确定是在cv虛拟環境中,如果不在,可以執行:

$ source ~/.profile

$ workon cv

接下來用cmake進行編譯opencv:

注:這一步參考連結1的介紹中缺少一個編譯選項,導緻總是make出錯:(當其出錯時,按照下面的方法進行嘗試:)

make -j4 總是報錯:

解決方法:删除build下的所有東西(cmake産生的和make -j4産生的),重新cmake,多加一個下面的選項

反思:之前一直複制網上的,結果網上坑爹把-D和後面單詞連到一塊結果還是不成功,導緻走了好多彎路。之後做事情前要分析原因(為什麼,然後再去嘗試,不要根據結果來回報嘗試的對錯!!!這樣可能會走彎路!!!)

$ cd ~/opencv-3.1.0/$mkdirbuild

$ 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安裝路徑等...

樹莓派python3 opencv_[樹莓派(raspberry pi)] 02、PI3安裝openCV開發環境做圖像識别(詳細版)...

5.2 開始編譯opencv

上面準備好了一切,隻等make了!請再次確定您在cv虛拟環境中:

$ make -j4

編譯過程大概會用2~3個小時!-j4是采用4線程編譯,如果采用4線程編譯出現問題請采用單線程編譯:

$ makeclean

$make

編譯結束後會出現下圖所示(也沒有留截圖,直接盜别人的圖):

樹莓派python3 opencv_[樹莓派(raspberry pi)] 02、PI3安裝openCV開發環境做圖像識别(詳細版)...

5.3 安裝opencv

接下來就隻需要幾個簡單的指令就能安裝了:

$ sudo make install$sudo ldconfig

6、pi3安裝opencv3收尾工作

接下來做一點收尾工作,然後就能用你的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/total1852

-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

7、測試OpenCV3是否安裝成功

進入cv環境,然後調用簡單的python指令:

$ source ~/.profile

$ workon cv

$ python>>>import cv2>>>cv2.__version__'3.1.0'

>>>

此時在home目錄下還有兩個編譯、安裝opencv時使用的檔案夾,理論上可以直接删除掉,但是我建議還是先了解下整個操作流程之後再删掉!

因為,對opencv源碼的編譯是需要很長時間的,一旦之後發現有什麼問題,可以檢視或修改opencv源碼來嘗試解決問題!

➜ ~ lsDesktop Documents Downloads get-pip.py Music opencv-3.1.0 opencv_contrib-3.1.0Pictures Public python_games Templates Videos

8、跑幾個簡單的圖像識别的DEMO

編譯、安裝好之後,其DEMO放在/usr/local/share/OpenVC/sample/python目錄下:

樹莓派python3 opencv_[樹莓派(raspberry pi)] 02、PI3安裝openCV開發環境做圖像識别(詳細版)...

注意:1、運作opencv的DEMO不要在ssh中運作,某些程式是需要GUI的;

2、opencv的比較多的DEMO都需要攝像頭,買不起樹莓派自帶的貴的,可以淘寶上随便買個20多塊錢的免去動USB攝像頭;

由于在usr目錄下的DEMO都是隻讀檔案、且其中少了data檔案夾(data檔案夾是DEMO所需要的一些圖檔及視訊資源),

如果直接運作的話,會報資源缺少等問題:

(cv) ➜ python python houghlines.py

This example illustrates how to use Hough Transform tofindlines

Usage:

houghlines.py []

image argument defaults to ../data/pic1.png

Traceback (most recent calllast):

File"houghlines.py", line 33, in 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/samplescp -r ~/opencv-3.1.0/samples/data ~/Downloads/samples/data/(cv) ➜ samples tree-L 1 ~/Downloads/samples/home/pi/Downloads/samples

├── data

└── python

如下是運作霍夫找直線的DEMO效果:

樹莓派python3 opencv_[樹莓派(raspberry pi)] 02、PI3安裝openCV開發環境做圖像識别(詳細版)...

kmeans聚類算法:(cv) ➜  python  python kmeans.py

樹莓派python3 opencv_[樹莓派(raspberry pi)] 02、PI3安裝openCV開發環境做圖像識别(詳細版)...

邊緣檢測算法:(cv) ➜  python  python edge.py

樹莓派python3 opencv_[樹莓派(raspberry pi)] 02、PI3安裝openCV開發環境做圖像識别(詳細版)...

模式識别算法:(cv) ➜ python python find_obj.py

樹莓派python3 opencv_[樹莓派(raspberry pi)] 02、PI3安裝openCV開發環境做圖像識别(詳細版)...

運動方向檢測,光流算法:(cv) ➜  python  python lk_track.py

樹莓派python3 opencv_[樹莓派(raspberry pi)] 02、PI3安裝openCV開發環境做圖像識别(詳細版)...

參考連結

:: 如果您覺得不錯,請推薦給更多人,幫助他們更快地解決實際問題中的坑~

@beautifulzzzz

智能硬體、物聯網,熱愛技術,關注産品

部落格:http://blog.beautifulzzzz.com

園友交流群:414948975