

Face++のdetectAPIを使ってフォルダ内の画像すべてに処理を行い、その結果を1つのcsvファイルに保存するプログラムを完成させたいです。

公式ドキュメントでは画像一枚だけに処理を行うコードが書かれているのですがそれを改変して書こうとしています。

機械学習用の画像データセットを作ろうと思い、  
①画像をスクレイピングにて一括取得。  
②取得した画像をカスケードファイルにて顔部分だけにリサイズ

まで行いました。

[code]

    # coding: utf-8
    import os
    import sys
    import csv
    import pandas as pd
    sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
    import requests
    from config import API_KEY, API_SECRET, DETECT_PATH ,ANALYZE_PATH
    from example.common import get_input_file_path
    
    return_landmark = 0
    return_attributes = None
    #calculate_all = 0
    face_rectangle = ''
    beauty_score_min = 0
    beauty_score_max = 100
    
    def call_api():
     data = {
         'api_key': API_KEY,
         'api_secret': API_SECRET,
         'return_landmark': 1,
         'return_attributes': 'gender,age,emotion'
         #'calculate_all': calculate_all,
         #'beauty_score_min': beauty_score_min,
         #'beauty_score_max': beauty_score_max
     }
    
     data_dir_path = u"E:/facepp-python-demo-master/facepp-python-demo-master/example/detect/images/images01/"
     file_list = os.listdir(r'E:/facepp-python-demo-master/facepp-python-demo-master/example/detect/images/images01')
    
    
    
    #この内部の処理がうまくいっていない
    ##################################################   
     if face_rectangle:
         data.update({'face_rectangle': face_rectangle})
         print(1)
         for f in file_list:
             root, ext = os.path.splitext(f)
             print(2)
             if ext == u'.png' or u'.jpeg' or u'.jpg':
                 abs_name = data_dir_path + '/' + f
                 image = cv.imread(abs_name)
                 print(3)
             #以下各画像に対する処理を記載する
                 files = {
                    'image_file': open(image, 'rb').read()
                 }
                 resp = requests.post(DETECT_PATH, data=data, files=files).json()
    
                 with open('emotion.csv','w') as csv_file:
                     writer = csv.writer(csv_file)
                     for key, value in resp.items():
                         writer.writerows(resp)
    
                 (pd.DataFrame.from_dict(data=resp,orient='index').to_csv('emotion_csv',header=False))
                 print(4)
                 osp = resp['faces']
                 df = pd.io.json.json_normalize(osp)
                 print(df)
                 df.to_csv('emotion2_csv')
     #input_file = get_input_file_path(os.path.abspath(os.path.dirname(__file__)), 'input')
             if not f:
                 print('请将input.png/input.jpg文件放在detect目录下')
                 return
    
     #(pd.DataFrame.from_dict(data=osp, orient='index').to_csv('emotion2_csv', header=False))
     #print(resp['faces'])
    ################################################
    
    
    
    
    
    
    
    if __name__ == "__main__":
     call_api()
    
[/code]

各箇所にプリント文を挟んでみたところ、どこがうまくいっていないのかは理解できたのですが、具体的にどうすればうまく処理が進むのかがわからず投稿させていただきました。


CC BY-SA 4.0
2021-03-16T14:39:15.760
74707
2021-03-16T14:46:45.207
2021-03-16T14:46:45.207
3060
40930
question
python 機械学習 画像
Face++APIの処理をフォルダ内の画像すべてに行えるようにしたい