imager / app.py
Amirhustler's picture
Update app.py
57cf3ee verified
import io, base64, os, random
from fastapi import FastAPI
from pydantic import BaseModel
from PIL import Image
print(">>> importing optimum.intel.openvino ...")
from optimum.intel.openvino import OVStableDiffusionPipeline
print(">>> import OK")
MODEL_ID = os.environ.get("MODEL_ID", "OpenVINO/stable-diffusion-v1-5-int8-ov")
print("Loading model ...")
pipe = OVStableDiffusionPipeline.from_pretrained(MODEL_ID)
pipe.reshape(512, 512) # برای CPU بهتر
pipe.compile()
print("Model loaded.")
app = FastAPI(title="Txt2Img CPU API")
class Req(BaseModel):
prompt: str
negative_prompt: str | None = None
steps: int = 20
guidance: float = 7.5
seed: int | None = None
width: int = 512
height: int = 512
@app.get("/healthz")
def health():
return {"ok": True}
@app.post("/txt2img")
def txt2img(r: Req):
# در OpenVINO نیازی به torch.Generator نیست؛ seed را روی random ست می‌کنیم (اختیاری)
if r.seed is not None:
random.seed(r.seed)
image = pipe(
prompt=r.prompt,
negative_prompt=r.negative_prompt,
num_inference_steps=r.steps,
guidance_scale=r.guidance,
width=r.width, height=r.height,
).images[0]
buf = io.BytesIO()
image.save(buf, format="PNG")
return {"image_base64": base64.b64encode(buf.getvalue()).decode()}