python-googlehome-player
https://github.com/mtatsuma/python-googlehome-player.git
を参考しながら進める。
https://github.com/mtatsuma/python-googlehome-player.git
を参考しながら進める。
ついに、webcamから人物認識の段階に来ました。
まず結果を見てください。
face_recognitionのリポジトリ(https://github.com/ageitgey/face_recognition/)から、examples/facerec_from_webcam.pyファイルも同じ画像フォルダに入れてください。
知っている人の写真ファイル名を次のように追加してください。
(とりあえず手作業で追加、後ほどフォルダ内すべての写真を自動追加するようにプログラミングする)
最後に、このプリグラムを起動するだけです。
$ python facerec_from_webcam.py
フォルダ内すべての写真を自動追加するようにプログラミングする
Raspberry Piで動く
cmakeを用意する。
chen@Hong-Mac-mini Python % brew install cmake
face_recognitionをインストールすると、2つのシンプルなコマンドラインがついてきます。
実際はexamplesからコピーする。
chen@Hong-MacBook-Air-2017 ~ % face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/
./unknown_pictures/two_people.jpg,biden
./unknown_pictures/two_people.jpg,obama
chen@Hong-MacBook-Air-2017 ~ %
検出した領域にモザイクをかけたりすることもできる。
Viでサンプルコードを作成
$ vi test3.py
import cv2 face_cascade_path = '/usr/local/opt/opencv/share/' 'OpenCV/haarcascades/haarcascade_frontalface_default.xml' eye_cascade_path = '/usr/local/opt/opencv/share/' 'OpenCV/haarcascades/haarcascade_eye.xml' face_cascade = cv2.CascadeClassifier(face_cascade_path) eye_cascade = cv2.CascadeClassifier(eye_cascade_path) src = cv2.imread('data/src/lena_square.png') src_gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(src_gray) ratio = 0.05 for x, y, w, h in faces: cv2.rectangle(src, (x, y), (x + w, y + h), (255, 0, 0), 2) face = src[y: y + h, x: x + w] face_gray = src_gray[y: y + h, x: x + w] eyes = eye_cascade.detectMultiScale(face_gray) for (ex, ey, ew, eh) in eyes: # cv2.rectangle(face, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2) eye = face[ey: ey + eh, ex: ex + ew] small = cv2.resize(eye, None, fx=ratio, fy=ratio, interpolation=cv2.INTER_NEAREST) face[ey: ey + eh, ex: ex + ew] = cv2.resize(small, (ew, eh), interpolation=cv2.INTER_NEAREST) cv2.imwrite('data/dst/opencv_eye_detect_mosaic.jpg', src)
処理結果
$ python2 test3.py
[ INFO:0] Initialize OpenCL runtime…
$ ls -al data/dst/
total 512
drwxr-xr-x 4 chen staff 128 6 25 01:45 .
drwxr-xr-x 5 chen staff 160 6 20 00:50 ..
-rw-r–r–@ 1 chen staff 108333 6 25 01:51 opencv_eye_detect_mosaic.jpg
-rw-r–r–@ 1 chen staff 110477 6 25 01:07 opencv_face_detect_rectangle.jpg
ファイル data/dst/opencv_eye_detect_mosaic.jpg が作成されたことが確認した。
chen@Hong-Mac-mini Python % brew install opencv
Updating Homebrew…
沢山のメッセージが流れ、終わったらしい。
インストールしたものを確認。
最近知ったのですが、モジュールのインストールの確認だけであれば、わざわざインタラクティブシェルを起動しなくても、以下のようなコマンドで問題無いようです。
chen@Hong-Mac-mini ~ % python -c 'import cv2'
chen@Hong-Mac-mini ~ %
次のコードで、現在Phthonと顔認識パッケージのバージョンの確認できる
myenv.py
import sys import cv2 import numpy print("sys.path:\n" + "\n".join(sys.path)) print("OpenCV: " + cv2.__version__) print("NumPy: " + numpy.__version__)
chen@Hong-Mac-mini Python % vi myenv.py
chen@Hong-Mac-mini Python % python myenv.py
sys.path:
/Users/chen/Documents/Python
/usr/local/lib/python3.8/site-packages/cv2/python-3.8
/usr/local/Cellar/python@3.8/3.8.3_1/Frameworks/Python.framework/Versions/3.8/lib/python38.zip
/usr/local/Cellar/python@3.8/3.8.3_1/Frameworks/Python.framework/Versions/3.8/lib/python3.8
/usr/local/Cellar/python@3.8/3.8.3_1/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload
/usr/local/lib/python3.8/site-packages
/usr/local/Cellar/protobuf/3.12.3/libexec/lib/python3.8/site-packages
OpenCV: 4.3.0
NumPy: 1.19.0
chen@Hong-Mac-mini Python %
% mkdir img
OpenCVでは、顔・目などを検出できるカスケード識別器の学習済みファイルhaarcascadesを事前に用意されています。
git clone
しましょう。
Python, OpenCVで顔検出と瞳検出(顔認識、瞳認識)
静止画: 画像ファイルを読み込んで顔検出と瞳検出
Macにhomebrewでopencv3をインストールした場合、
/usr/local/opt/opencv/share/OpenCV/haarcascades/
に学習済のHaar-like特徴を用いた分類器のデータ(xmlファイル)がある。
以下のようにいくつかの種類のデータが用意されている。
cv2.CascadeClassifier()でパスを指定してxmlファイルを読み込む。
上の写真をダウンロードして保存し、必要なフォルダを作成して、写真を移動してください。
$ mkdir data
$ mkdir data/src
$ mkdir data/dst
$ cp ~/Downloads/Lenna_test_image.png data/src/lena_square.png
そしてViでサンプルコードを作成
$ vi test2.py
サンプルコード(test2.py)
import cv2 face_cascade_path = '/usr/local/opt/opencv/share/' 'OpenCV/haarcascades/haarcascade_frontalface_default.xml' eye_cascade_path = '/usr/local/opt/opencv/share/' 'OpenCV/haarcascades/haarcascade_eye.xml' face_cascade = cv2.CascadeClassifier(face_cascade_path) eye_cascade = cv2.CascadeClassifier(eye_cascade_path) src = cv2.imread('data/src/lena_square.png') src_gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(src_gray) for x, y, w, h in faces: cv2.rectangle(src, (x, y), (x + w, y + h), (255, 0, 0), 2) face = src[y: y + h, x: x + w] face_gray = src_gray[y: y + h, x: x + w] eyes = eye_cascade.detectMultiScale(face_gray) for (ex, ey, ew, eh) in eyes: cv2.rectangle(face, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2) cv2.imwrite('data/dst/opencv_face_detect_rectangle.jpg', src)
処理結果
$ python2 test2.py
[ INFO:0] Initialize OpenCL runtime…
$ ls -al data/dst/
total 256
drwxr-xr-x 3 chen staff 96 6 20 00:48 .
drwxr-xr-x 5 chen staff 160 6 20 00:50 ..
-rw-r–r–@ 1 chen staff 110477 6 25 01:07 opencv_face_detect_rectangle.jpg
ファイル data/dst/opencv_face_detect_rectangle.jpg が作成されたことが確認した。
おなじみのlenaさんの画像を使う
PythonのOpenCVで画像ファイルを読み込みはcv2.imread
を使う。
実行するコードと画像が別の場所にあるとして、
一度image_path
に画像のディレクトリのパスを指定します。
ここでは、”/Users/chen/Downloads/”とする。
動作確認環境は以下の通り
– Python 3.6
– OpenCV 3.2
何はともあれ画像出力
import cv2
#画像読み取り
image_path = "lenaさんの画像を格納してるディレクトリのパス" #例えば "/Users/chen/Downloads/"
image = cv2.imread(image_path+"lena.jpg") #画像読み取り imread(filename)
#画像表示
cv2.imshow("image",image) #画像出力 imshow(window_name, matrix)
cv2.waitKey() #キー入力待ち waitKey(delay=0)
cv2.destroyAllWindows() #ウィンドウを消す destroyAllWindows()
無事表示ができました。
問題は、キーを押してもプログラムは終了されない、そのプロセスを殺して、やっと終了できた。
参考:
もしHomebrew導入されてない場合は、下記のコマンドで導入
/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
ChenLab-Mac-Urania:~ chen$ brew -v
Homebrew 1.5.10
ChenLab-Mac-Urania:~ chen$ python -V
Python 2.7.10
続いて、opencvの導入
ChenLab-Mac-Urania:~ chen$ brew install opencv
Updating Homebrew…
沢山のメッセージが流れ、終わったらしい。
インストールしたものを確認。
ChenLab-Mac-Urania:~ chen$ which python3
/usr/local/bin/python3
ChenLab-Mac-Urania:~ chen$ which python2
/usr/local/bin/python2
ChenLab-Mac-Urania:~ chen$ python3 -V
Python 3.6.5
ChenLab-Mac-Urania:~ chen$ python2 -V
Python 2.7.15
ChenLab-Mac-Urania:~ chen$
これて環境準備OK.