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)