AI 照片換臉
如何實作 AI 照片換臉
步驟 1:上傳來源與參考圖片
- 向 API 請求上傳網址:
POST https://yce-api-01.makeupar.com/s2s/v2.0/file Authorization: Bearer YOUR_API_KEY Content-Type: application/json內容:
{ "files": [ { "file_name": "target.jpg", "file_size": 123456, "content_type": "image/jpeg" } ] }回應會提供預簽名的上傳網址與
file_id。使用 HTTP PUT 請求,將檔案上傳到指定的網址。
儲存
file_id以供後續使用。對目標與參考圖片都重複此步驟。將實際檔案上傳到上傳網址。
步驟 2:前處理來源與參考圖片(臉部偵測)
- 建立前處理任務:
POST https://yce-api-01.makeupar.com/s2s/v2.0/task/face-swap/pre-process Authorization: Bearer YOUR_API_KEY Content-Type: application/json內容:
{ "request_id": 1, "payload": { "file_sets": { "src_ids": ["TARGET_FILE_ID"] }, "actions": [ { "id": 0 } ] } }- API 回傳
task_id。 - 在此輪詢任務狀態:
GET https://yce-api-01.makeupar.com/s2s/v2.0/task/face-swap/pre-process?task_id=TASK_ID- 完成後,您會收到帶有邊界框的偵測臉部清單。
步驟 3:執行換臉任務
- 定義哪個參考圖片將取代每個來源圖片
face_mapping陣列定義來源圖片中的臉部如何被參考圖片中的臉部取代。它就像一個連結清單,將來源中偵測到的臉部連接到特定的參考圖片。
結構
陣列中的每個元素都是包含兩個屬性的物件:
參數 類型 說明 positioninteger在來源圖片中偵測到的臉部索引(例如 0、1、2)。 indexinteger要交換的參考圖片清單中臉部圖片的索引。 - 邏輯規則
索引對應:
index直接對應您參考清單中提供圖片的順序。0:第一張參考圖片。1:第二張參考圖片。
跳過交換: 若要跳過交換來源中某個被偵測到的臉部,請將
index與position都設為-1。陣列順序: 陣列中物件的順序,應依據
position對應。- 使用範例
情境:
- 參考清單: 提供 2 張圖片(圖片 A、圖片 B)。
- 來源圖片: 包含 3 個被偵測到的臉部(臉 0、臉 1、臉 2)。
目標:
- 將臉 0(來源)與圖片 1(參考)交換。
- 跳過交換臉 1(來源)。
- 將臉 2(來源)與圖片 0(參考)交換。
設定:
"face_mapping": [ { "index": 1, // 使用第二張參考圖片 "position": 0 // 套用到來源中偵測到的第一張臉部 }, { "index": -1, // 跳過換臉 "position": -1 // 跳過換臉 }, { "index": 0, // 使用第一張參考圖片 "position": 2 // 套用到來源中偵測到的第三張臉部 } ]
- 發送主要任務請求:
POST https://yce-api-01.makeupar.com/s2s/v2.0/task/face-swap Authorization: Bearer YOUR_API_KEY Content-Type: application/json內容:
{ "request_id": 2, "payload": { "file_sets": { "src_ids": ["TARGET_FILE_ID"], "ref_ids": ["REFERENCE_FILE_ID"] }, "actions": [ { "id": 0, "params": { "face_mapping": [ { "index": 0, "position": 0 }, { "index": -1, "position": -1 } ] } } ] } }- 回應會回傳
task_id。
- 定義哪個參考圖片將取代每個來源圖片
步驟 4:輪詢任務狀態並取得結果 必須實作定時迴圈,在允許的輪詢窗口內以固定間隔查詢任務狀態。
- 輪詢:
GET https://yce-api-01.makeupar.com/s2s/v2.0/task/face-swap?task_id=TASK_ID- 當
status為success時,回應包含生成影像的網址。 - 從該網址下載或顯示圖片。
步驟 5:整合到您的平台
- 在網頁前端,您可以直接用 JavaScript 以 fetch 或 Axios 實作。
- 在後端(Node.js、Python、Java、PHP 等),您可以使用標準 HTTP 函式庫呼叫相同的端點。
- 由於任務以非同步執行,請實作重試與錯誤處理。
- 除錯指南
Invalid TaskId 錯誤
原因: 若您嘗試查詢已逾時任務的狀態,會收到 InvalidTaskId 錯誤。因此,AI 任務啟動後,您需要在 polling_interval 內輪詢其狀態,直到狀態變為 success 或 error。
解法: 為避免任務失效,必須實作定時迴圈,在允許的輪詢窗口內以固定間隔查詢任務狀態。為什麼我的來源圖片中有些臉部未被偵測到
原因: 臉部必須清晰可見,未被覆蓋或遮擋,且在圖片中足夠大
解法: 嘗試拍攝臉部看起來更大、且清晰可見無任何覆蓋或遮擋的照片
- 支援的格式與尺寸
| AI 功能 | 支援的尺寸 | 支援的檔案大小 | 支援的格式 |
|---|---|---|---|
| AI 照片換臉 | 輸入與輸出:長邊必須小於或等於 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 | 超過重試上限,以避免生成 NSFW 圖片 |
| error_upload | 上傳結果圖片時發生錯誤 |
| error_multiple_people | 人數超過上限 |
| error_no_shoulder | 來源圖片中肩膀不可見 |
| error_large_face_angle | 上傳圖片的臉部角度過大 |
| error_unsupport_ratio | 輸入圖片的長寬比不受支援 |
| unknown_internal_error | 其他內部錯誤 |
下载 OpenAPI 描述
语言
服务器
https://yce-api-01.makeupar.com


