🎃
GCP vision AI で 'google.cloud.vision' has no attribute 'types'
概要
GCP の物体検出 API のチュートリアルを実行していたら,エラーが発生したので解決方法を執筆。
API の認証方法は省略。
使用言語は Python。
エラーについて
チュートリアルの以下のコードを実行すると,AttributeError が発生します。
下記コードはチュートリアルからコピー&ペーストしました。
def localize_objects(path):
from google。cloud import vision
client = vision.ImageAnnotatorClient()
with open(path, 'rb') as image_file:
content = image_file.read()
image = vision.types.Image(content=content)
objects = client.object_localization(
image=image).localized_object_annotations
print('Number of objects found: {}'.format(len(objects)))
for object_ in objects:
print('\n{} (confidence: {})'.format(object_.name, object_.score))
print('Normalized bounding polygon vertices: ')
for vertex in object_.bounding_poly.normalized_vertices:
print(' - ({}, {})'.format(vertex.x, vertex.y))
エラー内容は以下の通り。
7 行目で発生している。google.cloud.vision から types が削除されたらしいのでエラーが発生する。
AttributeError: module 'google.cloud.vision' has no attribute 'types'
解決策
vision から直接 Image を使えば OK です。
image = vision.types.Image(content=content) # エラー
image = vision.Image(content=content) # 解決
全体像は以下の通り,11 行目しか変更していないです。
"""Localize objects in the local image.
Args:
path: The path to the local file.
"""
from google.cloud import vision
client = vision.ImageAnnotatorClient()
with open(uri, 'rb') as image_file:
content = image_file.read()
image = vision.Image(content=content) # 変更箇所
objects = client.object_localization(
image=image).localized_object_annotations
print('Number of objects found: {}'.format(len(objects)))
for object_ in objects:
print('\n{} (confidence: {})'.format(object_.name, object_.score))
print('Normalized bounding polygon vertices: ')
for vertex in object_.bounding_poly.normalized_vertices:
print(' - ({}, {})'.format(vertex.x, vertex.y))
余談
公式チュートリアルって意外とバグがあったりしますよね。
あと,GCP の Image は Pillow の Image と被って若干使いづらいです。
参考
Discussion