Google cloud vision api :: AttributeError: у объекта 'WebDetection' нет атрибута 'best_guess_labels' - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь вызвать функцию «обнаружение сети» из Google Cloud Vision API с помощью python. Однако я не могу вызвать один из его методов с именем "best_guess_labels". Когда я пытался вызвать метод, он выдает ошибку как «AttributeError: у объекта« WebDetection »нет атрибута« best_guess_labels »:

WebDetection - это json-файл, созданный по этой ссылке и сохраненный в локальной папке ==> https://cloud.google.com/docs/authentication/getting-started

import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="WebDetection.json"

Функция "обнаружение сети" взята по этой ссылке -> https://cloud.google.com/vision/docs/detecting-web

Вот функция, скопированная из вышеуказанной ссылки, для вашей справки.

def detect_web(path):
    """Detects web annotations given an image."""
    client = vision.ImageAnnotatorClient()

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

image = vision.types.Image(content=content)

response = client.web_detection(image=image)
annotations = response.web_detection

if annotations.best_guess_labels:
    for label in annotations.best_guess_labels:
        print('\nBest guess label: {}'.format(label.label))

if annotations.pages_with_matching_images:
    print('\n{} Pages with matching images found:'.format(
        len(annotations.pages_with_matching_images)))

    for page in annotations.pages_with_matching_images:
        print('\n\tPage url   : {}'.format(page.url))

        if page.full_matching_images:
            print('\t{} Full Matches found: '.format(
                   len(page.full_matching_images)))

            for image in page.full_matching_images:
                print('\t\tImage url  : {}'.format(image.url))

        if page.partial_matching_images:
            print('\t{} Partial Matches found: '.format(
                   len(page.partial_matching_images)))

            for image in page.partial_matching_images:
                print('\t\tImage url  : {}'.format(image.url))

if annotations.web_entities:
    print('\n{} Web entities found: '.format(
        len(annotations.web_entities)))

    for entity in annotations.web_entities:
        print('\n\tScore      : {}'.format(entity.score))
        print(u'\tDescription: {}'.format(entity.description))

if annotations.visually_similar_images:
    print('\n{} visually similar images found:\n'.format(
        len(annotations.visually_similar_images)))

    for image in annotations.visually_similar_images:
        print('\tImage url    : {}'.format(image.url))

Однако, когда я выполняю вышеуказанную функцию, используя этот код

detect_web("download.jpg")

Я получаю сообщение об ошибке ниже:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-71-6d38dd9b3a76> in <module>()
----> 1 detect_web("download.jpg")

<ipython-input-70-c127dc709a32> in detect_web(path)
     13     annotations = response.web_detection
     14 
---> 15     if annotations.best_guess_labels:
     16         for label in annotations.best_guess_labels:
     17             print('\nBest guess label: {}'.format(label.label))

AttributeError: 'WebDetection' object has no attribute 'best_guess_labels'

Я попытался отладить и обнаружил, что "best_guess_labels" не является частью файла Json. Я не уверен, что файл json был поврежден, но я попытался повторить упражнение, но я все еще получаю ту же ошибку.

Что могло быть причиной проблемы?

1 Ответ

0 голосов
/ 12 октября 2018

Я использовал google-cloud-vision==0.34.0 со следующим кодом, и я также не получил ошибок, я получаю Best guess label: document в ответе:

import argparse
import io
import re
from google.cloud import vision
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="file.json"

def detect_web(path):
    """Detects web annotations given an image."""
    client = vision.ImageAnnotatorClient()

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

    image = vision.types.Image(content=content)

    response = client.web_detection(image=image)
    annotations = response.web_detection

    if annotations.best_guess_labels:
        for label in annotations.best_guess_labels:
            print('\nBest guess label: {}'.format(label.label))

    if annotations.pages_with_matching_images:
        print('\n{} Pages with matching images found:'.format(
            len(annotations.pages_with_matching_images)))

    for page in annotations.pages_with_matching_images:
        print('\n\tPage url   : {}'.format(page.url))

        if page.full_matching_images:
            print('\t{} Full Matches found: '.format(
                   len(page.full_matching_images)))

            for image in page.full_matching_images:
                print('\t\tImage url  : {}'.format(image.url))

        if page.partial_matching_images:
            print('\t{} Partial Matches found: '.format(
                   len(page.partial_matching_images)))

            for image in page.partial_matching_images:
                print('\t\tImage url  : {}'.format(image.url))
if __name__ == '__main__':
    detect_web("file.jpg")
...