皆さん、お久しぶりです。今日はコンパイルなしのOpenCVを使ってビデオで顔認識の簡単に実現する方法をご紹介します。
実はこのテーマで、前も記事を書いていました。
その時、前提となっているのは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も!
RaspberryPiのOSのご用意(Raspbian)
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」に設定しておきましょう。
カメラの動作確認
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を有効にする必要です。)
あるいは、簡単に
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さんです。
気軽に使えるChromeのVNC拡張がなくなりましたね!便利だったのに!
今は、MacOSからデフォルトのリモート接続機能があって、使えますが、RaspberryPiにtightvncserverをインストールしなければなりません、幸いなことに、インストールも簡単で、すぐ使えるようになります。— 川島@ソフトウェア、Web、アプリ、IoT作るのが大好き (@kokensha_tech) 2018年9月19日
まとめ
少し感動ですね。(感動しやすい!)
前は、それなりに、複雑なコンパイル手順で、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)をコンパイルして使いたい方はこちらの記事をどうぞ!