Raspberry Pi講座 Python3 + OpenCV3(環境構築編)

今回はRaspberry PiにOpen CV3をインストールし、Python3から使用できるようにします。

動作確認環境
  • Raspberry Pi 3 Model B
  • Python 3.4.2
  • Open CV 3.1.0

環境構築(Open CV3のダウンロード+コンパイル+インストール) ※時間がかるので時間があるときに行ってください。
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get install build-essential cmake pkg-config  
$ 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  
$ sudo apt-get install libatlas-base-dev gfortran  
$ cd ~  
$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip  
$ unzip opencv.zip  
$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip  
$ unzip opencv_contrib.zip  
$ cd ~/opencv-3.1.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.1.0/modules -D BUILD_EXAMPLES=ON ..  
$ make -j4  
※ここで、90分くらいかかる  
$ sudo make install  
$ sudo ldconfig

参考情報:Raspberry Pi 3にOpenCV 3.1のインストール

インストールされているpythonとOpenCVのバージョン確認
$ python3
>>> import cv2
>>> cv2.__version__

※Raspberry PiにはPython2.*とPython3.*がインストールされています。Python 2.*を使用する場合は$ python、 Python 3.*を使用する場合は$ python3コマンドを使用します。尚、上記の方法でOpen CV 3.1.0をインストールするとPython 2.*とPython 3.*の両方から使用可能ですが、このサイトではpython 3.*を使うことにしました。

PythonとOpenCVのバージョン2と3
PythonとOpenCVは2と3問題(私が勝手にそう呼んでいる)があり、初心者レベルの人が扱うようなサンプルコードでもバージョン違いで動かいことがあります。インターネットなどで見つけたサンプルコードが動かない場合、そのコードがPython 2.*用なのかPython3.*用なのかを確認しましょう。同様にOpenCVで同じ問題がありサンプルコードがOpen CV2.*用またはOpenCV3.*用なのかを確認する必要があります。因みにpythonでopen cvのモジュールをインポートするときのcv2はOpenCV2.*を表していないのでOpenCV3.*でもモジュールをインポートするときはcv2です。



サンプルプログラム(顔検出)
このページの最後に添付されているサンプルプログラム(01_FaceDetection.py)及びカスケード識別器(haarcascade_frontalface_alt.xml)を同じフォルダに保存し実行する。
コマンドは『$python3 
01_FaceDetection.py

# -*- coding: utf-8 -*-

import cv2  #オープンCVのモジュールをインポートする

#メイン関数
if __name__ == '__main__':
    try:
        #カスケード識別器のパス
        cascade_path = "haarcascade_frontalface_alt.xml"

        #カスケード分類器の特徴量を取得する
        cascade = cv2.CascadeClassifier(cascade_path)

        #ビデオキャプチャーを取得する:0はデバイス番号
        capture = cv2.VideoCapture(0)

        #ビデオキャプチャーを開けていない場合は例外を
        if capture.isOpened() is False:
            raise IOError("VideoCapture could not open.")

        #メインループ
        while True:
            # ビデオキャプチャからフレームを取得
            ret, image = capture.read()

            if ret == False:
                continue

            #カスケード識別器にて物体検出(顔を含む矩形を取得する)
facerect = cascade.detectMultiScale(image, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10)) #検出した矩形を描写する color = (255, 255, 255) #白色 for rect in facerect: cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2] + rect[2:4]), color, thickness=2) #ウィンドウに表示する cv2.imshow("FaceDetection", image) #wait[ms] cv2.waitKey(10) except KeyboardInterrupt : #Ctl+Cが押されたらループを終了 print("\nCtl+C") except Exception as e: #その他の例外が発生した場合は、 print(str(e)) #例外処理の内容をコンソールに表示 finally: capture.release() #Videoキャプチャをリリースする cv2.destroyAllWindows() #すべてのOpenCVウィンドウをクローズする for i in range (1,5): cv2.waitKey(10) #少し待たないとウィンドウがクローズされない print("\nexit program") #プログラムが終了することを表示する
参考情報:OpenCVを使った顔認識(Haar-like特徴分類器)


その他のOpenCVの機能についてはこちらにまとめています。

ċ
01_FaceDetection.py
(2k)
1000gou,
2017/08/17 2:44
ċ
haarcascade_frontalface_alt.xml
(898k)
1000gou,
2017/08/17 2:44
Comments