サイトアイコン KOKENSHAの技術ブログ

raspberry pi opencv ビデオで顔認識(コンパイルなし!)

皆さん、お久しぶりです。今日はコンパイルなしのOpenCVを使ってビデオで顔認識の簡単に実現する方法をご紹介します。

実はこのテーマで、前も記事を書いていました。

raspberry pi opencv ビデオで顔認識

その時、前提となっているのはopenCVの最新版で、コンパイルすることが必須でした。

RaspberryPiで顔認識OpenCVで(コンパイルの方法も!)

目次

背景

こちらの記事をお読みになっていただいた方でしたら、ご存知かと思いますが

OpenCVのバージョン3.4.xとPythonのバーション3.xで動作する環境となります。

そのため、最新のOpenCVのソースコードをダウンロードして、RaspberryPiでコンパイルすることが必要でした。

私が今現在、分かっている中で、最新版のOpenCVを使うためにはこの手段しかないと思われます。

しかし、コンパイルの敷居が若干高くて、初心者や、ちょっとOpenCVを動かして、動作だけ見てみたい方にとってはややハードルの高い準備プロセスでした。

前回の記事にも複数の方から、連絡や問い合わせが来ておりまして、うまく行かなかったりするところがあったようです。それぞれの環境の違いもあったりして、原因は一概に「これだ」というのが難しいかと思います。

私自身も、ずっともっと簡単にRaspberryPiでOpenCV+Pythonで顔認識ぐらい実現する方法がないかと調べていました。

その中、Ubuntuのでコンパイル済みのOpenCVパッケージが存在することを知り

https://packages.ubuntu.com/ja/source/trusty/opencv

これがあれば、apt-get installでOpenCVのパッケージの導入ができます。

ご注意

本記事はコンパイル済のOpenCVパッケージをインストールして利用するため

OpenCVのバージョンが最新版ではありません。(私の場合はOpenCVは2.4.9.1でした)最新版をご利用したい方は、上の記事に参照して最新版のソースコードをコンパイルしてご利用ください。

また、この記事に使っているPythonのバージョンは2.x(私の場合は、2.7.13でした)です。ご留意ください。

全ての操作等は必ずご自身の確認の上、ご自身の責任で行ってください。

apt-getでRaspberryPiにOpenCVをインストール!

RaspberryPiもDebian系なので、同じように

apt-get installでRaspberryPiにOpenCVを導入できれば、コンパイルなしで比較的に簡単にOpenCVを試すことができるのではと思いました!

いざインストール

まず前提として

RaspberryPiのご用意

RaspberryPi3がオススメです、RaspberryPi zero wも!

raspberry pi zero w 秋葉原で購入!

RaspberryPiのOSのご用意(Raspbian)

Raspberry Pi OSインストール

pythonのpipのご用意

wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
sudo python3 get-pip.py

OpenCVパッケージのインストール

インストールするコマンドがとても簡単です!

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

picameraのインストール

sudo pip install "picamera[array]"

カメラモジュールの使用を許可する

これも前の記事に参照して

sudo raspi-configコマンドを実行して、カメラモジュールを「enabled」に設定しておきましょう。

RaspberryPiで顔認識OpenCVで(コンパイルの方法も!)

カメラの動作確認

raspistill -o output.jpg

問題なく、output.jpgファイルが保存されていれば、カメラが正常に動作することが確認できます。

OpenCVを使ってプログラムを実行してみましょう!

まずOpenCVが問題なくインストールされているかのチェック

python
>>>import cv2 as cv
print cv.__version__

例のレナちゃんのやつ

lena.jpgファイルをpythonファイルと同じ配下に置いてください。

(lena.jpgファイルは、ここから取得することができます。https://github.com/opencv/opencv/tree/master/samples/data)

もちろん、他の写真ファイルでもいいはずです。写真がなければ、このステップをスキップしても大丈夫です。

import cv2

img = cv2.imread('lena.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite('lena_gray.jpg', img_gray)

リモートでファイルをRaspberryPiにコピーする方法はこちらをご参照ください。(RaspberryPi側SSHを有効にする必要です。)

SCPで別マシンのファイルをコピー

あるいは、簡単に

wget [file_url]

上記のコマンドで、urlを渡せば、ファイルをダウンロードしてくれます。

次は、顔認識のプログラム

これも、前の記事と同じプログラムを使います。

念のため、ここにも再掲します。

注意:ここ一行に変更があります!

変更前:cascPath = ‘/usr/local/share/OpenCV/lbpcascades/lbpcascade_frontalface.xml’  <–コンパイルすると、ここに配置してくれるようです。

変更後:cascPath = ‘lbpcascade_frontalface.xml’  <–ファイルをダウンロードして、pythonファイルと同じディレクトリに置いてください。

上記ファイルは、ここからダウンロードしてください。

https://github.com/opencv/opencv/blob/master/data/lbpcascades/lbpcascade_frontalface.xml

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from picamera.array import PiRGBArray
from picamera import PiCamera
import cv2, time

# フレームサイズ
FRAME_W = 320
FRAME_H = 192

# 正面の顔検出用
cascPath = '/usr/local/share/OpenCV/lbpcascades/lbpcascade_frontalface.xml'
faceCascade = cv2.CascadeClassifier(cascPath)

camera = PiCamera()
camera.resolution = (FRAME_W, FRAME_H)
camera.framerate = 32
rawCapture = PiRGBArray(camera, size=(FRAME_W, FRAME_H))
time.sleep(0.1)

for image in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):

    frame = image.array
    # frame = cv2.flip(frame, -1) # 上下反転する場合

    # Convert to greyscale for detection
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    gray = cv2.equalizeHist( gray )

    # 顔検出
    faces = faceCascade.detectMultiScale(gray, 1.1, 3, 0, (10, 10))

    # 検出した顔に枠を書く
    for (x, y, w, h) in faces:
        # 見つかった顔を矩形で囲む
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

    frame = cv2.resize(frame, (540,300))

    # ビデオに表示 
    cv2.imshow('Video', frame)
    key = cv2.waitKey(1) & 0xFF

    rawCapture.truncate(0)

    if key == ord("q"):
        break

cv2.destroyAllWindows()

私の方では、こんな感じの画面で、できました!

ちなみに、これはForbesの2015年1月特別号のカバー

Yahooの Jerry Yangさんです。

まとめ

少し感動ですね。(感動しやすい!)

前は、それなりに、複雑なコンパイル手順で、pythonのバージョンの切り替えのためにvirtualenvの設定などもなくて

Python2.xですが、OpenCVの2.x(少し古いですが)

同じように、ビデオから、人物の顔の検出ができました!

基礎の勉強であれば、こっちの方の環境構築がずっと簡単でシンプルでした。

皆さんもこちらでお試しいただければいかがでしょうか?

では、また!

[amazonjs asin=”4822292274″ locale=”JP” title=”独学プログラマー Python言語の基本から仕事のやり方まで”]

[amazonjs asin=”4873118379″ locale=”JP” title=”詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識”]

Raspberry Piで最新版のopenCV(3.4.4)をコンパイルして使いたい方はこちらの記事をどうぞ!

 

モバイルバージョンを終了