revi13 commited on
Commit
fd6d685
·
verified ·
1 Parent(s): 7d2f8d9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +59 -28
app.py CHANGED
@@ -266,31 +266,62 @@ def generate(
266
  ##############################################################################
267
  # 5. Gradio UI
268
  ##############################################################################
269
- with gr.Blocks() as demo:
270
- gr.Markdown("# InstantID – Beautiful Realistic Asians v7")
271
- with gr.Row():
272
- with gr.Column():
273
- face_in = gr.Image(label="顔写真", type="numpy")
274
- subj_in = gr.Textbox(label="被写体説明", placeholder="e.g. woman in black suit, smiling")
275
- add_in = gr.Textbox(label="追加プロンプト")
276
- addneg_in = gr.Textbox(label="追加ネガティブ")
277
- ip_sld = gr.Slider(0, 1.5, 0.65, step=0.05, label="IP-Adapter scale")
278
- cfg_sld = gr.Slider(1, 15, 6, step=0.5, label="CFG")
279
- step_sld = gr.Slider(10, 50, 20, step=1, label="Steps")
280
- w_sld = gr.Slider(512, 1024, 512, step=64, label="")
281
- h_sld = gr.Slider(512, 1024, 768, step=64, label="高さ")
282
- up_ck = gr.Checkbox(label="アップスケール", value=True)
283
- up_fac = gr.Slider(1, 8, 2, step=1, label="倍率")
284
- btn = gr.Button("生成", variant="primary")
285
- with gr.Column():
286
- out_img = gr.Image(label="結果")
287
-
288
- btn.click(
289
- generate,
290
- [face_in, subj_in, add_in, addneg_in, cfg_sld, ip_sld, step_sld, w_sld, h_sld, up_ck, up_fac],
291
- out_img,
292
- api_name="predict",
293
- )
294
-
295
- print("launching …")
296
- demo.queue().launch(show_error=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
266
  ##############################################################################
267
  # 5. Gradio UI
268
  ##############################################################################
269
+
270
+ # FastAPI app
271
+ app = FastAPI()
272
+
273
+ @app.post("/generate")
274
+ async def generate_image_api(request: Request):
275
+ try:
276
+ body = await request.json()
277
+
278
+ image_base64 = body.get("image")
279
+ subject = body.get("subject", "beautiful woman")
280
+ add_prompt = body.get("add_prompt", "")
281
+ add_neg = body.get("add_neg", "")
282
+ cfg = float(body.get("cfg", 6.0))
283
+ ip_scale = float(body.get("ip_scale", 0.65))
284
+ steps = int(body.get("steps", 20))
285
+ width = int(body.get("width", 512))
286
+ height = int(body.get("height", 768))
287
+ upscale = bool(body.get("upscale", False))
288
+ up_factor = int(body.get("up_factor", 2))
289
+
290
+ # decode image
291
+ if not image_base64:
292
+ raise ValueError("Base64画像がありません")
293
+
294
+ img_bytes = base64.b64decode(image_base64.split(",")[-1])
295
+ pil_image = Image.open(BytesIO(img_bytes)).convert("RGB")
296
+ np_image = np.array(pil_image)
297
+
298
+ result_image = generate(
299
+ face_np=np_image,
300
+ subject=subject,
301
+ add_prompt=add_prompt,
302
+ add_neg=add_neg,
303
+ cfg=cfg,
304
+ ip_scale=ip_scale,
305
+ steps=steps,
306
+ w=width,
307
+ h=height,
308
+ upscale=upscale,
309
+ up_factor=up_factor,
310
+ )
311
+
312
+ buffer = BytesIO()
313
+ result_image.save(buffer, format="PNG")
314
+ result_base64 = base64.b64encode(buffer.getvalue()).decode("utf-8")
315
+
316
+ return {"data": ["data:image/png;base64," + result_base64]}
317
+
318
+ except Exception as e:
319
+ return JSONResponse(status_code=500, content={"error": str(e)})
320
+
321
+ # Gradio UIをマウント
322
+ from app import demo # もともとの Gradio UI
323
+ app = gr.mount_gradio_app(app, demo, path="/")
324
+
325
+ if __name__ == "__main__":
326
+ import uvicorn
327
+ uvicorn.run(app, host="0.0.0.0", port=7860)