はじめに
- OpenCVの特性をそこまで知らなくても実行できますが、OpenCVが正常に読み込めるかが鍵になってきます。
プログラム
face_detect.py
# -*- coding:utf-8 -*-
import cv2
import numpy as np
import os.path
from pathlib import Path
# 先ほど集めてきた画像データのあるディレクトリ
input_data_path = '{ディレクトリパス}'
# 切り抜いた画像の保存先ディレクトリ
save_path = '{ディレクトリパス}'
# 保存先ディレクトリを作成
Path(save_path).mkdir(parents=True, exist_ok=True)
# OpenCVのデフォルトの分類器のpath。(https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xmlのファイルを使う)
cascade_path = '/usr/local/Cellar/opencv3/3.2.0/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml'
faceCascade = cv2.CascadeClassifier(cascade_path)
# 収集した画像の枚数(任意で変更)
image_count = 1100
# 顔検知に成功した数(デフォルトで0を指定)
face_detect_count = 0
# 集めた画像データから顔が検知されたら、切り取り、保存する。
for i in range(image_count):
file_name = input_data_path + str(i) + ".jpg"
if os.path.isfile(file_name):
img = cv2.imread(file_name, cv2.IMREAD_COLOR)
assert img is not None, Path(file_name).absolute()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face = faceCascade.detectMultiScale(gray, 1.1, 3)
if len(face) > 0:
for rect in face:
# 顔認識部分を赤線で囲み保存(今はこの部分は必要ない)
# cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0,255), thickness=1)
# cv2.imwrite('detected.jpg', img)
x = rect[0]
y = rect[1]
w = rect[2]
h = rect[3]
cv2.imwrite(save_path + '{ファイル名}' + str(face_detect_count) + '.jpg', img[y:y+h, x:x+w])
face_detect_count = face_detect_count + 1
else:
print('image' + str(i) + ':No Face')
else:
print('image' + str(i) + ':No File')
実行
python face_detect.py
補足と言い訳
- haarcascade_frontalface_default.xmlはfindして探してください。
- 画像が上手く読めないファイルがあります。けっこうあります。
- 画像は読めても上手く顔を抽出できないファイルがあるので、手で消してください。
全ページリンク
- TensorFlowを使ってDir en greyの顔分類器を作ってみた - ①紹介編
- TensorFlowを使ってDir en greyの顔分類器を作ってみた - ②環境構築編
- TensorFlowを使ってDir en greyの顔分類器を作ってみた - ③画像収集編
- TensorFlowを使ってDir en greyの顔分類器を作ってみた - ④顔抽出編
- TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑤学習データ準備編
- TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑥学習プログラム編
- TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑦学習モデル編
- TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑧学習実行編
- TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑨データ可視化編
- TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑩顔分類試験編
- TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑪Web公開準備編
- TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑫Web公開編
- TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑬遊んでみる編(最終回)