picameraで顔認識してみた


OpenCVを使って顔認識をしたい時にはUSBカメラを使って顔認識をしますが、Raspberry Piのカメラモジュールを使う場合にはUSBカメラを使う時の設定とはかなり違ったので、まとめていきます。

環境設定

今回はpython2.7で環境構築していきます。python3系を使いたい場合は別途設定をしておきます。(機会があれば設定方法を書きます…) 一番下の追記でpipを使ったOpen CVのセットアップ方法を紹介していますので、python3を使いたい場合はそちらを参考にしてみてください。
まずはOpenCVをインストールします。次のコマンドでインストールしていきます。

$ sudo apt-get install libopencv-dev
$ sudo apt-get install python-opencv

そして画像をOpenCVで処理出来るように、pycameraの拡張モジュールでpicamera.arrayをインストールします。

$ pip install "picamera[array]"

ソースコード

参考文献の本で紹介されていたカメラの画像を表示するプログラムに以前書いたこちらの記事の顔認識を合わせてこちらのコードを書きました。


# coding: utf-8
import picamera
import picamera.array
import cv2

cascade_file = "haarcascade_frontalface_default.xml"
with picamera.PiCamera() as camera:
    with picamera.array.PiRGBArray(camera) as stream:
        camera.resolution = (320, 240)
        while True:
            # stream.arrayにRGBの順で映像データを格納
            camera.capture(stream, 'bgr', use_video_port=True)

            # グレースケールに変換
            gray = cv2.cvtColor(stream.array, cv2.COLOR_BGR2GRAY)

            # カスケードファイルを利用して顔の位置を見つける
            cascade = cv2.CascadeClassifier(cascade_file)
            face_list = cascade.detectMultiScale(gray, minSize=(100, 100))

            for (x, y, w, h) in face_list:
                print("face_position:",x, y, w, h)
                color = (0, 0, 255)
                pen_w = 5
                cv2.rectangle(stream.array, (x, y), (x+w, y+h), color, thickness = pen_w)
            # system.arrayをウィンドウに表示
            cv2.imshow('frame', stream.array)

            # "q"でウィンドウを閉じる
            if cv2.waitKey(1) & 0xFF == ord("q"):
                break

            # streamをリセット
            stream.seek(0)
            stream.truncate()
        cv2.destroyAllWindows()

顔認識するカスケードファイルはこちらからダウンロードします。
以下のような実行結果になります。フレーム内で顔を認識したら赤い四角で囲まれるようになります。そしてコンソールには顔の位置と高さと幅を表示させています。

このコード中の「stream.array」でカメラモジュールからフレームを取り込んでOpenCVで処理を行います。このコードをアレンジすれば物体認識などのプログラムを作成することも出来るはずです。

追記:pipを使ってOpen CVをセットアップする(python3のみ)

python3でopencvを使うときはpipをつかってかんたんにセットアップできるそうです。
こちらを参考にOpenCVを手動でインストールする時に必要な関連プログラムをインストールします。

 sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

OpenCVをインストールします。

sudo pip3 install opencv-python
sudo pip3 install opencv-contrib-python

OpenCVを動かすために必要なプログラムをインストールします。

sudo apt-get install libcblas-dev libatlas3-base libilmbase12 libopenexr22 libgstreamer1.0-0 libqtgui4 libqttest4-perl

参考文献

実例で学ぶRaspberry Pi電子工作 作りながら応用力を身につける