はじめに
こんにちは!!
MYJLab Advent Calender 2023の19日目を担当させていただく3年生です。
初投稿なので、緊張していますが温かい目で見守ってください笑
昨日の投稿はうのさんのTouchDesignerについてでした。
先日Techプレゼンで発表してくれた内容で、プロジェクションマッピングとか好きな方は特に興味が持てる内容でしたね。
私もチームラボとか好きなのでデザイン系に手を出してみようかなと思いはじめてます笑
さて、今日は「初心者必見!!PythonのOpenCVを使って画像から顔の部分を特定しよう」ということで初心者にはハードルが高い機械学習の部分を"あるもの"で代用して誰でも簡単にできる手順を解説していきます。これを読み終わった後今回使った"あるもの"を自分で作ってみようと思ってもらえるよう頑張ります!
ではどうぞ!
目標
OpenCVの予め用意された"あるもの" = "カスケード型分類器"を使って、顔検出して顔部分に四角形を描画する
環境
今回はPythonを使います。
- Windows 11 Home
- Python 3.11.0
- opencv-python 4.7.0
準備
カスケード分類器の準備
以下のリンクから学習済みのカスケード分類器をダウンロードします。
https://github.com/opencv/opencv/tree/master/data/haarcascades
今回はhaarcascade_frontalface_default.xml(正面からの顔を検出する分類器)をダウンロードして使いましょう!
[ここ重要]
分類器haarcascade_frontalface_default.xmlと検出したい画像(sample.jpg)は、pythonファイルは同じディレクトリに保存します。
opencvをインストールする
pip install opencv-python
コード
#OpenCVライブラリのインポート
import cv2
#顔検出器の定義
face_cascade_path = './haarcascades/haarcascade_frontalface_default.xml'
#顔検出器の読み込み
face_cascade = cv2.CascadeClassifier(face_cascade_path)
#OpenCVで画像の読み込み + グレースケール化
src = cv2.imread('./sample.png')
src_gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
#OpenCVで顔検出をする
faces = face_cascade.detectMultiScale(src_gray)
if len(faces):
for x, y, w, h in faces:
cv2.rectangle(src, (x, y), (x + w, y + h), (255, 0, 0), 2)
else:
print('Nothing')
#顔検出した画像を保存する
cv2.imwrite('./Images/sample_face_cascade.png', src)
-
sample.png
おわりに
カスケード分類器を使った顔検出はいかがでしたか?
他にも目や横顔を検出するカスケード分類器があるので、興味のある方は試してみてください。
カスケード分類器は容易に使うことはできますが、精度が低いことが現状です。
精度を高めたい方は自分で機械学習することをおすすめします。
qiita初投稿だったのもあり、少々お疲れなので以上で失礼します。良いお年を~~~