AI 顔交換
AI 顔交換の実装方法
ステップ 1: ソース画像と参照画像のアップロード
- API からアップロード URL をリクエストします:
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" } ] }レスポンスには、事前署名付きの アップロード URL と
file_idが含まれます。指定された URL に対して HTTP PUT リクエストでファイルをアップロードします。
後で使用するために
file_idを保存します。ターゲット画像と参照画像の両方に対してこの手順を繰り返します。実際のファイルを アップロード URL にアップロードします。
ステップ 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を返します。 - タスクのステータスを次の URL でポーリングします:
GET https://yce-api-01.makeupar.com/s2s/v2.0/task/face-swap/pre-process?task_id=TASK_ID- 完了すると、バウンディングボックス付きの検出された顔のリストを受け取ります。
ステップ 3: 顔交換タスクの実行
- どの参照画像が各ソース画像を置き換えるかを定義します
face_mapping配列は、ソース画像内の顔が参照画像内の顔によってどのように置き換えられるかを定義します。これは、ソース内で検出された顔を特定の参照画像に接続するリンクリストとして機能します。
構造
配列内の各要素は、2 つのプロパティを含むオブジェクトです:
パラメータ 型 説明 positionintegerソース画像内で検出された顔のインデックス(例: 0, 1, 2)。 indexinteger交換対象となる参照画像リスト内の顔画像のインデックス。 - ロジックルール
インデックスマッピング:
indexは、参照リストに提供された画像の順序に直接対応します。0: 1 番目の参照画像。1: 2 番目の参照画像。
交換のスキップ: ソース内で検出された特定の顔の交換をスキップするには、
indexとpositionの両方を-1に設定します。配列の順序: 配列内のオブジェクトの順序は、
positionに基づいて一致させる必要があります。- 使用例
シナリオ:
- 参照リスト: 2 枚の画像を提供(画像 A、画像 B)。
- ソース画像: 3 つの顔が検出される(顔 0、顔 1、顔 2)。
目標:
- 顔 0(ソース)を画像 1(参照)と交換する。
- 顔 1(ソース)の交換をスキップする。
- 顔 2(ソース)を画像 0(参照)と交換する。
設定:
"face_mapping": [ { "index": 1, // Use the second reference image "position": 0 // Apply to the first detected face in source }, { "index": -1, // Skip swapping "position": -1 // Skip swapping }, { "index": 0, // Use the first reference image "position": 2 // Apply to the third detected face in source } ]
- メインタスクリクエストを送信します:
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: タスクステータスのポーリングと結果の取得 許可されたポーリングウィンドウ内で、一定の間隔でタスクステータスを照会するタイミングループを実装する必要があります。
- 次の URL でポーリングします:
GET https://yce-api-01.makeupar.com/s2s/v2.0/task/face-swap?task_id=TASK_IDstatusがsuccessになると、レスポンスには生成された画像の URL が含まれます。- その URL から画像をダウンロードまたは表示します。
ステップ 5: プラットフォームへの統合
- Web フロントエンドでは、fetch または Axios を使用して JavaScript で直接実装できます。
- バックエンド(Node.js、Python、Java、PHP など)では、標準的な HTTP ライブラリを使用して同じエンドポイントを使用できます。
- タスクは非同期で実行されるため、リトライとエラーハンドリングを実装してください。
- デバッグガイド
Invalid TaskId エラー
理由: タイムアウトしたタスクのステータスを確認しようとすると、InvalidTaskId エラーが発生します。したがって、AI タスクが開始されたら、ステータスが success または error に変わるまで、polling_interval 内でステータスをポーリングする必要があります。
解決策: タスクが無効になるのを避けるために、許可されたポーリングウィンドウ内で一定の間隔でタスクステータスを照会するタイミングループを実装する必要があります。ソース画像で一部の顔が検出されない理由
理由: 顔がはっきりと見えており、覆われたり遮られたりしておらず、画像内で十分に大きい必要があります。
解決策: 顔が大きく写っており、覆いや遮りがなくはっきりと見える写真を撮影してみてください。
- 対応フォーマットと寸法
| 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 | その他の内部エラー |


