Python3 OpenCV3でアニメ顔を顔判定する

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

アニメの顔を判定できるとのこと。
にゃんぱすー。

[amazonjs asin=”4839952965″ locale=”JP” title=”OpenCV 3 プログラミングブック”]

前提

ディレクトリ構成などはこことかこことかこことか。

 

使用画像

のんのんびよりの画像(nonnon.jpg)を拝借。
source/imageディレクトリに設置した。

 

アニメ顔の分類機(xmlファイル)をダウンロード

こちら から lbpcascade_animeface.xml をダウンロードし、haarcascades フォルダに入れておく。

 

アニメ顔を判定

sourceディレクトリにanime_face.pyを作成し顔判定した。

[python] # -*- coding: UTF-8 -*-

import cv2
import math
import numpy as np
import os

if __name__ == ‘__main__’:

# 顔判定で使うxmlファイルを指定する。
cascade_path = os.path.dirname(os.path.abspath(__file__)) + "/haarcascades/lbpcascade_animeface.xml"
cascade = cv2.CascadeClassifier(cascade_path)

# 画像の読み込み
img_src = cv2.imread("./image/nonnon.jpg", 1)

# 結果を保存するための変数を用意しておく。
img_result = img_src

# グレースケールに変換
img_gray = cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)

#顔判定
"""
minSize で顔判定する際の最小の四角の大きさを指定できる。a
(小さい値を指定し過ぎると顔っぽい小さなシミのような部分も判定されてしまう。)
"""
faces = cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1, minSize=(100, 100))

# 顔があった場合
if len(faces) > 0:

#顔認識の枠の色
color = (255, 0, 0)

# 複数の顔があった場合、1つずつ四角で囲っていく
for face in faces:

# faceには(四角の左上のx座標, 四角の左上のy座標, 四角の横の長さ, 四角の縦の長さ) が格納されている。

# 囲う四角の左上の座標
coordinates = tuple(face[0:2])
# (囲う四角の横の長さ, 囲う四角の縦の長さ)
length = tuple(face[0:2] + face[2:4])

# 四角で囲う処理
cv2.rectangle(img_result, coordinates, length, color, thickness=3)

# 表示
cv2.imshow("Show FACES Image", img_result)
cv2.waitKey(0)
cv2.destroyAllWindows()

[/python] [shell] (opencv_python)$ python anime_face.py
[/shell]

スクリーンショット 2015-07-28 20.21.49

にゃんぱすー

 

Related posts

コメントを残す