2017-07-18 2 views
2

Da Google Vision einige restrictions auf Eingabebildgröße hat, möchte ich zunächst Bildgröße ändern und dann die detect_labels() Funktion verwenden.Python Bildgröße ändern und an Google Vision-Funktion senden

Hier ist ihre sample code

def detect_labels(path): 
"""Detects labels in the file.""" 
vision_client = vision.Client() 

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

image = vision_client.image(content=content) 

labels = image.detect_labels() 
print('Labels:') 

for label in labels: 
    print(label.description) 

sie io verwenden, um die Bilddatei zu öffnen. Ich wundere mich auf diese Weise, wie das Bild im Speicher Größe ändern und dann detect_labels() anrufen?

+0

wirft der Kunde jede Ausnahme, wenn Sie es passieren ein übergroßes Bild? – kristaps

+0

Ja, es sagt Bild ist zu groß: 'google.gax.errors.RetryError: GaxError (Ausnahme aufgetreten in Wiederholungsmethode, die nicht als vorübergehend eingestuft wurde, verursacht durch <_Rendezvous von RPC, die mit (StatusCode.INVALID_ARGUMENT, Einige Bild ist zu groß)>) ' – user21

Antwort

1

Sie können die Größe des Bildes über PIL/Kissen und es dann an den Client übergeben:

ersetzen

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

mit

# Warning: untested code, may require some fiddling 
import Image, StringIO 

img = Image.open(path) 
img.thumbnail((512, 512)) 
buffer = StringIO.StringIO() 
img.save(buffer, "PNG") 

content = buffer.getvalue() 
+0

Gibt es eine Möglichkeit, eine Obergrenze für die Größenänderung festzulegen (siehe https://stackoverflow.com/questions/45322213/python-set-maximum-file-size-when-converting-pdf- to-jpeg-using-zB-Zauberstab)? – jtlz2