feat(接口4): 用户特征-火山方舟豆包视觉模型(替换Mock)

接口4 改用远程视觉大模型(算法来源 /home/xsl/fuyan),一次返回几十项面部特征。

- face_features.py: 火山方舟 Ark 客户端(单例)+doubao-seed-1-6-vision prompt(移植fuyan)
  +base64 data URI喂图(实测doubao接受)+解析JSON+映射6英文优先字段(face_shape等)
  并保留doubao全部中文字段;has_face 据"图片是否有人脸"判定
- app.py: /face/features 真实实现,三选一图(image_url直传doubao,file/base64转dataURI),
  features 为 JSON 字符串;无人脸→1001;重活线程池
- 配置: API Key 走 worker_config.json.ark_api_key / 环境变量 ARK_API_KEY(不入git);
  worker_config.example 加占位; requirements 加 volcengine-python-sdk[ark]
- 文档: 接口文档/OpenAPI 更新为豆包实现+几十项字段+1001
- 测试: mock doubao 的成功/无人脸/多参,47全绿

⚠️ 唯一调外网云模型的接口,worker 需可达 ark.cn-beijing.volces.com(已实测可达)。
实测 frontal: 42字段, 鹅蛋脸/平眉/18-25岁/静态型/女/少年型。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
xsl
2026-06-15 10:50:17 +08:00
co-authored by Claude Opus 4.8
parent 795de68985
commit 0e71830bb6
6 changed files with 233 additions and 37 deletions
+19 -12
View File
@@ -271,7 +271,7 @@
## 接口 4:用户特征接口
**说明**:输入用户照片,输出 N 个用户特征字段
**说明**:输入用户照片,由**火山方舟 豆包视觉模型**`doubao-seed-1-6-vision`)分析,输出一大批面部特征
**请求**`POST /api/v1/face/features`
@@ -281,18 +281,25 @@
### 输出(data
`data` 直接返回一个 **JSON 字符串**`features`),其内部字段不固定、可随时调整,由业务方约定。当前优先返回的字段如下(仅作示例,最终以实际返回为准)
`data.features`一个 **JSON 字符串**不是对象,客户端 `JSON.parse()` 后用)。内含**几十项**特征
脸型/眉形/眼型/鼻型/眼袋/法令纹/人中/瞳色/脖长/肤色、三庭五眼、四季色彩季型、量感/轮廓类型、
直曲量感得分、面部立体度、瞳距、对比度、基因风格、动静类型、性别……字段不固定、可随时增删。
| 字段 | 类型 | 说明 |
|------|------|------|
| face_shape | string | 脸形 |
| eyebrow_shape | string | 眉形 |
| facial_age | int | 面部年龄 |
| dynamic_static_type | string | 动静类型 |
| gender | string | 性别 |
| gene_style | object | 面部特征对应面部标签的「基因风格」 |
其中**英文优先字段**(与 doubao 中文字段并存,方便客户端直接取):
### 响应示例(当前 Mock 返回值)
| 字段 | 说明 |
|------|------|
| face_shape | 脸形(脸型)|
| eyebrow_shape | 眉形 |
| facial_age | 面部年龄(区间字符串,如"18-25岁"|
| dynamic_static_type | 动静类型(静态型/动态型)|
| gender | 性别(男/女)|
| gene_style | 基因风格(如"自然型"|
> 无人脸返回 `1001`(据 doubao「图片是否有人脸」判定)。⚠️ 本接口是唯一调**外网云模型**的接口,
> worker 需可访问 `ark.cn-beijing.volces.com`API Key 走 worker 配置/环境变量。
### 响应示例
```json
{
@@ -300,7 +307,7 @@
"message": "success",
"request_id": "mock-request-id",
"data": {
"features": "{\"face_shape\": \"鹅蛋脸\", \"eyebrow_shape\": \"柳叶眉\", \"facial_age\": 26, \"dynamic_static_type\": \"静态\", \"gender\": \"女\", \"gene_style\": {\"label\": \"面部特征标签\", \"style\": \"基因风格示例\"}}"
"features": "{\"图片是否有人脸\":\"有人\",\"脸型\":\"鹅蛋脸\",\"眉形\":\"平眉\",\"面部年龄\":\"18-25岁\",\"四季色彩季型\":\"冷夏型\",\"基因风格\":\"少年型\",\"性别\":\"女\",\"face_shape\":\"鹅蛋脸\",\"eyebrow_shape\":\"眉\",\"facial_age\":\"18-25岁\",\"dynamic_static_type\":\"静态\",\"gender\":\"女\",\"gene_style\":\"少年型\"}"
}
}
```