0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

集合写真から証明写真風に切り取る

Last updated at Posted at 2018-12-17

#目的
集合写真から各個人の顔写真を自動生成する

#環境
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
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?