kokku
@kokku

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Face++APIの処理をフォルダ内の画像すべてに行えるようにしたい

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

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

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

まで行いました。

# 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__)))))
sys.path.append('E:/facepp-python-demo-master/facepp-python-demo-master/example/detect/images/images01/')
import requests
from config import API_KEY, API_SECRET, DETECT_PATH ,ANALYZE_PATH
from example.common import get_input_file_path
from example.common2 import get_image_file_path
import cv2
import codecs

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')


#この内部の処理がうまくいっていない
 ##################################################   


    for f in file_list:
        print(file_list)
        #root, ext = os.path.splitext(f)
        #if ext in ('.png', '.jpeg', '.jpg'):
            #abs_name = data_dir_path +'/' + f
            #image = cv2.imread(abs_name)
            #以下各画像に対する処理を記載する
        if face_rectangle:
            data.update({'face_rectangle': face_rectangle})
        input_file = get_input_file_path(os.path.abspath(os.path.dirname(__file__)), f)
        #input_file = get_image_file_path("E:/facepp-python-demo-master/facepp-python-demo-master/example/detect/images/images01",f)
        files = {
            'image_file': open(f, '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))
    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 face_rectangle:
            #print('请将input.png/input.jpg文件放在detect目录下')
            #return
        #if not ext in ('.png', '.jpeg', '.jpg'):
            #print("終了")
    #(pd.DataFrame.from_dict(data=osp, orient='index').to_csv('emotion2_csv', header=False))
    #print(resp['faces'])

################################################


if __name__ == "__main__":
    call_api()


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

'E:/facepp-python-demo-master/facepp-python-demo-master/example/detect/images/images01
このプログラムはdetectフォルダにあるのですが処理を行いたい画像フォルダはimages/images01以下においてあるのです

Face++のdetectAPIを使ってディレクトリ内のすべての画像に感情推定の処理を行いその結果を一つのCSVファイルに保存させることが最終的な目標です。

0

3Answer

具体的に、何がうまく行っていませんか?
そして、どのような動作を期待していますか?

0Like

Comments

  1. @kokku

    Questioner

    Face++のdetectAPIを使ってディレクトリ内のすべての画像に感情推定の処理を行いその結果を一つのCSVファイルに保存させることが最終的な目標です。

Face++のdetectAPIを使ってディレクトリ内のすべての画像に感情推定の処理を行いその結果を一つのCSVファイルに保存させることが最終的な目標です。

ですが今のコードだと
Traceback (most recent call last):
File "detect2.py", line 79, in
call_api()
File "detect2.py", line 53, in call_api
'image_file': open(f, 'rb').read()
FileNotFoundError: [Errno 2] No such file or directory: 'images01img_0.jpg'

というエラーが出て画像ファイルが見つからないと出てしまいます。

0Like

f ではなく input_file を読む必要があるのではないでしょうか(これが正しいパスを示しているのかはわかりませんが)。

files = {
  'image_file': open(f, 'rb').read()
}

それと質問の際は次のリンクの内容を参考にされるとより回答を得やすくなると思います。

0Like

Your answer might help someone💌