|
|
@@ -68,29 +68,18 @@ def run(manifest, out_root, creds=None, log=print):
|
|
|
log(f"⚠️ [{label}] 模型返回 PNG 但没有透明 Alpha:alpha={mn}-{mx},请重新生成或换支持透明输出的图像模型")
|
|
|
|
|
|
def generate_checked(label, prompt, size, require_alpha):
|
|
|
- retry_suffixes = [
|
|
|
- "",
|
|
|
- "这不是真透明背景。请重新生成:\n背景必须是 Alpha 透明通道,不是白色、灰色或棋盘格。\n去掉所有背景、阴影、光晕和底板,只保留主体,输出 PNG。",
|
|
|
- "这不是真透明背景。请重新生成:\n背景必须是 Alpha 透明通道,不是白色、灰色或棋盘格。\n去掉所有背景、阴影、光晕和底板,只保留主体,输出 PNG。",
|
|
|
- ]
|
|
|
- last = None
|
|
|
- for attempt, suffix in enumerate(retry_suffixes, start=1):
|
|
|
- attempt_prompt = ", ".join(x for x in [prompt, suffix] if x)
|
|
|
- if attempt > 1:
|
|
|
- log(f"🔁 [{label}] Alpha 不合格,重新生成透明 PNG(第 {attempt}/{len(retry_suffixes)} 次)…")
|
|
|
- img = providers.generate(creds["provider"], attempt_prompt, creds["api_key"],
|
|
|
- creds.get("base_url", "https://api.openai.com/v1"),
|
|
|
- creds.get("model", "gpt-image-2"),
|
|
|
- size)
|
|
|
- last = img
|
|
|
- log_alpha(label, img, require_alpha)
|
|
|
- if not require_alpha or has_alpha(img):
|
|
|
- return img
|
|
|
- log(f"🧠 [{label}] 模型连续 {len(retry_suffixes)} 次没有真实 Alpha,改用百度智能抠图兜底…")
|
|
|
+ img = providers.generate(creds["provider"], prompt, creds["api_key"],
|
|
|
+ creds.get("base_url", "https://api.openai.com/v1"),
|
|
|
+ creds.get("model", "gpt-image-2"),
|
|
|
+ size)
|
|
|
+ log_alpha(label, img, require_alpha)
|
|
|
+ if not require_alpha or has_alpha(img):
|
|
|
+ return img
|
|
|
+ log(f"🧠 [{label}] 模型没有真实 Alpha,直接改用百度智能抠图兜底…")
|
|
|
try:
|
|
|
- fixed = baidu_segment.remove_background(last, label=label, log=log)
|
|
|
+ fixed = baidu_segment.remove_background(img, label=label, log=log)
|
|
|
except Exception as e:
|
|
|
- raise RuntimeError(f"模型连续 {len(retry_suffixes)} 次没有返回真实 Alpha,百度智能抠图也失败:{e}")
|
|
|
+ raise RuntimeError(f"模型没有返回真实 Alpha,百度智能抠图也失败:{e}")
|
|
|
log_alpha(label, fixed, True)
|
|
|
if has_alpha(fixed):
|
|
|
return fixed
|