🎃

GCP vision AI で 'google.cloud.vision' has no attribute 'types'

2021/10/30に公開

概要

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 と被って若干使いづらいです。

参考

https://cloud.google.com/vision/docs/object-localizer?hl=ja

Discussion