Base URL: https://hair.xiangsilian.com | 在线文档: /docs | 在线测试页见底部
| 协议 | HTTPS |
| 请求方式 | 全部 POST |
| 编码 | UTF-8 |
| Content-Type | multipart/form-data |
| 图片参数 | 三选一:image_file(文件上传)/ image_url(URL)/ image_base64(base64 + 前缀) |
| 图片格式 | JPG / PNG,单人正面照 |
统一响应结构:
{
"code": 0, // 0=成功,非0=错误
"message": "success",
"request_id": "...", // 请求追踪 ID
"data": { ... } // 业务数据,各接口不同
}
/api/v1/face/measure上传正面照 → 返回标注好的 PNG(仅标注图层,透明底)+ 四庭七眼厘米数值 + 关键点像素坐标。
入参
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| image_file | file | 三选一 | 上传图片文件 |
| image_url | string | 三选一 | 图片 URL |
| image_base64 | string | 三选一 | base64 字符串,需带 data:image/...;base64, 前缀 |
data 字段
| 字段 | 类型 | 说明 |
|---|---|---|
annotated_image_url | string | 标注 PNG URL(仅标注图层,透明底,叠加到原图上显示) |
face_total_height_cm | number | 全脸高度(cm)= 四庭之和 |
four_courts | object | 四庭:top/upper/middle/lower,各含 _cm 和 ratios |
seven_eyes | object | 七眼:eye_width_cm/face_width_cm/inter_eye_distance_cm + ratios + eye1~eye7(从左到右 7 段宽度 cm,eye1/eye7 耳朵不可见时为 null) |
landmarks | object | 5 个关键点像素坐标:hair_top/hairline/brow_center/nose_bottom/chin_tip |
hairline_source | string | 发际线来源:"segmentation"(真实分割,可信度高)/ "estimated"(比例估算,可信度低) |
head_pose | object | 头部姿态角度:{ yaw, pitch, roll }(度),接近 0 表示正面照 |
💡 前端把标注图叠加到原图上即可呈现测量效果(标注图白色线条 #FFFFFF,透明底)。
请求示例(fetch):
const fd = new FormData();
fd.append('image_file', file); // 或 image_url / image_base64
const res = await fetch('https://hair.xiangsilian.com/api/v1/face/measure', {
method: 'POST',
body: fd
});
const { code, data } = await res.json();
// data.annotated_image_url → 标注 PNG
// data.face_total_height_cm → 全脸高度
// data.four_courts.ratios → { top_court: 0.25, ... }
// 前端叠加显示:原图 + annotated_image_url(absolute 叠加)
/api/v1/hair/grow上传正面照 + 性别 + 发型序号 → 返回指定发际线类型的预览图与生发图。
入参
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| image_file / image_url / image_base64 | — | 三选一 | 用户正面照 |
| gender | string | ✅ 必填 | "male" / "female" |
| hair_style | int | ✅ 必填 | 发型序号。female: 1~5,male: 1~4(见下方映射) |
data.results[] 元素
| 字段 | 类型 | 说明 |
|---|---|---|
image_url | string | 发际线叠加预览图(曲线叠在原图上) |
grown_image_url | string | 生发后效果图(ComfyUI/Flux「植发3个月」)⚠ 可空 |
hairline_type | string | 发际线类型 key |
order | int | 排序(1=最佳,当前按贴图顺序) |
Female 5 种:ellipse/flower/heart/straight/wave |
Male 4 种:ellipse/m/straight/inverse_arc
⚠ 生发图由本机 ComfyUI 生成,耗时可达数分钟,fetch 超时需放大(≥5min)。
/api/v1/hair/grow-b医生用马克笔在用户照片额头画线 → 拍照上传 → 系统生成生发效果图。
入参
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| marked_image_file / marked_image_url / marked_image_base64 | — | ✅ 三选一 | 已用马克笔标注发际线的图片 |
data 字段
| 字段 | 类型 | 说明 |
|---|---|---|
hair_growth_image_url | string | 生发后效果图 URL ⚠ 可空 |
hairline_type | string | 固定 "custom"(手绘定制) |
⚠ 划线图未检测到划线(或无人脸)→ code=1001
/api/v1/face/features上传照片 → 火山方舟豆包视觉模型分析 → 返回几十项面部特征(脸型/眉形/肤色/四季色彩…)。
入参:image_file / image_url / image_base64 三选一。无其他参数。
data 字段
| 字段 | 类型 | 说明 |
|---|---|---|
features | string | JSON 字符串(不是对象!客户端需 JSON.parse()) |
features 英文优先字段(其余中文字段同时返回,共~42个):
| 字段 | 说明 | 字段 | 说明 |
|---|---|---|---|
| face_shape | 脸型 | eyebrow_shape | 眉形 |
| facial_age | 面部年龄区间 | gender | 性别 |
| dynamic_static_type | 动静类型 | gene_style | 基因风格 |
const res = await fetch('https://hair.xiangsilian.com/api/v1/face/features', {
method: 'POST',
body: fd
});
const { code, data } = await res.json();
const features = JSON.parse(data.features); // ← 注意:data.features 是字符串!
console.log(features.face_shape); // "鹅蛋脸"
console.log(features['四季色彩季型']); // "冷夏型"(中文字段也保留)
/api/v1/hairline/generate上传正面照 + 性别 + 多选发型 → 每个选中发型 middle/high/low 三档发际线叠图 + 生发图 + 最佳发际线中心点坐标。
入参(同接口2:先选性别,再多选发型)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| image_file / image_url / image_base64 | — | 三选一 | 用户正面照 |
| gender | string | ✅ 必填 | "male" / "female" |
| hair_style | string | ✅ 必填 | 发型序号,逗号分隔多选(如 1,2,3)。缺失/越界返回 1007 |
data 字段
| 字段 | 类型 | 说明 |
|---|---|---|
hairline_images[] | object[] | 选中发型列表,每项含 hairline_type、image_middle_url/image_high_url/image_low_url 三档叠图、grown_image_url 生发图(失败为 null)、order |
best_hairline_center_point | object | 首个选中发型 middle 档发际线中心点像素坐标 { x: number, y: number } |
face_measure | object \| null | 复用接口1的四庭七眼测量数值(不含标注图)。独立流程,测量失败时为 null,不影响发际线主结果。结构见下表 |
face_measure 字段(与接口1 的 data 同构,不含 annotated_image_*):
| 字段 | 类型 | 说明 |
|---|---|---|
face_total_height_cm | number | 全脸高度(cm)= 四庭之和 |
four_courts | object | 四庭:top/upper/middle/lower,各含 _cm 和 ratios |
seven_eyes | object | 七眼:eye_width_cm/face_width_cm/inter_eye_distance_cm + ratios + eye1~eye7(从左到右 7 段宽度 cm,eye1/eye7 耳朵不可见时为 null) |
landmarks | object | 5 个关键点像素坐标:hair_top/hairline/brow_center/nose_bottom/chin_tip |
hairline_source | string | 发际线来源:"segmentation"(真实分割)/ "estimated"(比例估算) |
head_pose | object | 头部姿态角度:{ yaw, pitch, roll }(度) |
💡 前端无需额外请求接口1 即可拿到四庭七眼测量数值;face_measure 为 null 时(角度过大/无人脸等)仅隐藏测量区块,发际线结果照常展示。
/api/v1/face/measure-v2 v2基于接口1的变体。上传正面照 → 返回标注 PNG + 三庭七眼数据。与接口1 的差异:
face_total_height_cm = 上+中+下庭入参
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| image_file / image_url / image_base64 | — | 三选一 | 用户正面照 |
data 字段
| 字段 | 类型 | 说明 |
|---|---|---|
annotated_image_url | string | 标注 PNG URL(仅标注图层,透明底) |
face_total_height_cm | number | 面部总高度(cm)= 三庭之和 |
four_courts | object | 三庭:upper/middle/lower,各含 _cm 和 ratios(无 top_court) |
seven_eyes | object | 七眼:eye_width/face_width/inter_eye_distance |
landmarks | object | 4 个关键点:hairline/brow_center/nose_bottom/chin_tip(无 hair_top) |
/api/v1/hair/grow-v2 v2功能与接口2完全一致,仅 ComfyUI 工作流不同——使用 add_hair2.json 替代 add_hair.json(Flux-2 Klein 9b)。
入参
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| image_file / image_url / image_base64 | — | 三选一 | 用户正面照 |
| gender | string | ✅ 必填 | "male" / "female" |
| hair_style | int | ✅ 必填 | 发型序号。female: 1~5,male: 1~4 |
data.results[] 元素(同接口2)
| 字段 | 类型 | 说明 |
|---|---|---|
image_url | string | 发际线叠加预览图 |
grown_image_url | string | 生发后效果图 ⚠ 可空 |
hairline_type | string | 发际线类型 key |
order | int | 排序 |
Female 5 种:ellipse/flower/heart/straight/wave |
Male 4 种:ellipse/m/straight/inverse_arc
⚠ 工作流: add_hair2.json(Flux-2 Klein 9b),输入节点 26,输出节点 75。
| code | message | 说明 |
|---|---|---|
| 1001 | 无法识别人像 | 未检测到人脸 |
| 1003 | 角度问题,非正面照 | 非正面 / 角度过大 |
| 1005 | 检测到多张人脸 | 仅支持单人 |
| 1007 | 图片参数错误 / 后端不可用 | 参数传错 / 服务繁忙请稍后重试 |
| 1008 | 图片格式不支持 | 非 JPG/PNG / base64 解码失败 |
1004 已废弃(接口2 不再自动判性别,改由客户端传 gender 参数)。
| 接口 | 测试页 | 功能 |
|---|---|---|
| 1. 四庭七眼 | /static/test_interface1.html | 上传照片 → 原图+标注叠加,底图/标注开关,指标卡片 |
| 2. C端生发 | /static/test_interface2.html | 上传+性别 → 方案一覧(原图/叠加/生发),双图对比 |
| 3. B端生发 | /static/test_interface3.html | 划线图上传 → 生发效果图 |
| 4. 用户特征 | /static/test_interface4.html | 上传照片 → 42项面部特征表格 + 原始JSON |
| 5. 发际线PNG | /static/test_interface5.html | 上传+性别 → 发际线方案+中心点坐标 |
| 6. 四庭七眼 v2 | /static/test_interface6.html | 同接口1,去顶庭 · 竖线发际线→下巴 · 无头部端线 |
| 7. C端生发 v2 | /static/test_interface7.html | 同接口2,使用 add_hair2.json 工作流(Flux-2 Klein 9b) |
完整 API 文档:/docs(Swagger UI)
Base: https://hair.xiangsilian.com | Swagger: /docs | 接入说明: /static/integration.html