備忘録:Face++をPythonで実装

メイドロボットましろちゃん(https://twitter.com/A_says_)にイベント会場に来た人の顔を識別して会った回数が多い場合リアクションを変える機能を実装したいということでFace++で顔識別をやってみました.
Face++ - Face++ AI Open Platform

開発環境

PC: Mac
Language: Python 3.7
IDE: PyCharm

Face++導入

ここにアクセスしてメールアドレスと電話番号を登録したら勝手にAPI Keyが作られます.
Face++

手順

  1. facesetを作成(create)
  2. 顔が含まれている画像をPOSTして,顔を検出(detect)してもらってface_tokenを発行
  3. face_tokenとラベル(user id)を紐づける(setuserid)
  4. face_tokenをfacesetに追加(add)

facesetは画像中の顔の固有番号face_tokenのストレージ(face_tokenは発行後72時間で消えるので記録しておく必要がある)
これを持っている画像の枚数分繰り返す.
あとは画像とfacesetをPOSTするとラベルと確率が帰ってくる

プログラム

画像データはこれを使いました.
CBCL FACE RECOGNITION DATABASE
このなかのtraining_originals

faceset作成 faceset_tokenの取得

        create_url = 'https://api-us.faceplusplus.com/facepp/v3/faceset/create'
        payload = {'api_key': API_KEY,
                   'api_secret': API_SECRET
                   }
        res = requests.post(create_url, data=payload)
        faceset_token = res.json()['faceset_token']

顔検出 face_tokenの取得

        detect_url = 'https://api-us.faceplusplus.com/facepp/v3/detect'
        payload = {'api_key': API_KEY,
                   'api_secret': API_SECRET,
                   'image_base64': face_image
                   }
        res = requests.post(detect_url, data=payload)
        face_token = res.json()['faces'][0]['face_token']

face_imageはbase64エンコードした画像ファイル

ラベル設定 useridの設定

        set_url = 'https://api-us.faceplusplus.com/facepp/v3/face/setuserid'
        payload = {'api_key': API_KEY,
                   'api_secret': API_SECRET,
                   'face_token': face_token,
                   'user_id': face_id
                   }
        res = requests.post(set_url, data=payload)

face_idは好きなやつでOK "John"とか"Tom"とか

face_tokenをfacesetに追加

        add_url = 'https://api-us.faceplusplus.com/facepp/v3/faceset/addface'
        payload = {'api_key': API_KEY,
                   'api_secret': API_SECRET,
                   'faceset_token': faceset_token,
                   'face_tokens': face_token
                   }
        res = requests.post(add_url, data=payload)

画像のラベル識別

        search_url = 'https://api-us.faceplusplus.com/facepp/v3/search'
        payload = {'api_key': API_KEY,
                   'api_secret': API_SECRET,
                   'image_base64': face_image,
                   'faceset_token': faceset_token
                   }
        res = requests.post(search_url, data=payload)
        return res.json()['results'][0]['confidence'], res.json()['results'][0]['user_id']

ソースコード
github.com

とりあえず備忘録なので簡単に,,,