6.1.2. /identity/multiface_image_omni_verification/stateless

比較対象の顔画像に複数の顔が含まれる場合に、 2 つの画像に含まれる顔の各グループの類似度スコアを返します。

顔画像は、以下の要件を満たすものとします。

  1. JPG (JPEG)、BMP、PNG、GIF、TIFF のいずれかの形式

  2. 幅と高さは 8 px 以上 5,000 px 以下

  3. ファイルサイズは 5 MB 以下

リクエストモード

POST

リクエスト URL

http://ip:port/identity/multiface_image_omni_verification/stateless

リクエストパラメーター

フィールド

必須

説明

first_encrypted_image

String

Yes

暗号化された画像 1。暗号化方法の参照: 個人データの暗号化

second_encrypted_image

String

Yes

暗号化された画像 2。暗号化方法の参照: 個人データの暗号化

auto_rotate

boolean

No

デフォルト値は false で、画像が回転していないことを示します。値が true の場合、画像は自動的に回転されます。

通常のレスポンス

フィールド

説明

request_id

string

このリクエストのID

code

int

システムレスポンスコード: 1000

scores

array

画像の各グループの顔のスコアの比較。推奨閾値: 0.7〜0.8

face_rects

hash

各画像の顔の顔枠

request_id

string

リクエスト番号

例:

first_image_file に相当する図 A に 2 つの顔 (a1、a2) が含まれていて、second_image_file に相当する 図 B にも 2 つの顔 (b1、b2) が含まれているとします。a1b1 などの値は、図 A に含まれる顔 a1 と図 B に含まれる顔 b1 の比較スコアを表します。

{
  'code: Int, # システムレスポンスコード
  'scores': array, # [[a1b1 顔比較スコア, a1b2 顔比較スコア], [a2b1 顔比較スコア, a2b2 顔比較スコア]]
  "face_rects":{ hash,# 各画像の顔枠
                 'first_image_face_rects':[a1 顔枠の座標], [a2 顔枠の座標]],
                 'second_image_face_rects,:[[b1 顔枠の座標],[b2 顔枠の座標]]
               },
  'request_id': string # このリクエストのID
}

顔比較スコアの閾値とエラー率との対応関係:

閾値

0.4

0.5

0.6

0.7

0.8

0.9

エラー率

1/10

1/100

1/1000

1/10,000

1/100,000

1/1,000,000

推奨閾値: 0.7 以上

異常なレスポンス

フィールド

説明

request_id

string

このリクエストのID

code

int

システムレスポンスコード

message

string

エラーメッセージ

{
  'request_id': string,
  'code': int,
  'message': string
}

システムレスポンスコードの説明

コード

フィールドの値

説明

1200

invalid argument

無効な入力パラメーター

2003

invalid image size

画像サイズが要件を満たしていません

2004

invalid content length

画像コンテンツの長さが要件を満たしていません

2005

invalid image type

画像タイプが要件を満たしていません

2006

corrupted image error

画像が破損しています

4000

detection failed

特徴の抽出に失敗しました。画像に顔が検出されませんでした

可能性のある http ステータスコード:

ステータスコード

ステータスフィールド

400

BAD_REQUEST

404

NOT_FOUND

411

LENGTH_REQUIRED

413

PAYLOAD_TOO_LARGE

500

INTERNAL_ERROR

使用サンプル

Curl サンプル

curl -X POST "http://ip:port/identity/multiface_image_omni_verification/stateless" \
  -d first_encrypted_image=xxx \
  -d second_encrypted_image=xxx \
  -d auto_rotate=true

Java サンプル

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class HttpClient {
    public static final String POST_URL = "http://127.0.0.1:3000/identity/multiface_image_omni_verification/stateless";
    private static AESCipher cipher = new AESCipher("dcbbad6765e14139a07d34b92292a672", "df25d188a061");

    public static void Post() throws Exception {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost post = new HttpPost(POST_URL);

        List<NameValuePair> params = new ArrayList<>();

        String firstEncryptedImage = cipher.encrypt(
                Files.readAllBytes(Paths.get("src/main/resources/face_01.jpg")));
        String secondEncryptedImage = cipher.encrypt(
                Files.readAllBytes(Paths.get("src/main/resources/face_02.jpg")));

        params.add(new BasicNameValuePair("first_encrypted_image", firstEncryptedImage));
        params.add(new BasicNameValuePair("second_encrypted_image", secondEncryptedImage));

        post.setEntity(new UrlEncodedFormEntity(params));
        HttpResponse response = httpclient.execute(post);

        if (response.getStatusLine().getStatusCode() == 200) {
            HttpEntity respEntity = response.getEntity();
            BufferedReader reader = new BufferedReader(new InputStreamReader(respEntity.getContent()));
            String line = reader.readLine();
            System.out.println(line);
        } else {
            HttpEntity respEntity = response.getEntity();
            String responseString = EntityUtils.toString(respEntity);
            System.out.println("error:" + response.getStatusLine().getStatusCode()
                    + "  " + response.getStatusLine().getReasonPhrase());
            System.out.println("cause of error:" +responseString);
        }
    }

    public static void main(String[] args) throws Exception {
        Post();
    }
}

最終更新