8
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

顔認証を簡単に作成する

Last updated at Posted at 2018-04-21

はじめに

「face++」という中国製の顔解析のAPIで、
顔認証のように与えた画像が誰なのか当ててもらう方法の紹介です。
これを使えば、顔認証がとても簡単にできちゃいます。
API Keyの取得については、こちらをご覧ください。
https://qiita.com/kudota/items/52a197e271474e022b63

今回はフリーの写真で使える大川さんと朽木さんの顔をどっちの顔か当ててもらいましょう
大川さん
OOK161104408_TP_Vのコピー.jpg
朽木さん
KK187104856_TP_V.jpg

全体の流れとしては、

  1. 人の顔が含まれた画像からface_tokenを取得
  2. 生成したface_tokenにuser_idをつける
  3. user_idをつけた何枚かの画像のface_tokenを一つのグループにする
  4. 今回user_idを登録していない画像がそのグループの中でどの画像に一番近いかを当ててもらう
    という感じです。
    では、早速やってみます。

face_tokenを取得

まず、APIからface_tokenを取得します。
まずは、大川さんの写真のface_tokenを取得します。

curl -X POST "https://api-us.faceplusplus.com/facepp/v3/detect" 
-F "api_key=<api key>" \
-F "api_secret=<api secret>" \
-F "image_url=https://www.pakutaso.com/shared/img/thumb/OOK161104408_TP_V.jpg"

以下のようなjsonが返却され、face_tokenを取得できます
この場合、face_tokenは845d393e700a95d82d4257328b28614fになります。

{
    "faces": [
        {
            "face_rectangle": {
                "height": 405, 
                "left": 727, 
                "top": 423, 
                "width": 405
            }, 
            "face_token": "845d393e700a95d82d4257328b28614f"
        }
    ]
}

同様に朽木さんの写真も行います。

curl -X POST "https://api-us.faceplusplus.com/facepp/v3/detect" 
-F "api_key=<api key>" \
-F "api_secret=<api secret>" \
-F "image_url=https://www.pakutaso.com/shared/img/thumb/KK187104856_TP_V.jpg"

それぞれのface_tokenを取得できました。

{
    "faces": [
        {
            "face_rectangle": {
                "height": 234, 
                "left": 869, 
                "top": 399, 
                "width": 234
            }, 
            "face_token": "a4f5bc341ecd5e5ef0a492a89d9cc9aa"
        }
    ]
}

use_idを登録

続いて、その写真が誰の顔なのかを紐付けるためにさきほど取得したface_tokenを使ってuser_idを登録します。
基本的に、user_idをその人の名前などにすればいいと思います。

curl -X POST "https://api-us.faceplusplus.com/facepp/v3/face/setuserid" \
-F "api_key=<api key>" \
-F "api_secret=<api secret>" \
-F "face_token=845d393e700a95d82d4257328b28614f" \
-F "user_id=ohkawa" 

以下のようなjsonが返ってくれば、成功です。

{
    "face_token": "845d393e700a95d82d4257328b28614f", 
    "request_id": "1516635572,27ed1397-a966-43d4-ab3a-c84266b97bb1", 
    "time_used": 35, 
    "user_id": "ohkawa"
}

同様にもう一枚も行います。

curl -X POST "https://api-us.faceplusplus.com/facepp/v3/face/setuserid" \
-F "api_key=<api key>" \
-F "api_secret=<api secret>" \
-F "face_token=a4f5bc341ecd5e5ef0a492a89d9cc9aa" \
-F "user_id=kuchiki"

faceset作成

次に、facesetに2枚の画像のface_tokeを登録します。
faceset_tokenにさきほどのface_tokenをカンマ区切りで送信します。
facesetとは顔画像のグループみたいなものです。
outer_idとはこのグループの名前です。

curl -X POST "https://api-us.faceplusplus.com/facepp/v3/faceset/create" \
-F "api_key=<api key>" \
-F "api_secret=<api secret>" \
-F "outer_id=facegroup" \
-F "face_tokens=845d393e700a95d82d4257328b28614f,a4f5bc341ecd5e5ef0a492a89d9cc9aa"

以下のようなjsonが返却され、faceset_tokenを取得できます。

{
    "face_added": 2, 
    "face_count": 2, 
    "faceset_token": "9825b551e8ad557891ccae6789770400", 
    "failure_detail": [], 
    "outer_id": "facegroup", 
    "request_id": "1516635755,df10eede-35b3-4259-a4da-b62993d27b4e", 
    "time_used": 519
}

誰の顔を当ててもらう

では、faceset_token使って誰の顔か当ててもらいましょう。
別の大川さんの写真を使います。
JIDORIIMGL2614_TP_V.jpg

curl -X POST "https://api-us.faceplusplus.com/facepp/v3/search" \
-F "api_key=<api key>" \
-F "api_secret=<api secret>" \
-F "image_url=https://www.pakutaso.com/shared/img/thumb/JIDORIIMGL2614_TP_V.jpg" \
-F "outer_id=facegroup"

以下の結果が返ってきました。

    "results": [
        {
            "confidence": 88.544, 
            "face_token": "845d393e700a95d82d4257328b28614f", 
            "user_id": "ohkawa"
        }
    ]

ちゃんとohkawaが取得できました。
成功ですね!
ちなみにconfidenceは信頼度でどれくらい正しそうかみたいなものです。
これを使って顔認証とかは簡単にできちゃいます。

8
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?