Python プログラミング

【Python】OpenCVで顔認識を行うサンプルコード

この記事は約3分で読めます。

 

画像の読み込み

 

 

 

import os
import cv2
import matplotlib.pyplot as plt
import requests

img_url = 'https://s3-ap-northeast-1.amazonaws.com/ledge-ai-assets/media/wp-content/uploads/2020/11/24120727/115.png'

r = requests.get(img_url)
img_path = 'sample.jpg'
with open(img_path, 'wb') as saveFile: 
    saveFile.write(r.content)

img = cv2.imread(img_path)

 

<実行結果>

 

このようにすることでOpenCVで対象の画像データを扱えるようになります。

読み込んだ画像を確認した場合は以下のように記述します。

 

# 画像の表示
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

# OpenCV は色がGBR順なのでRGB順に並べ替える
plt.show()

 

顔を検出する

 

メイン処理である顔検出はcv2.CascadeClassifier関数で行っています。

 

# 分類器の読み込み
face_cascade_path = '/content/haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(face_cascade_path)

 

なお、この関数は「haarcascade_frontalface_default.xml」を使っています。
このファイルは、OpenCVで使用する検出器です。

 

公式検出器はGithubからダウンロードできます。
https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml

 

顔と思われる部分を判定する

 

facerect = face_cascade.detectMultiScale(img, scaleFactor=1.1, minNeighbors=2, minSize=(30, 30))
facerect

 

これで顔と思われる範囲の座標が戻り値として取得できました。

これがちゃんと顔の輪郭を捉えられているか、囲ってプロットしてみましょう。

 


color = (255, 255, 255) #白

# 検出した場合
if len(facerect) > 0:

    #検出した顔を囲む矩形の作成
    for rect in facerect:
        cv2.rectangle(img, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), color, thickness=2)

    #認識結果の保存
    cv2.imwrite('xxx.jpg', img)

 

<実行結果>

 

 

ちゃんと顔の部分が四角形で囲まれていれば認識成功です。

 

関連記事:【Python】Face RecognitionとOpenCVで人物の顔にモザイク処理を行う

 

コメント

タイトルとURLをコピーしました