2014年12月12日 星期五

[Raspberry Pi ] Raspberry Pi 用 openCV開啟WebCam

由於我用JMF 在RaspBerry Pi上無法找到WebCam,便想起念書時用過的OpenCV ,
Google了一下,有前輩們寫出解法,我參考了以下這個連結,安裝好了OpenCV ,
雖然中途有遇到一些問題,也爬文做了些修改,最後成功開啟WebCam,一切安好。

安裝OpenCV Raspberry Pi / Banana Pi

一、首先要安裝一些套件在Pi上,在官方最新版的OS上(1.3.10),

其實有部份都己經存在了。


sudo  apt-get install build-essential

sudo  apt-get install cmake

sudo  apt-get install pkg-config

sudo  apt-get install libgtk2.0-dev libgtk2.0

sudo  apt-get install zlib1g-dev

sudo  apt-get install libpng-dev

sudo  apt-get install libjpeg-dev

sudo  apt-get install libtiff-dev

sudo  apt-get install libavcodec-dev

sudo  apt-get install swig

二,下載linux/Mac 版的OpenCV ,本例我是下載2.4.10

http://opencv.org/downloads.html


































三、解壓縮

unzip opencv-2.4.10.zip 

四、進入資料夾


cd opencv-2.4.10/

五、建立一個存放編譯後檔案的資料夾

mkdir release

六、進入此資料夾

cd release

七、編譯 (注意 最後二個 ..  指的是上一層目錄  ,並不是省略)

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

sudo apt-get update

make

make這個部份要很久,我等了2~3個小時才編譯到28% ,良心建議在睡前開下去make,

天亮起來就差不多了。

八、安裝

sudo make install

九,編輯bash.bashrc  加入環境變數

sudo nano /etc/bash.bashrc 

在文件的最下方加入

PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

export PKG_CONFIG_PATH
























按下 Ctrl + O  存檔 ,再按下Ctrl + X 離開編輯。

十、測試一下pkconfig

pkg-config --modversion opencv

如果版本和小弟的相同,應該會出現如下圖中的2.4.10






注意,在modversion前面是 2個減號。

十一、 新增一個 WebCam.cpp

sudo nano WebCam.cpp

程式碼內容如下
#include "opencv2/highgui/highgui.hpp"

using namespace cv;

int main()
{
    Mat image;
    
    VideoCapture cap;      //capture的宣告
    cap.open(0);           //0 為預設camera
    
    while(cap.isOpened())  //確認camera能開啓
    {
        cap>>image;        //截取影像到image裡方法        
        if (!image.empty()) 
         imshow("Webcam live", image);
        
        waitKey(33);//避免CPU負荷,給點delay時間
        //實際上一般webcam的framerate差不多33ms
    }
    
    return 0;
}
一樣按Ctrl + o存檔,Ctrl+x離開。 接下來要編譯程式

注意一下程式碼中的

 if (!image.empty()) 
       imshow("Webcam live", image);
在網上找到的範例中並沒有 if (!image.empty()) ,在我的桌機上是正常的,

但在Pi上沒加會爆掉,這行作用是限制讀到的影像不是空的才顯示出來。

十二、編譯程式碼


g++ `pkg-config --cflags --libs opencv` WebCam.cpp -o WebCam

注意,並沒有打錯,真的是有 ' 沒錯 ,'是在~(毛毛蟲鍵)



























十三,執行程式


 ./WebCam 

十四、 錯誤排解

我在編譯時有發生以下錯誤


./WebCam: error while loading shared libraries: libopencv_gpu.so.2.4: cannot open shared object file: No such file or directory

參考網路上的解法

sudo ldconfig -v

dconfig命令的大概作用是讀取指定文件夾裡的所有庫文件,並根據庫文件中包含的庫文件名為其創建軟鏈接文件。

資料來源  dance_rise

十五、執行結果

dance_rise

dance_rise


十八、相關知識

pkg-config 命令是可以用來讀取安裝在 linux 系統上的 library 相關資訊。這個程式主要讀取系統中位於 /usr/lib/pkgconfig 目錄或是環境變數 PKG_CONFIG_PATH 所設定的路徑中的副檔名為 .pc 的檔案,
這些檔案包含系統安裝的 library 的相關資訊,包括:安裝的目錄、程式編譯的參數等等。

資料來源 黑手

我們在編譯程式碼中用的指令

g++ `pkg-config --cflags --libs opencv` WebCam.cpp -o WebCam

當中的  `pkg-config --cflags --libs opencv`  其實意思相當於下圖中的一串長長的















20150118補充,有時候可能會遇到


HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP
HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP

OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvShowImage, file /home/pi/opencv-2.4.10/modules/highgui/src/window.cpp, line 50

這時候建議確認 libgtk2.0-dev 以及 libgtk2.0是否有裝好,如果沒有安裝正確,安裝完重新

由(四 )開始 ,由於不是全部重新make ,所以速度會較前一次省很多。如果缺少的lib不

多,可能只要原本的1/10時間

沒有留言:

張貼留言