接口5:改为多选发型 + 每发型返回 middle/high/low 三档叠图(去掉 hairline_level 入参)
- 去掉 hairline_level 入参;middle/high/low 三档都返回
- 入参改为同接口2:gender + hair_style(逗号分隔多选,必填),缺失/越界返回 1007
- 每个选中发型返回 image_{middle,high,low}_base64 三档叠图 + grown_image_base64 生发图,
按发型分组;order = 发型序号,含 hairline_type
- 生发黑模板仍固定 middle(hairline_texture_black/),每发型 1 张生发图
- best_hairline_center_point 取首个选中发型的 middle 档
- 同步更新测试页(三档并排展示)、integration.html、stub_worker、接口文档/实现说明、test_api
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+20
-5
@@ -130,16 +130,31 @@ def test_hairline_gen_missing_gender_1004(client):
|
||||
assert client.post(HLGEN, headers=H, files=files).json()["code"] == 1004
|
||||
|
||||
|
||||
def test_hairline_gen_female(client):
|
||||
def test_hairline_gen_missing_hairstyle_1007(client):
|
||||
# hair_style 已改为必填(同接口2):只给 gender、不给 hair_style → 1007
|
||||
files = {"image_file": ("frontal.jpg", open(fixture("frontal.jpg"), "rb"), "application/octet-stream")}
|
||||
body = client.post(HLGEN, headers=H, files=files, data={"gender": "female"}).json()
|
||||
assert client.post(HLGEN, headers=H, files=files, data={"gender": "female"}).json()["code"] == 1007
|
||||
|
||||
|
||||
def test_hairline_gen_female(client, monkeypatch):
|
||||
# mock ComfyUI:不依赖 8182,只验证三档叠图 + 生发字段接线
|
||||
import hairline.comfyui as comfy
|
||||
monkeypatch.setattr(comfy, "run", lambda *a, **k: _PNG_1x1)
|
||||
|
||||
files = {"image_file": ("frontal.jpg", open(fixture("frontal.jpg"), "rb"), "application/octet-stream")}
|
||||
body = client.post(HLGEN, headers=H, files=files, data={"gender": "female", "hair_style": "1,3"}).json()
|
||||
assert body["code"] == 0, body
|
||||
d = body["data"]
|
||||
assert [x["order"] for x in d["hairline_images"]] == [1, 2, 3, 4, 5]
|
||||
assert base64.b64decode(d["hairline_images"][0]["image_base64"])[:3] == b"\xff\xd8\xff" # JPEG
|
||||
imgs = d["hairline_images"]
|
||||
# 只返回选中发型,order = 发型序号
|
||||
assert [x["order"] for x in imgs] == [1, 3]
|
||||
assert [x["hairline_type"] for x in imgs] == ["ellipse", "heart"]
|
||||
# 三档叠图 + 生发图均为 JPEG(worker 返回 base64,非 url)
|
||||
for k in ("image_middle_base64", "image_high_base64", "image_low_base64", "grown_image_base64"):
|
||||
assert base64.b64decode(imgs[0][k])[:3] == b"\xff\xd8\xff", k
|
||||
assert "image_middle_url" not in imgs[0]
|
||||
c = d["best_hairline_center_point"]
|
||||
assert 0 <= c["x"] <= 682 and 0 <= c["y"] <= 811 # 落在原图范围内
|
||||
assert "image_url" not in d["hairline_images"][0]
|
||||
|
||||
|
||||
# 接口4(用户特征)已迁到网关本机实现(直接调豆包),不再在 worker;
|
||||
|
||||
Reference in New Issue
Block a user