📡 旷视五接口 — 前端接入说明

Base URL: https://hair.xiangsilian.com  |  在线文档: /docs  |  在线测试页见底部

通用约定 接口1 接口2 接口3 接口4 接口5 接口6 错误码 在线测试

🔧 通用约定

协议HTTPS
请求方式全部 POST
编码UTF-8
Content-Typemultipart/form-data
图片参数三选一:image_file(文件上传)/ image_url(URL)/ image_base64(base64 + 前缀)
图片格式JPG / PNG,单人正面照

统一响应结构

{
  "code": 0,           // 0=成功,非0=错误
  "message": "success",
  "request_id": "...",  // 请求追踪 ID
  "data": { ... }       // 业务数据,各接口不同
}

1. 四庭七眼测量  POST  /api/v1/face/measure

上传正面照 → 返回标注好的 PNG(仅标注图层,透明底)+ 四庭七眼厘米数值 + 关键点像素坐标。

入参

参数类型必填说明
image_filefile三选一上传图片文件
image_urlstring三选一图片 URL
image_base64string三选一base64 字符串,需带 data:image/...;base64, 前缀

data 字段

字段类型说明
annotated_image_urlstring标注 PNG URL(仅标注图层,透明底,叠加到原图上显示)
face_total_height_cmnumber全脸高度(cm)= 四庭之和
four_courtsobject四庭:top/upper/middle/lower,各含 _cmratios
seven_eyesobject七眼:eye_width_cm/face_width_cm/inter_eye_distance_cm + ratios + eye1~eye7(从左到右 7 段宽度 cm,eye1/eye7 耳朵不可见时为 null)
landmarksobject5 个关键点像素坐标:hair_top/hairline/brow_center/nose_bottom/chin_tip
hairline_sourcestring发际线来源:"segmentation"(真实分割,可信度高)/ "estimated"(比例估算,可信度低)
head_poseobject头部姿态角度:{ yaw, pitch, roll }(度),接近 0 表示正面照
left_positionobjectMediaPipe 21 号关键点坐标(左脸定位点),原图像素:{ x: number, y: number }
right_positionobjectMediaPipe 251 号关键点坐标(右脸定位点,与 21 号镜像),原图像素:{ x: number, y: number }

💡 前端把标注图叠加到原图上即可呈现测量效果(标注图白色线条 #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 叠加)

2. C端生发  POST  /api/v1/hair/grow

上传正面照 + 性别 + 发型序号 → 返回指定发际线类型的发际线曲线透明 PNG + 生发图。

入参

参数类型必填说明
image_file / image_url / image_base64三选一用户正面照
genderstring✅ 必填"male" / "female"
hair_styleint✅ 必填发型序号。female: 1~5,male: 1~4(见下方映射)

data.results[] 元素

字段类型说明
image_urlstring发际线曲线透明 PNG(仅白色曲线,透明底,需叠加原图显示)
grown_image_urlstring生发后效果图(ComfyUI/Flux「植发3个月」完整人像)⚠ 可空
hairline_typestring发际线类型 key
orderint排序(1=最佳,当前按贴图顺序)

💡 image_url 是透明底 PNG,前端需用绝对定位叠加到原图上显示(参考 测试页.img-stack 叠加结构)。

Female 5 种:ellipse/flower/heart/straight/wave  |  Male 4 种:ellipse/m/straight/inverse_arc
⚠ 生发图由本机 ComfyUI 生成,耗时可达数分钟,fetch 超时需放大(≥5min)。

3. B端生发(医生端) POST  /api/v1/hair/grow-b

医生用马克笔在用户照片额头画线 → 拍照上传 → 系统生成生发效果图。

入参

参数类型必填说明
marked_image_file / marked_image_url / marked_image_base64✅ 三选一已用马克笔标注发际线的图片

data 字段

字段类型说明
hair_growth_image_urlstring生发后效果图 URL ⚠ 可空
hairline_typestring固定 "custom"(手绘定制)

⚠ 划线图未检测到划线(或无人脸)→ code=1001

4. 用户特征分析  POST  /api/v1/face/features

上传照片 → 火山方舟豆包视觉模型分析 → 返回固定 6 项面部特征(脸型/眉形/面部年龄/动静类型/性别/基因风格)。

入参:image_file / image_url / image_base64 三选一。无其他参数。

data 字段

字段类型说明
featuresstringJSON 字符串(不是对象!客户端需 JSON.parse())。解析后得到固定 6 个英文字段

features 字段(固定返回 6 个):

字段说明字段说明
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.gene_style);   // "自然型"

5. 发际线 PNG 生成  POST  /api/v1/hairline/generate

上传正面照 + 性别 + 多选发型 → 每个选中发型 middle/high/low 三档发际线叠图 + 生发图 + 最佳发际线中心点坐标。

入参(同接口2:先选性别,再多选发型)

参数类型必填说明
image_file / image_url / image_base64三选一用户正面照
genderstring✅ 必填"male" / "female"
hair_stylestring✅ 必填发型序号,逗号分隔多选(如 1,2,3)。缺失/越界返回 1007
generate_grow_imagebool是否生成生发效果图(ComfyUI 生发,全流程最耗时),默认 true。传 false 时跳过生发,各发型 grown_image_url 恒为 null,仅返回三档发际线叠图与中心点,大幅降低耗时

