refactor(接口3): 简化为只需划线图一张,去掉 original + best_hairline
按需求方意见——B端只需上传一张已画好发际线的图,用不着原图: - 入参去掉 original_image_*,只保留 marked_image_*(三选一) - 输出去掉 best_hairline_image_url,只返回 hair_growth_image_url + hairline_type - ComfyUI 输入图改用 marked 划线图原样(add_hair.json 本就是"画了线的照片", 提示词清除黑线);检测路径只用于建遮罩,不再重画干净线/不需对齐原图 - service.generate_grow_b 签名改 (marked_bgr) 单参 - 同步文档:接口文档/接口3技术方案/网关映射表(去掉接口3 best_hairline 行) - 测试更新:grow-b 只传 marked,断言无 best_hairline 字段,44全绿 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+5
-14
@@ -193,9 +193,11 @@ def generate_hairline_pngs(image_bgr: np.ndarray, gender: str):
|
||||
return {"images": images, "best_center": best_center}
|
||||
|
||||
|
||||
def generate_grow_b(marked_bgr: np.ndarray, original_bgr: np.ndarray):
|
||||
"""接口3:检测医生手绘发际线 → 遮罩 → 原图重画干净线 → ComfyUI 生发。
|
||||
def generate_grow_b(marked_bgr: np.ndarray):
|
||||
"""接口3:检测医生手绘发际线 → 遮罩 → 送 ComfyUI 生发(仅需划线图一张)。
|
||||
|
||||
检测路径只用来**建遮罩**;ComfyUI 输入图用 **marked 原图**(含医生手绘线,
|
||||
工作流提示词会清除黑线再生发)。
|
||||
Returns: {"grown_png": bytes 或 None, "status": "ok"|"no_face"|"no_line"}。
|
||||
"""
|
||||
rgb = cv2.cvtColor(marked_bgr, cv2.COLOR_BGR2RGB)
|
||||
@@ -208,23 +210,12 @@ def generate_grow_b(marked_bgr: np.ndarray, original_bgr: np.ndarray):
|
||||
return {"grown_png": None, "status": "no_line"}
|
||||
|
||||
h, w = marked_bgr.shape[:2]
|
||||
# 原图对齐到 marked 坐标系(同一张照片的原始版/划线版,尺寸应一致)
|
||||
orig = original_bgr
|
||||
if orig.shape[:2] != (h, w):
|
||||
orig = cv2.resize(orig, (w, h), interpolation=cv2.INTER_AREA)
|
||||
|
||||
# 在原图上重画干净黑线(膨胀成笔迹宽度),替代医生手绘的毛刺
|
||||
line_w = max(2, int(w * 0.006))
|
||||
marked_clean = orig.copy()
|
||||
cv2.polylines(marked_clean, [path[:, ::-1].reshape(-1, 1, 2)], False,
|
||||
(0, 0, 0), line_w, lineType=cv2.LINE_AA)
|
||||
|
||||
# 遮罩:检测路径曲线 + ROI 闭合
|
||||
curve_mask = path_to_curve_mask(path, h, w, thickness=max(3, line_w))
|
||||
mask = mask_from_curve(curve_mask, landmarks, parse_map)
|
||||
|
||||
buf = io.BytesIO()
|
||||
compose_comfy_rgba(marked_clean, mask).save(buf, format="PNG")
|
||||
compose_comfy_rgba(marked_bgr, mask).save(buf, format="PNG") # marked 原图 + 遮罩
|
||||
grown_png = comfyui.run(buf.getvalue())
|
||||
return {"grown_png": grown_png, "status": "ok"}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user