人臉年齡偵測

上傳一張圖片,找出圖中所有人臉的位置,以及每張臉的大致年齡。每次偵測會扣積分,扣款規則請見〈積分與計費〉。

圖片直接以檔案上傳(multipart/form-data),不需要轉成 base64。

POST /api/v2/tasks/detect-face
X-Api-Key: sk-live-xxxx
Content-Type: multipart/form-data
Idempotency-Key: 選填,見〈圖生影片〉的說明

完整範例

curl -X POST https://yuyuvideo.com/api/v2/tasks/detect-face \
  -H "X-Api-Key: sk-live-xxxx" \
  -F "image=@photo.jpg" \
  -F "callback_url=https://example.com/webhooks/yuyu-detect-face"

建立成功會回傳 202 Accepted 和任務資料(type 為 3),表示系統已收到圖片、正在偵測。credits 是這次扣除的積分,範例中的數字僅供參考。如果用相同的 Idempotency-Key 重複送出,會回傳 200 OK 和原本那筆任務。

{
  "public_id": "01K1M2N3P4Q5R6S7T8V9W0XY14",
  "type": 3,
  "status": 10,
  "credits": 5,
  "params": {
    "model": "YUYU_M5",
    "images": ["uploads/01K1M2N3P4Q5R6S7T8V9W0XY15.jpg"]
  },
  "result": null,
  "error_code": null,
  "error_message": null,
  "created_at": "2026-10-19T08:00:00.000000Z",
  "finished_at": null,
  "files_expire_at": null,
  "files_expired": false,
  "files": []
}

status 通常是 10(處理中),偶爾是 0(排隊中),兩種情況都只要等 Webhook 通知或查詢任務即可。這類任務的結果不是檔案,所以 files 永遠是空陣列,files_expire_at、files_expired 也不會用到。

偵測通常幾秒內就會完成。完成後(status = 20),Webhook 通知和 GET /api/tasks/{public_id} 的 result 會是:

{
  "result": {
    "face_coordinates": [
      { "index": 0, "bbox": [41, 49, 131, 146], "age": 4 },
      { "index": 1, "bbox": [328, 274, 415, 388], "age": 2 }
    ]
  }
}

圖中沒有人臉時,face_coordinates 會是空陣列 [],這是正常完成,不是失敗。偵測失敗時,任務會變成 30(失敗),並全額退回這次扣的積分。

參數表

欄位 型別 必填 說明
image file 是 圖片檔,支援 PNG、JPG、JPEG、WebP,最大 10 MB
model string 否 不填時使用 YUYU_M5
callback_url string 否 任務結束時要通知的網址,需以 https:// 開頭,最多 2000 字。這類任務的通知會多帶 result,見下方說明

一次只能偵測一張圖片。要偵測多張,請每張各呼叫一次,每次會分別扣積分、產生各自的 public_id。

表格沒有列出的參數帶了會回傳 422,不會被忽略。

result.face_coordinates 欄位說明

欄位 說明
index 第幾張臉,從 0 開始
bbox 臉的位置 [x1, y1, x2, y2],也就是左上角和右下角的座標。單位是像素,以原始圖片為準
age 年齡分級(整數),對照表見下方

age 對照表

age 年齡
0 0–2 歲
1 3–9 歲
2 10–19 歲
3 20–29 歲
4 30–39 歲
5 40–49 歲
6 50–59 歲
7 60–69 歲
8 以上 70 歲以上

Webhook 通知的差異

人臉年齡偵測的 Webhook 通知會比其他任務多帶一個 result 欄位,直接附上偵測結果,不需要再查詢一次:

{
  "public_id": "01K1M2N3P4Q5R6S7T8V9W0XY14",
  "status": 20,
  "error_code": null,
  "payload": null,
  "result": {
    "face_coordinates": [
      { "index": 0, "bbox": [41, 49, 131, 146], "age": 4 }
    ]
  }
}

任務失敗時(status = 30),result 一樣會出現,但值是 null。其他任務(例如圖生影片)的通知不會帶 result,格式請見〈回呼(Webhook)〉。

錯誤情境

狀態碼 原因 回應內容
422 參數有誤,例如沒有上傳 image、檔案格式不支援、超過 10 MB、callback_url 格式錯誤 errors 欄位會列出每個欄位的錯誤原因
422 model 填了不存在的模型 { "message": "Unknown model alias: {model}" }
402 積分不足 { "message": "Insufficient credits to complete this charge." }
429 請求太頻繁,或排隊中的偵測任務太多 回應會帶 Retry-After header,請等待後再送

查詢進度請見〈任務查詢與取件〉,扣款規則請見〈積分與計費〉。

舊版 API

已經串接舊版 POST /api/tasks/detect-face 的話(用 JSON 送出、images 放一張 base64 data URI、model 必填、成功回傳 201 Created),可以繼續使用,不需要修改。偵測結果、Webhook 通知和計費都跟新版相同。

新串接請使用本頁的 POST /api/v2/tasks/detect-face。