data 字段

字段类型说明
hairline_images[]object[]选中发型列表,每项含 hairline_typeimage_middle_url/image_high_url/image_low_url 三档透明 PNG 叠图(仅曲线,需叠加原图)、grown_image_url 生发图(完整人像,失败或 generate_grow_image=false 时为 null)、order
best_hairline_center_pointobject \| null首个选中发型 middle 档发际线中心点像素坐标 { x: number, y: number }
high_hairline_center_pointobject \| null同上,high 档发际线中点(发际线偏高,y 更小)
low_hairline_center_pointobject \| null同上,low 档发际线中点(发际线偏低,y 更大)
face_measureobject \| null复用接口1四庭七眼测量数值(不含标注图)。独立流程,测量失败时为 null,不影响发际线主结果。结构见下表

face_measure 字段(与接口1 的 data 同构,不含 annotated_image_*):

字段类型说明
face_total_height_cmnumber全脸高度(cm)= 四庭之和
four_courtsobject四庭:top/upper/middle/lower,各含 _cmratios
seven_eyesobject七眼:eye_width_cm/face_width_cm/inter_eye_distance_cm + ratios + eye1~eye7(从左到右 7 段宽度 cm,eye1/eye7 耳朵不可见时为 null)
landmarksobject5 个关键点像素坐标:hair_top/hairline/brow_center/nose_bottom/chin_tip
hairline_sourcestring发际线来源:"segmentation"(真实分割)/ "estimated"(比例估算)
head_poseobject头部姿态角度:{ yaw, pitch, roll }(度)
left_positionobjectMediaPipe 21 号关键点坐标(左脸定位点),原图像素:{ x: number, y: number }
right_positionobjectMediaPipe 251 号关键点坐标(右脸定位点,与 21 号镜像),原图像素:{ x: number, y: number }

💡 前端无需额外请求接口1 即可拿到四庭七眼测量数值;face_measurenull 时(角度过大/无人脸等)仅隐藏测量区块,发际线结果照常展示。

6. 四庭七眼测量 v2  POST  /api/v1/face/measure-v2  v2

基于接口1的变体。上传正面照 → 返回标注 PNG + 三庭七眼数据。与接口1 的差异:

  • 去顶庭:不画头顶横线、不返回顶庭数据,face_total_height_cm = 上+中+下庭
  • 竖线范围:发际线→下巴尖(接口1 为头顶→下巴尖)
  • 无头部端线:仅七眼 6 点 5 段标尺(接口1 为 8 点 7 段)

入参

参数类型必填说明
image_file / image_url / image_base64三选一用户正面照

data 字段

字段类型说明
annotated_image_urlstring标注 PNG URL(仅标注图层,透明底)
face_total_height_cmnumber面部总高度(cm)= 三庭之和
four_courtsobject三庭:upper/middle/lower,各含 _cm 和 ratios(无 top_court
seven_eyesobject七眼:eye_width_cm/face_width_cm/inter_eye_distance_cm + ratios + eye2~eye6(左脸颊/左眼/两眼间距/右眼/右脸颊,5 段宽度 cm;无 eye1/eye7
landmarksobject4 个关键点:hairline/brow_center/nose_bottom/chin_tip(无 hair_top
left_positionobjectMediaPipe 21 号关键点坐标(左脸定位点),原图像素:{ x: number, y: number }
right_positionobjectMediaPipe 251 号关键点坐标(右脸定位点,与 21 号镜像),原图像素:{ x: number, y: number }

⚠ 错误码

codemessage说明
1001无法识别人像未检测到人脸
1003角度问题,非正面照非正面 / 角度过大
1004gender 必填且只能为 male / female接口2/5 的 gender 缺失或非法
1005检测到多张人脸仅支持单人
1007图片参数错误 / 后端不可用参数传错 / 服务繁忙请稍后重试
1008图片格式不支持非 JPG/PNG / base64 解码失败
1009未授权缺少或错误的 X-Internal-Token/api/* 路径鉴权)

注:1004 仍在使用(接口2/5 的 gender 校验);接口7(grow-v2)已弃用,请改用接口2。

🧪 在线测试页面

接口测试页功能
1. 四庭七眼/static/test_interface1.html上传照片 → 原图+标注叠加,底图/标注开关,指标卡片
2. C端生发/static/test_interface2.html上传+性别 → 方案一覧(原图/叠加/生发),双图对比
3. B端生发/static/test_interface3.html划线图上传 → 生发效果图
4. 用户特征/static/test_interface4.html上传照片 → 6项面部特征 + 原始JSON
5. 发际线PNG/static/test_interface5.html上传+性别 → 发际线方案+中心点坐标
6. 四庭七眼 v2/static/test_interface6.html同接口1,去顶庭 · 竖线发际线→下巴 · 无头部端线

完整 API 文档:/docs(Swagger UI)

Base: https://hair.xiangsilian.com  |  Swagger: /docs  |  接入说明: /static/integration.html