Face.comとは
Face.comは、デジカメで撮影された写真の中から顔の位置などを自動で認識し、それにタグを付けて分類することができるオンラインサービスである。Face.comでは、スキャンした写真から顔にあたる部分を探し出し、その特徴(目や鼻などのパーツの位置や性別、眼鏡をかけているかなど)を記録する。利用者は検出された顔に対してタグを付け、友人などに公開することができる。そして利用者やその友人が他の写真を閲覧したりスキャンさせた際に、そこに写っている顔と近い特徴を持った顔の情報をFace.comが保持していれば、その顔に付けられたタグが新たにスキャンした顔に自動で適用される。
たとえば、筆者がいくつかの顔写真をアップロードして、検出された自分の顔に"takaaki"というタグをつけたとする。すると、次に誰かが筆者の顔写真をアップした際には、Face.comはそれを筆者の顔であると判断し、自動で"takaaki"というタグを付けてくれるというわけだ。認識精度はかなり高く、動作も高速だ。
このサービスは当初はFacebook向けのアプリケーションとして、Facebookのアルバムに適用する形で提供された。タグはFacebookのアカウント情報と関連付けられ、その顔がどのユーザのものなのか自動で識別できるというものだ。タグ情報の公開範囲はアルバムの公開範囲に準ずるため、見ず知らずのユーザに無闇に自分のタグ情報を参照される心配はない。このサービスを利用することによって、アルバムの写真を自動で分類したり、Facebookを利用している友人を探したりといったことができる。
図1はFacebookアプリケーションの「Photo Tagger」を使ってみた様子である。Facebookのアルバムに顔写真がアップロードしてあり、4枚並んだ写真のうち左の2枚にはすでに自分の名前をタグとして付けてある。他の4枚は今回新たに顔として認識されたもので、右上の2つは自動で筆者の顔だと判断された。ただし、右から2番目は別の人なので誤認識である。下の2つのうちの右側は筆者だが、これは自動では認識されなかったので手動でタグ付けした(図2)。当然だが、サンプル数が増えれば認識率は上がる。
Facebook以外にも、Face.comではTwitterと連携したアプリケーションも公開している。これはTwitterに投稿された写真から有名人の写ったものを自動検出し、celebrityfindr.comにリストアップするというものである。
前置きが長くなったが、Face.comは去る5月3日よりこの顔認識技術にアクセスするための「face.com API」を無償公開している。したがって開発者は、自身のアプリケーションの中でFace.comで提供される顔認識技術を自由に利用することができるようになった。このAPIはREST形式で呼び出せるシンプルなものであり、PHPとJavaScript(そして非公式でPython)のクライアントライブラリが提供されている。公式サービスと同様にFacebookやTwitterと連携させて利用するほか、オリジナルの名前空間を指定して利用することもできるようになっている。
face.com API
face.com APIはface.com developers siteで公開されている。前述の通りREST形式APIであり、以下のAPIメソッドを介して利用できる。
- faces.detect - 写真から顔を検出する
- faces.recognize - 顔認識を実施し、タグを含む顔の情報を取得する
- faces.train - 顔のインデックスをデータベースに登録する(このプロセスを"トレーニング"と呼ぶ)
- faces.status - インデックスのステータスを取得する
- tags.get - 顔に付けられたタグを取得する
- tags.add - 顔にタグを登録する
- tags.save - 自動で検出されたタグを顔に登録する
- tags.remove - 顔に登録されたタグを削除する
- account.limits - サービスの利用状況を調べる(APIからサービスを利用できる回数(1時間あたり写真200枚)や使える名前空間の数(1000個)に制限があり、その利用状況を知ることができる)
- account.users - 個別の名前空間内のユーザ数を調べる
このうちfaces.detectは他の写真の情報を利用しないため単体で利用できる。一方、faces.recognizeやfaces.trainなどについてはFace.comに登録された顔写真の情報にもアクセスするため、FacebookやTwitterのアカウントを利用するか、独自の名前空間の中で利用する必要がある。参照できる情報の範囲は、それぞれのアカウントがアクセスできる範囲か、同じ名前空間内のものに限られる。
手順としては、まずfaces.detectかfaces.recognizeで写真から顔認識を行う。これで顔の各パーツの座標や、性別、眼鏡の有無などの特徴が取得できる。faces.recognizeのレスポンスには、それに加えてFace.comからデータを同じ顔と思われる写真のタグ情報が含まれている。タグの追加や登録済みタグの取得/変更はtags.addなどのメソッドで行い、その結果はfaces.trainを使うことでFace.comのデータベースに登録できる。
次回は、JavaScriptからこれらのAPIを利用して顔認識を行う方法を紹介する。