Google Cloud Vision API:检测徽标TypeError

时间:2017-06-16 10:29:09

标签: python google-cloud-vision

我正在尝试在Python 2.7中的本地计算机上实现detect_logos功能。

我的功能最初是Google的label.py文件,在here中提供。

我最终编辑了main函数,并在吐出一些标签后调用了detect_logos()。我现在遇到 detect_logos(路径)功能中的以下错误,该行位于 logos = image.detect_logos()“。

TypeError:construct_settings()得到意外的关键字参数'metrics_headers'

此错误显然源于vision api中的immage_annotator_client.py文件。我一定错过了什么。

def detectLabelsLogos(photo_file):

    #configurable options: FREE TO CHANGE
    resizedFileName = 'clone.jpeg'  #name of resized files (are deleted at the end)
    labelCount = 5                  #max number of labels 

    #nonconfigurable options: DO NOT TOUCH
    resized = False
    filename = photo_file
    service = googleapiclient.discovery.build('vision', 'v1')

    #initial size check
    imgSizeInBytes = os.stat(photo_file).st_size

    if imgSizeInBytes >= MAX_IMAGE_SIZE_IN_BYTES:
        print "\n[Image too large...resizing...]"
        resized = True
        filename = resizedFileName

        with Image.open(photo_file) as image:
            newimg = resizeimage.resize_thumbnail(image, [1600, 800])
            newimg.save(filename, image.format)
            newimg.close()

    imgSizeInBytes = os.stat(filename).st_size

    #ensure file is not empty
    if imgSizeInBytes > 0:
        # [START construct_request]
        with open(filename, 'rb') as image:
            image_content = base64.b64encode(image.read())
            service_request = service.images().annotate(body={
                'requests': [{
                    'image': {
                        'content': image_content.decode('UTF-8')
                    },
                    'features': [{
                        'type': 'LABEL_DETECTION',
                        'maxResults': labelCount
                    }]
                }]
            })
        # [END construct_request]

            # [START parse_response]
            response = service_request.execute()

            detect_logos(filename);

            for i in range(0, labelCount):
                if i >= len(response['responses'][0]['labelAnnotations']):
                    print "\n[Exhausted Responses]"
                    break
                label = response['responses'][0]['labelAnnotations'][i]['description']
                print('\nFound label: %s' % (label))
            # [END parse_response]

            image.close()

        #delete resized file
        if resized:
            os.remove(filename)   
else:
    print "[Invalid File Input: Empty File]"

print "\n"

def detect_logos(path):
    """Detects logos in the file."""

    vision_client = vision.Client()
    print vision_client

    with io.open(path, 'rb') as image_file:
        content = image_file.read()

    image = vision_client.image(content=content)

    logos = image.detect_logos()
    print('\nLogos:')

    for logo in logos:
        print(logo.description)

我一直在做“设置GOOGLE_APPLICATION_CREDENTIALS = / blah / blah / serviceaccountkey.json”

1 个答案:

答案 0 :(得分:0)

您可能希望尝试使用Vision API的google.cloud客户端库。

查看我正在尝试做的想法

the label detection demo

>>> from google.cloud import vision
>>> client = vision.Client()
>>> image = client.image(source_uri='gs://my-storage-bucket/image.jpg')
>>> labels = image.detect_labels(limit=3)
>>> labels[0].description
'automobile'
>>> labels[0].score
0.9863683

PS:别忘了the authentication step!您需要在Cloud Vision中使用服务帐户(旧的gcloud auth login将无效)。