アニメ画像の顔検出+顔抽出|Python+OpenCV

アニメ画像の顔検出と顔抽出をしていきます。

用意するもの

下のサイトを参考にしてください。

今回使用するカスケードは、このサイトで紹介されているものです。

プログラム

以前、公開した人の顔検出と同じです。

カスケードをアニメ画像用に変えただけです。

#検出・抽出したい画像をimread内に記述

origin_img = cv2.imread(“画像ファイル”)

import urllib.request as req
import cv2
import matplotlib.pyplot as plt

#検出・抽出したい画像をimread内に記述

origin_img = cv2.imread("train/Jeanne/IMG_0419.JPG")
img = origin_img.copy()

plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()

# カスケードファイルを指定して、検出器を作成
cascade_file = "lbpcascade_animeface.xml"
cascade = cv2.CascadeClassifier(cascade_file)
img_face = img

# 画像の読み込んでグレースケール
img_gray = cv2.cvtColor(img_face, cv2.COLOR_RGB2GRAY)
# 顔認識
face_list = cascade.detectMultiScale(img_gray, minSize=(150, 150))
# 結果
if len(face_list) == 0:
    print("失敗")
    quit()

for (x, y, w, h) in face_list:
    print("顔の座標 = ", x, y, w, h)
    red = (0, 0, 255)
    cv2.rectangle(img_face, (x, y), (x + w, y + h), red, thickness=20)

# 出力
plt.imshow(cv2.cvtColor(img_face, cv2.COLOR_BGR2RGB))
plt.show()

cv2.imwrite("out.jpg", img)

#切り取り
img_face_ex = origin_img[y:y+h, x:x+w]
plt.imshow(cv2.cvtColor(img_face_ex, cv2.COLOR_BGR2RGB))
plt.show()

#保存
cv2.imwrite("out_face.jpg", img_face_ex)

実行結果

実行結果では、入力画像と出力画像を示す。

入力画像

出力画像

参考書