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

はてなブックマーク - raspberry pi opencv ビデオで顔認識(コンパイルなし!)
LINEで送る
Pocket

皆さん、お久しぶりです。今日はコンパイルなしの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(少し古いですが)

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

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

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

では、また!

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

 

はてなブックマーク - raspberry pi opencv ビデオで顔認識(コンパイルなし!)
LINEで送る
Pocket

Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close