クラウドインフラ構築記

現在AWSの構築支援に携わっております。今注視しているのは、GKE、BigQuery、Google Dataflowなどサービスを展開しているGoolge Cloud Platformです。

Google Cloud Visionでランドマーク認識 #gcpja


Google の画像認識APIであるGoogle Cloud Visionが使えるようになりましたので、少しいじってみました。

Google Cloud Visonは、物体検知、有害コンテンツ検知、ランドマーク検知、OCR、顔検知など画像の情報を抜き出すことが可能です。REST APIでGoogleサイドと通信していると想定される。

Vision用のService Accountを作成し、credentialsの設定をするしておく必要があります。

export GOOGLE_APPLICATION_CREDENTIALS=deeplearning-environment-78bacd3d4b5b.json

Google APIにアクセスするのに、API discovery documentをベースとしたservice objectを作成する。GAリリースしたものは自動でfetchされるのだが、Vision APIは、alphaリリースなので、下記よりダウンロードする必要があります。

https://cloud.google.com/vision/docs/vision_discovery_v1alpha1.json

def get_vision_service():
 credentials = GoogleCredentials.get_application_default()
 with open(API_DISCOVERY_FILE, 'r') as f:
 doc = f.read()

 return discovery.build_from_document(
 doc, credentials=credentials, http=httplib2.Http())
LABEL_DETECTION  ラベル
FACE_DETECTION 顔認識
LANDMARK_DETECTION ランドマーク認識
TEXT_DETECTION OCR
LOGO__DETECTION ロゴ
SAFE_SEARCH__DETECTION  有害情報検知
SUGGESTION_DETECTION

以下ランドマーク認識の例です。以下で画像データをbase64にエンコードし、Vison APIに渡しています。

 with open(photo_file, 'rb') as image:
 image_content = image.read()
 batch_request = [{
 'image': {
 'content': base64.b64encode(image_content)
 },
 'features': [{
 'type': 'LANDMARK_DETECTION',
 'maxResults': 4,
 }]
 }]
 service = get_vision_service()
 request = service.images().annotate(body={
 'requests': batch_request,
 })
 response = request.execute()

IMAG0142

過去デジカメで撮影した写真を解析すると大阪城(Osaka Castle)として認識されています。位置情報もばっしり。

 {u'responses': [{u'landmarkAnnotations': [{u'locations': [{u'latLng': {u'latitude': 34.686777, u'longitude': 135.525799}}], u'score': 0.613115, u'mid': u'/m/024b_g', u'boundingPoly': {u'vertices': [{u'y': 955, u'x': 1545}, {u'y': 955, u'x': 2411}, {u'y': 1346, u'x': 2411}, {u'y': 1346, u'x': 1545}]}, u'description': u'Osaka Castle'}]}]}

TEXT_DETECTIONを使うと、ちらし画像から文字情報を取り出す(OCR)することもできます。

顔認識は、認識したポリゴン点の座標(fdBoundingPoly)を返してくれます。ただ、画像の中のすべての顔を認識してくれない、顔認識に失敗するケースがあるようです。

コメントは受け付けていません。