はじめに
隣の席の先輩が先日、Cloud Auto ML Vision
を用いてカレイの識別を試みました。
→ Cloud AutoML Visionを使ってカレイの種類を識別してみた
この記事で思ったよりも簡単に画像識別が出来るのを見て、それならばと、とりあえず入門編としてまずはCloud Vision API
を触ってみようと今回チャレンジしました。
Cloud Vision APIとは
Cloud Vision APIとは、Googleが用意した学習モデルを利用して、画像から様々な情報を抽出することができるサービスです。
下記の様に様々な機能があります。
機能のタイプ | 説明 |
---|---|
ラベル検出 | 乗り物や動物など、画像に写っているさまざまなカテゴリの物体を検出 |
テキスト検出 | 画像内のテキストに対して光学式文字認識(OCR)を実行し、テキストを検出 |
ドキュメントテキスト検出 | ドキュメントなどの高密度テキスト画像に対してOCRを実行し、ドキュメントテキストを検出 |
セーフサーチプロパティの検出 | アダルト コンテンツや暴力的コンテンツなど、画像に含まれる不適切なコンテンツを検出 |
顔検出 | 画像に含まれる複数の人物の顔を検出(ただし、個人を特定する顔認識には対応していません。) |
ランドマーク検出 | 画像内の地理的ランドマークを検出 |
ロゴ検出 | 画像内の企業ロゴを検出 |
画像プロパティの検出 | 画像の一連のプロパティ(画像のドミナント カラーなど)を検出 |
ウェブ検出 | 画像内のニュース、イベント、有名人などの時事的なエンティティを検出し、Google画像検索の機能を使用してウェブ上で同様の画像を検索 |
クロップヒントの検出 | 画像上のクロップ領域の推奨頂点を調べる |
複数のオブジェクトの検出[ベータ版] | 画像に含まれている複数のオブジェクトを検出し、抽出 |
今回はこの中から、「ラベル検出」「テキスト検出」「ランドマーク検出」を試してみたいと思います。
事前準備
Cloud Vision API
はGCPのサービスなので、事前に下記手順が必要です。
- GCPのプロジェクト作成
- プロジェクトに対して課金を有効にする
- Cloud Vision API を有効にする
- サービスアカウントの作成・使用
こちらの詳細は公式を参照ください。
Vision API を有効にする
Cloud Vision API に対する認証
ラベル検出
まずはラベル検出。下記のコードで、画像から乗り物や動物などさまざまなラベルを検出できます。
import io
from google.cloud import vision
client = vision.ImageAnnotatorClient()
with io.open('path/to/image', 'rb') as image_file:
content = image_file.read()
image = vision.types.Image(content=content)
response = client.label_detection(image=image)
labels = response.label_annotations
for label in labels:
print(label.description)
信頼度が高い順にラベルが並べられますが、モチーフがはっきりとした画像なら精度はかなり良さそうです。
テキスト検出
次にテキスト検出。画像から文字列全体、個々の単語、それらの境界ボックスを検出できます。
ちなみにコードの上半分は先程のラベル検出と一緒です。
import io
from google.cloud import vision
client = vision.ImageAnnotatorClient()
with io.open('path/to/image', 'rb') as image_file:
content = image_file.read()
image = vision.types.Image(content=content)
response = client.text_detection(image=image)
texts = response.text_annotations
for text in texts:
print('\n"{}"'.format(text.description))
vertices = (['({},{})'.format(vertex.x, vertex.y)
for vertex in text.bounding_poly.vertices])
print('bounds: {}'.format(','.join(vertices)))
こちらも斜め向いた文字や、手書き文字を含んでいるのに見事に文字を検出できました。
ランドマーク検出
最後にランドマーク検出。画像からランドマークの名前と場所を検出できます。
こちらもコードの上半分はラベル検出・テキスト検出と一緒です。
import io
from google.cloud import vision
client = vision.ImageAnnotatorClient()
with io.open('path/to/image', 'rb') as image_file:
content = image_file.read()
image = vision.types.Image(content=content)
response = client.landmark_detection(image=image)
landmarks = response.landmark_annotations
for landmark in landmarks:
print(landmark.description)
for location in landmark.locations:
lat_lng = location.lat_lng
print('Latitude {}'.format(lat_lng.latitude))
print('Longitude {}'.format(lat_lng.longitude))
画像 | ランドマークの名前と場所 |
---|---|
Arc de Triomphe Latitude 48.873667 Longitude 2.295134 |
|
Sagrada Familia ("Expiatory Temple of the Holy Family") Latitude 41.403579 Longitude 2.174242 |
|
1つ目の「凱旋門」、2つ目の「サグラダ・ファミリア」はバッチリ検出できました。
3つ目は判別できなかったのか、レスポンスが空でした。
ドバイにある世界一高いビル「ブルジュ・ハリファ」でしたが、写真がわかりづらかったのかもですね...
感想
コード自体はほぼサンプルの流用でしたが、当初思ってた以上にお手軽に試せました。
Googleが事前に学習したモデルを使えるというのも、本当にありがたいです。
他にも面白そうな機能が有ったので、また別の機会に試してみたいと思います!