AI Retake
如何实现 AI 换脸(Retake)
第 1 步:上传源图与参考图
- 向接口请求上传 URL:
POST https://yce-api-01.makeupar.com/s2s/v2.0/file Authorization: Bearer YOUR_API_KEY Content-Type: application/jsonBody:
{ "files": [ { "file_name": "target.jpg", "file_size": 123456, "content_type": "image/jpeg" } ] }响应会给出一个预签名的上传 URL 和一个
file_id。用 HTTP PUT 请求把文件上传到该 URL。
保存
file_id备用。目标图与参考图都要重复这一套流程。把实际文件上传到上传 URL。
第 2 步:预处理源图与参考图(人脸检测)
- 创建预处理任务:
POST https://yce-api-01.makeupar.com/s2s/v2.0/task/retake/pre-process Authorization: Bearer YOUR_API_KEY Content-Type: application/jsonBody:
{ "request_id": 1, "payload": { "file_sets": { "src_ids": ["TARGET_FILE_ID"] }, "actions": [ { "id": 0 } ] } }- 接口返回一个
task_id。 - 在此接口轮询任务状态:
GET https://yce-api-01.makeupar.com/s2s/v2.0/task/retake/pre-process?task_id=TASK_ID- 处理完成后,您会收到一份带边界框的检测到的人脸列表。
第 3 步:执行 AI 换脸(Retake)任务
- 指定哪张参考图的脸去替换源图中的哪张脸
face_mapping数组定义了源图中的人脸如何被参考图的人脸替换,作用相当于把源图中检测到的人脸与指定参考图串起来的关联表。
单次请求只支持替换一张脸。所有非目标的人脸都必须设为
{"index": -1, "position": -1}。尝试替换超过一张脸会返回error_change_too_many_faces。返回该错误的请求不会计费。参考图只支持使用检测到的第一张脸,因此 index 必须始终为 0。参数
参数 类型 说明 position 整数 源图中检测到的人脸下标(例如 0、1、2)。 index 整数 参考图人脸下标。目前只支持第一张检测到的人脸,因此该值必须为 0。 规则
- 单脸替换:单次请求只能把一张源图人脸映射到一张参考图人脸。
- 跳过某张脸:把 index 与 position 都设为 -1。
- 参考图人脸下标:参考图只支持检测到的第一张脸,因此 index 始终为 0。
示例
场景
- 参考图:1 张含单张受支持人脸的图片。
- 源图:检测到 4 张脸(Face 0、Face 1、Face 2、Face 3)。
- 目标:只替换 Face 2,Face 0、Face 1、Face 3 保持不动。
"face_mapping": [ { "index": -1, // Skip replacing "position": -1 // Skip replacing }, { "index": -1, // Skip replacing "position": -1 // Skip replacing }, { "index": 0, // Always use the first reference image "position": 2 // Apply to the third detected face in source }, { "index": -1, // Skip replacing "position": -1 // Skip replacing }, ]
- 发送主任务请求:
POST https://yce-api-01.makeupar.com/s2s/v2.0/task/retake Authorization: Bearer YOUR_API_KEY Content-Type: application/jsonBody:
{ "request_id": 2, "payload" : { "file_sets": { "src_ids": ["TARGET_FILE_ID" ], "ref_ids": ["REFERENCE_FILE_ID"] }, "actions" : [ { "id" : 0, "params": { "face_mapping": [ {"index": -1, "position": -1}, {"index": -1, "position": -1}, {"index": 0, "position": 2}, {"index": -1, "position": -1} ] } } ] } }- 响应返回一个
task_id。
- 指定哪张参考图的脸去替换源图中的哪张脸
第 4 步:轮询任务状态并取回结果 需要实现一个定时循环,在允许的轮询窗口内按固定间隔查询任务状态。
- 在此接口轮询:
GET https://yce-api-01.makeupar.com/s2s/v2.0/task/retake?task_id=TASK_ID- 当
status为success时,响应中包含生成图片的 URL。 - 从该 URL 下载或展示图片。
第 5 步:接入您的平台
- 在网页前端,可以直接用 JavaScript 的 fetch 或 Axios 实现。
- 在后端(Node.js、Python、Java、PHP 等),用标准 HTTP 库调用同样的接口即可。
- 任务是异步执行的,请实现重试与错误处理。
排障指引
- 为什么源图里有些脸没被检测到
原因: 理由:人脸必须清楚可见、没有被覆盖或遮挡,且在图片中足够大
解决办法: 重新拍一张照片,让脸部更大、清楚可见,没有任何遮盖或遮挡
- 为什么源图里有些脸没被检测到
- 支持的格式与尺寸
| AI 功能 | 支持尺寸 | 支持文件大小 | 支持格式 |
|---|---|---|---|
| AI 换脸(Retake) | 输入与输出:长边不得超过 4096 像素 | < 10MB | jpg/jpeg/png |
- 错误码
| 错误码 | 说明 |
|---|---|
| exceed_max_filesize | 输入文件大小超出上限 |
| invalid_parameter | 参数取值无效 |
| error_download_image | 下载源图片出错 |
| error_download_mask | 下载蒙版图片出错 |
| error_decode_image | 解码源图片出错 |
| error_decode_mask | 解码蒙版图片出错 |
| error_download_video | 下载源视频出错 |
| error_decode_video | 解码源视频出错 |
| error_nsfw_content_detected | 在源图中检测到不适宜内容(NSFW) |
| error_no_face | 源图中未检测到人脸 |
| error_pose | 源图中姿态检测失败 |
| error_face_parsing | 源图的人脸解析失败 |
| error_inference | 推理流程中出错 |
| exceed_nsfw_retry_limits | 为避免生成不适宜内容,重试次数已超限 |
| error_upload | 上传结果图片出错 |
| error_multiple_people | 人数超出上限 |
| error_no_shoulder | 源图中看不到肩部 |
| error_large_face_angle | 上传图片中的脸部角度过大 |
| error_unsupport_ratio | 输入图片的宽高比不受支持 |
| error_change_too_many_faces | 单次请求只支持替换一张脸。所有非目标的人脸都必须设为 {"index": -1, "position": -1}。尝试替换超过一张脸就会返回该错误。 |
| unknown_internal_error | 其他内部错误 |
下载 OpenAPI 描述
语言
服务器
https://yce-api-01.makeupar.com


