2017-06-16 1 views
0

J'essaie d'implémenter la fonctionnalité detect_logos sur ma machine locale dans Python 2.7.API Google Cloud Vision: Détecter les logos TypeError

J'ai une fonction qui était à l'origine le fichier label.py de Google qui est donné en here.

J'ai finalement édité la fonction principale et elle appelle detect_logos() après cracher quelques étiquettes. Je cours maintenant dans l'erreur suivante dans le detect_logos (chemin) fonction à la ligne "logos = image.detect_logos()".

TypeError: construct_settings() a obtenu un argument mot-clé inattendu 'metrics_headers de

Cette erreur provient apparemment du fichier immage_annotator_client.py dans le api de vision. J'ai dû louper quelque chose.

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) 

J'ai fais "set GOOGLE_APPLICATION_CREDENTIALS =/bla/bla/serviceaccountkey.json"

Répondre

0

Vous pouvez essayer d'utiliser la bibliothèque cliente google.cloud pour l'API Vision à la place.

Découvrez the label detection demo qui fait ce que je pense que vous essayez de faire:

>>> 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: Ne pas oublier the authentication step! Vous devez utiliser un compte de service avec Cloud Vision (le vieux gcloud auth login ne fonctionnera pas).