PythonのOpenCVで顔を認識して、その部分だけ切り出す

開発環境は、Windows7 Professional(32bit) + Python 2.7.10.12+OpenCV 3.4.0。
機械学習(ディープラーニング)の顔認識の自前の訓練データを作る過程で必要なので書いておきます。顔認識は、たまに、顔以外のデータも誤って顔と検出してしまうので、できあがった画像データから、顔以外のデータは手動で除外しておいてください。今回は簡易的に作るために、画像1枚でプログラムを作っていきます。

# -*- coding: utf-8 -*-

import cv2

cascade_path = "haarcascade_frontalface_alt.xml"

# 切り出したい画像
image_path = "0.jpg"

# ファイル読み込み
image = cv2.imread(image_path)

# グレースケール変換
image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY)

# カスケード分類器の特徴量を取得する
cascade = cv2.CascadeClassifier(cascade_path)

facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))

print facerect

count = 0
if len(facerect) > 0:
    for rect in facerect:
	dst = image[rect[1]:rect[1]+rect[3], rect[0]:rect[0]+rect[2]]
        # ファイルを連番にして保存します
	filename = "file_" + str(count) + ".jpg"
        count = count + 1
	cv2.imwrite(filename,dst)