LoginSignup
6
4

More than 5 years have passed since last update.

TensorFlowを使ってDir en greyの顔分類器を作ってみた - ④顔抽出編

Last updated at Posted at 2017-05-31

はじめに

  • 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

補足と言い訳

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4