Spaces:
Sleeping
Sleeping
File size: 2,262 Bytes
31f8b71 a399ffc 31f8b71 c90e8d6 a399ffc 31f8b71 c90e8d6 3d01749 8064459 5f35f33 3d01749 31f8b71 5f35f33 31f8b71 3d01749 31f8b71 a804043 31f8b71 b5bf896 c90e8d6 31f8b71 c90e8d6 62cc455 8b87cd1 7220be7 62cc455 31f8b71 b77e67a 62cc455 31f8b71 b77e67a c90e8d6 b77e67a 7220be7 c90e8d6 b77e67a 31f8b71 b5bf896 b77e67a c90e8d6 8b87cd1 c90e8d6 e406364 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
import os
import io
import base64
import traceback
from PIL import Image
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
from huggingface_hub import hf_hub_download
from pipeline import IPFacePlusV2Pipeline
# ✅ Hugging Faceのキャッシュ・設定ディレクトリを/tmpに変更
os.environ["HF_HOME"] = "/tmp/hf"
os.environ["HF_HUB_CACHE"] = "/tmp/hf/hub"
os.environ["HUGGINGFACE_HUB_CACHE"] = "/tmp/hf/hub"
os.environ["TRANSFORMERS_CACHE"] = "/tmp/hf/transformers"
os.environ["XDG_CACHE_HOME"] = "/tmp/hf/xdg"
# ✅ トークンを取得(SpacesのSecretsに設定してあるもの)
hf_token = os.environ.get("HUGGINGFACE_HUB_TOKEN")
if not hf_token:
raise ValueError("環境変数 'HUGGINGFACE_HUB_TOKEN' が設定されていません。")
# ✅ モデルファイルのダウンロード
model_path = hf_hub_download(
repo_id="revi13/ip-adapter-faceid-private",
filename="ip-adapter-faceid-plusv2_sd15.bin",
local_dir="/tmp/hf/models", # 保存先を手動指定
local_dir_use_symlinks=False, # シンボリックリンクではなく実体保存
token=os.environ["HUGGINGFACE_HUB_TOKEN"]
)
# ✅ パイプライン初期化
pipeline = IPFacePlusV2Pipeline(model_path)
# ✅ FastAPI アプリ作成
app = FastAPI()
@app.get("/")
def root():
return {"status": "ok"}
@app.post("/generate")
async def generate_image_api(request: Request):
print("✅ [START] /generate API called") # ← 呼び出し確認
try:
body = await request.json()
base64_image = body.get("image")
prompt = body.get("prompt", "portrait")
print(f"🔧 Received prompt: {prompt[:30]}...") # プロンプト確認
print("🚀 Start generating image...")
image_base64 = pipeline.generate_image(base64_image, prompt)
print("✅ Image generation complete")
return JSONResponse(content={"success": True, "image_base64": image_base64})
except Exception as e:
print(f"❌ Exception occurred: {str(e)}")
print("=== ERROR OCCURRED ===")
traceback.print_exc()
print("======================")
return JSONResponse(status_code=500, content={"success": False, "error": str(e)})
|