detectFace APIのPythonサンプル
FaceBookに買収されたFACE.comが開発者向けAPIを停止するとのことなので、他の類似サービスがないか探してみました。そうすると、日本の会社がhttp://detectface.com/:detectFace();という類似サービスを公開しているようです。こちらはアプリケーションキーの登録などは必要なく、POSTやGETで画像データを送るだけで利用できます。
今回はPythonでローカルに置いている画像をPOSTするクラスを作ってみました。
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' Created on 2012/07/15 @author: masato-ka ''' import os import urllib2 import urllib class detectFaceProxy(object): def __init__(self,mode=0,force=0): self.detect_face_url='http://detectface.com/api/detect?m={m}&f={f}'.format(m=mode,f=force) self.data='' def fetch_feature(self,image_file_path): """ detectFaceAPIに画像を投げ込み、特徴点XMLを返す。 :param String image_file_path: 顔画像のファイルパス :rtype:String :return: 結果xml """ path,type=os.path.splitext(image_file_path) content_type=type[1:] if content_type=="jpg": content_type="jpeg" data = self._read_image_binary(image_file_path) request = urllib2.Request(self.detect_face_url) request.add_header('Content-Type','image/{t}'.format(t=content_type)) request.add_data(data) opener = urllib2.build_opener() self.data = opener.open(request).read() return self.data def _read_image_binary(self,file_path): return open(file_path,"r").read()
detectFaceProxyクラスのインスタンスからfetch_featureメソッドを実行してください。fetch_featureメソッドには画像ファイルのパスを渡します。返値として結果xmlがかえってきます。また、detectFaceProxy.dataにも同じものが格納されます。結果のxmlはxml.dom.minidomなんかで適当にパースすると扱いやすくなります。
単純に顔と目の位置、特徴点の位置と信頼度を返すだけですので、FACE.comのように性別の判定などは行っていないようです。
特徴点をJubatusなんかに食わせられるだろうか。