アプリケーションのスケルトンを説明します。merge_face.py、box_upload.pyアプリケーションについて、部位ごとに掲載していきます。各API等の仕様については、リンクしていきますので、そちらをご参照ください。
Develop編③
merge_face.py
import requests
# パラメータは、templateとmergeのイメージファイルと顔座標、api_key,api_secret key
def merge_face(template,template_rectangle,merge,merge_rectangle,api_key,api_secret):
# requestのURL
url = "https://api-us.faceplusplus.com/imagepp/v1/mergeface"
# requestのパラメータ
, 'api_secret': api_secret
,'template_base64': template
,'template_rectangle': template_rectangle
,'merge_base64': merge
,'merge_rectangle' : merge_rectangle
,'merge_rate':[80,20]
}
try:
# レスポンスは、JSON形式。
# 合成イメージは、facesパラメータにリスト形式で格納される。
r = requests.post(url, data=payload)
r = r.json()
return r["result"]
except:
print(r["error_message"])
print("サーバーの接続に失敗したか画像を正しく認識できませんでした。")
that is it
box_upload.py
from boxsdk import JWTAuth
from boxsdk import Client
from boxsdk.exception import BoxAPIException
# boxストレージにファイルをアップロード
def box_upload(file_name,fileobj,box_folder_id,box_client_id,box_client_secret,box_enterprise_id,box_jwt_key_id,box_rsa_private_key_filepath,box_rsa_private_key_passphrase):
# Configure JWT auth object
# Get auth client
sdk = JWTAuth(
client_id=box_client_id,
client_secret=box_client_secret,
enterprise_id=box_enterprise_id,
jwt_key_id=box_jwt_key_id,
rsa_private_key_file_sys_path=box_rsa_private_key_filepath,
rsa_private_key_passphrase=box_rsa_private_key_passphrase
)
try:
# Boxインスタンス作成
client = Client(sdk)
# Boxストレージのフォルダを指定
folder = client.folder(folder_id=box_folder_id)
# TempFileに、画像を書き込む
import tempfile
fp = tempfile.NamedTemporaryFile(mode='w+b',delete=True)
with open(fp.name , 'w+b') as f:
f.write(fileobj)
# TempFileのファイルパスをアップロードに指定する。ローカルじゃないとだめみたい
box_file = folder.upload(fp.name, file_name)
fp.close()
# 共有リンクURLを取得する。
return box_file.get_shared_link()
except BoxAPIException as e:
print("box_upload:" + e.message)
except Exception as e:
print("box_upload:サーバーの接続に失敗したか、画像を正しく処理できませんでした。")
return ""
# boxストレージの共有ファイルを削除
def box_remove(box_folder_id,box_client_id,box_client_secret,box_enterprise_id,box_jwt_key_id,box_rsa_private_key_filepath,box_rsa_private_key_passphrase):
# Configure JWT auth object
# Get auth client
sdk = JWTAuth(
client_id=box_client_id,
client_secret=box_client_secret,
enterprise_id=box_enterprise_id,
jwt_key_id=box_jwt_key_id,
rsa_private_key_file_sys_path=box_rsa_private_key_filepath,
rsa_private_key_passphrase=box_rsa_private_key_passphrase
)
try:
# Boxインスタンス作成
client = Client(sdk)
# Boxストレージのフォルダを指定
folder = client.folder(folder_id=box_folder_id)
# フォルダ上のファイルオブジェクトを取得
items = folder.get_items()
# 一件ずつ取得して全部を削除。個別削除をするにはファイルidを識別する必要がある。
for item in items:
item.delete()
except Exception as e:
print("box_upload:サーバーの接続に失敗したか、画像を正しく処理できませんでした。")
return ""