AI入門 - Python簡易顔検出アプリ作ってみた
こんにちは。
ALH横浜事業所のRYUSEIです。
Pythonを使って顔検出アプリを作ってみたので共有します!
概要
いつもお世話になっているCleverProgrammerさんが Python のまとめ動画をUPしました。
そのなかにOpenCVがあったので学習ついでに本記事をつくりました。
Python・AI初学者なので抜けているところありましたら教えてくだちい。
かんたん 3 ステップ!
Step 1 - 大量の顔写真を用意する
学習させるための画像を大量に用意する。
Step 2 - 白黒にする
形で認識してもらいたいので、色は不要。
Step 3 - アルゴリズムに顔を認識させる訓練をする
様々なパターンを読み込ませ、訓練させる。
いざ、実装!(※OpenCVを使います)
① 事前準備
pip install opencv-python
# mac の場合
# 基本的には上記コマンドのみOKだが、 ImportError: No Module named cv2 とエラーが出力された場合は下記コマンドを実行(※めちゃ時間かかります・・)
brew install opencv
※pipのバージョンが不足しているとエラーが表示された場合はpip install --upgrade pipを実行してから上記コマンドを実行すること。
②python が実行できるか確認
Face_Detector.py
print("Code Completed!")
※下記コマンドはFace_Detector.pyの直上ディレクトリで実行すること。
python Face_Detector.py
# Code Completed! の出力を確認できたら成功!
③OpenCV が提供している大量の顔写真(XML)をダウンロードする
①『Github - opencv/haarscascade_frontalface_default.xml』をダウンロードして任意のディレクトリに配置する。
④プログラムを書く。
Face_Detector.py
import cv2
# opencv から取得した、あらかじめ訓練された正面の顔写真を検出するためのデータを読み込む
trained_face_data = cv2.CascadeClassifier('path/to/your/haarscascade_frontalface_default.xml')
# 顔を検出する画像を選択する
img = cv2.imread('path/to/your/image')
# 白黒に変換する(convertColorの略)
grayscaled_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 顔を検出する
face_grids = trained_face_data.detectMultiScale(grayscaled_img)
# 出力してみる(四角の座標が出力される)
# print(face_grids)
# 検出した顔に四角を描画する(1枚の写真に複数の顔がある場合も対応可)
# cv2.rectangle(img, 左上座標, 右下座標, 線の色(BGR), 線の太さ)
for (x, y, w, h) in face_grids:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 第1引数 : ウィンドウ名、第2引数 : 表示したい画像
cv2.imshow('Window Name', img)
# 画像表示後、ウィンドウが消えないようにする(キー入力を待つ)
cv2.waitKey()
# ウィンドウを閉じた後に出力
print("Done!")
⑤実行する
python Face_Detector.py
-- 完 --
おまけ
ウェブカメラに顔検出アプリを適用しちゃおう
Webcam_Face_Detector.py
import cv2
trained_face_data = cv2.CascadeClassifier('path/to/haarcascade_frontalface_default.xml')
# 引数0 = デフォルト
webcam = cv2.VideoCapture(0)
while True:
succesful_frame_read, frame = webcam.read()
grayscaled_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
face_grids = trained_face_data.detectMultiScale(grayscaled_img)
for (x, y, w, h) in face_grids:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('Window Name', frame)
cv2.waitKey(1)
ALHについて知る
↓ ↓ ↓ 採用サイトはこちら ↓ ↓ ↓
↓ ↓ ↓ コーポレートサイトはこちら ↓ ↓ ↓
↓ ↓ ↓ もっとALHについて知りたい? ↓ ↓ ↓