犬ターネット

Betaface API を使った顔検出処理について

2014-05-14 顔認識 betaface

Betaface API ( https://www.betafaceapi.com/wpa/ ) についての日本語情報があまり見つからないから少しまとめておく。

Betaface API とは

フリーの顔認識/検出webサービス。有償版もあるっぽい。

画像をアップロードすると、顔座標や顔情報(性別、年齢など)を検出するだけでなくモーフィングなどの変換処理も行える。

データのやり取りは HTTP + XML で行われる。最近 JSON 版も公開されたけど動かないものが多いので XML を使ったほうが無難。

例えば、以下の画像から

顔部分だけを切り出したり、

モーフィングしたり、笑わせたり(?)といったことが可能。

公式ドキュメントなど

ツイッターもフォローしとくと吉。

APIキー、利用制限など

フリー版のAPIキーは以下。

api_key: d45fd466-51e2-4701-8da8-04351c872236
api_secret: 171e8465-f548-401d-b63b-caf0dc28df5f

新規画像アップロードは 500枚/1日、15,000枚/1ヵ月。顔検出リクエストについては制限なし。

参考 : https://twitter.com/betaface/status/431178439110819840

処理の流れ

  1. 画像をアップロードする ( UploadNewImage_File, UploadNewImage_Url )
  2. アップロードした画像の顔情報を得る ( GetImageInfo )
  3. 顔画像の変換処理をする (Transform_Faces )
  4. 変換した顔画像を取得する ( GetTransformResult )

メソッド

とりあえずよく使いそうなものだけ。

UploadNewImage_File

画像ファイルをアップロードして img_uid を取得する。画像ファイルは base64 encode した文字列で指定する。

UploadNewImage_Url

画像ファイルをアップロードして img_uid を取得する。画像ファイルは url で指定する。

GetImageInfo

img_uid に紐づく画像情報を得る。個々の顔情報は <FaceInfo>~</FaceInfo> に含まれる。

GetFaceImage

uidに紐づいた顔情報を返す。<face_image>~</face_image>には顔画像の base64 encode 文字列が設定される。

Transform_Faces

GetImageInfo で検出した顔情報の uid を使って画像変換処理を行い transform_uid を得る。

※公式ドキュメント上は deprecated になってるけどちゃんと動く。

GetTransformResult

Transform_Faces で得た transform_uid を渡して変換後の画像を取得する。画像は base64 encode 文字列で返される。

その他

処理正常終了時/異常終了時の判定

正常に処理が終了した場合、XML レスポンス内の int_response に「0」が設定される。処理中やエラーの場合は int_response に「0」以外が設定される。エラーメッセージは string_response に何かしら設定される。

処理が即時完了することはまずないから、プログラム側で適当にwaitかけてリクエストを投げてあげる必要がある。

バグっぽいやつ

TransformFaces 処理で expression_* すると、たまに全然違う画像が返ってきたりする。

以下は expresson_excited 指定したら何故か男性の顔が返ってきたケース。誰だよあんた...

パラメータ少しいじってもう一度リクエスト投げると正しい画像が返ってくるかもしれない。

input:range のスライダー変更検知イベントは oninput?
favstar.fm の一覧を JSON で返す API