#目的
集合写真から各個人の顔写真を自動生成する
#環境
import cv2
import os
#使用方法
haarcascade_frontalface_alt2.xmlをpython3.X 下から探し出し、ソースを修正
入力フォルダphoto/に集合写真を配置
出力フォルダphoto_out/を作成
python detect_person.py を実行
#ソースコード
detect_person.py
#############################################################
#
# 下記 face_cascade_path を正面或いは横顔認識ライブラリを選択
#
#############################################################
# input: 集合写真を ./photo/ に入れる、複数枚可
# output: ./photo_out/に出力する
# 機能:集合写真から証明写真風に切り取る
# 実行: python detect_person.py
#############################################################
import cv2
import os
#入力:集合写真フォルダ
in_jpg = "./photo/"
#出力:生成した証明写真フォルダ
out_jpg = "./photo_out/"
face_cascade_path = 'C:/Users/?????/AppData/Local/Programs/Python/Python37\
/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml'
'''
face_cascade_path = 'C:/Users/?????/AppData/Local/Programs/Python/Python37\
/Lib/site-packages/cv2/data/haarcascade_profileface.xml' #横顔検出
'''
#リストで結果を返す関数
def get_file(dir_path):
filenames = os.listdir(dir_path)
return filenames
pic = get_file(in_jpg)
for i in pic:
# 画像の読み込み
image_gs = cv2.imread(in_jpg + i)
image_height, image_width, _ = image_gs.shape
# 顔認識用特徴量ファイルを読み込む --- (カスケードファイルのパスを指定)
cascade = cv2.CascadeClassifier(face_cascade_path)
# 顔認識の実行
face_list = cascade.detectMultiScale(image_gs,
scaleFactor=1.1,minNeighbors=1,minSize=(1,1))
# 顔だけ切り出して保存
no = 1
for rect in face_list:
x = rect[0]
y = rect[1]
width = rect[2]
height = rect[3]
hh = int(height/4)
hhh = (y-hh if y-hh > 0 else 0)
yh = (y + height + hh if y + height + hh < image_height else image_height-1)
ww = int(width/4)
xx = (x-ww if x-ww > 0 else 0)
xw = (x + width + ww if x + width + ww < image_width else image_width -1 )
dst = image_gs[hhh:yh, xx:xw]
save_path = out_jpg + '/' + 'out_(' + str(i) +')' + str(no) + '.jpg'
#認識結果の保存
a = cv2.imwrite(save_path, dst)
print(no)
no += 1