matsuap's picture
Upload app.py
6ca388e verified
import requests
from PIL import Image
import base64
import gradio as gr
def analyze_images(image1, image2, api_key, org_id):
url = f"https://platform.bodygram.com/api/orgs/{org_id}/scans"
headers = {
"Authorization": api_key,
}
with open(image1, "rb") as img1_file:
image1_b64 = base64.b64encode(img1_file.read()).decode('utf-8')
with open(image2, "rb") as img2_file:
image2_b64 = base64.b64encode(img2_file.read()).decode('utf-8')
data = {
"customScanId": "myFirstScan",
"photoScan": {
"age": 29,
"weight": 54000,
"height": 1640,
"gender": "female",
"frontPhoto": image1_b64,
"rightPhoto": image2_b64,
},
}
response = requests.post(url, headers=headers, json=data).json()
if 'entry' not in response.keys():
return f"Request failed: {response}"
response = response['entry']
print(response.keys())
obj_path = 'avatar.obj'
with open(obj_path, 'wb') as avatar_file:
avatar_file.write(base64.b64decode(response['avatar']['data']))
if response['status'] == 'success':
return {key: value for key, value in response.items() if key != 'avatar'}, obj_path
else:
return f"Request failed: {response['text']}", ''
def assign_sample_images():
image1 = Image.open('./front.jpg')
image2 = Image.open('./right.jpg')
return image1, image2
with gr.Blocks() as demo:
gr.Markdown("## 画像解析アプリ")
with gr.Row():
image1 = gr.Image(type="filepath", label="前からの写真", format='jpeg')
image2 = gr.Image(type="filepath", label="右側からの写真", format='jpeg')
api_key = gr.Textbox(label="APIキーを入力")
org_id = gr.Textbox(label="組織IDを入力")
sample_button = gr.Button("サンプル画像")
analyze_button = gr.Button("解析", variant='primary')
with gr.Row():
avatar_model = gr.Model3D(label="アバター")
result = gr.TextArea(label="解析結果")
sample_button.click(assign_sample_images, inputs=[], outputs=[image1, image2])
analyze_button.click(analyze_images, inputs=[image1, image2, api_key, org_id], outputs=[result, avatar_model])
if __name__ == '__main__':
demo.launch()