見出し画像

AI入門 - Python簡易顔検出アプリ作ってみた

こんにちは。
ALH横浜事業所のRYUSEIです。

Pythonを使って顔検出アプリを作ってみたので共有します!


概要

いつもお世話になっているCleverProgrammerさんが Python のまとめ動画をUPしました。
そのなかにOpenCVがあったので学習ついでに本記事をつくりました。
Python・AI初学者なので抜けているところありましたら教えてくだちい。

※Python は『Python のダウンロードとインストール』の手順にしたがってインストールしてください。
※Mac の場合は『Python の開発環境を用意しよう!(Mac)』をご参照ください。

かんたん 3 ステップ!

Step 1 - 大量の顔写真を用意する
学習させるための画像を大量に用意する。
Step 2 - 白黒にする
形で認識してもらいたいので、色は不要。
Step 3 - アルゴリズムに顔を認識させる訓練をする
様々なパターンを読み込ませ、訓練させる。

いざ、実装!(※OpenCVを使います)

① 事前準備

pip install opencv-python

# mac の場合
# 基本的には上記コマンドのみOKだが、 ImportError: No Module named cv2 とエラーが出力された場合は下記コマンドを実行(※めちゃ時間かかります・・)
brew install opencv

参考 : 『画像処理をマスターしよう!Python で OpenCV を使う方法を紹介!
公式 : 『OpenCV Documentation

※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について知りたい? ↓ ↓ ↓