问题
Since google vision has some restrictions on input image size, I want to first resize input image and then use the detect_labels()
function.
Here's their 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)
they use io
to open the image file. I wonder in this way, how to resize the image in memory and then call detect_labels()
?
回答1:
You can resize the image via PIL/Pillow and then pass it to the client:
replace
with io.open(path, 'rb') as image_file:
content = image_file.read()
with
# 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()
回答2:
Code for python3:
Credits : @kristaps
import io
from PIL import Image
img = Image.open(path)
img.thumbnail((512, 512))
buffer = io.BytesIO()
img.save(buffer, "JPEG")
content = buffer.getvalue()
来源:https://stackoverflow.com/questions/45176829/python-resize-image-and-send-to-google-vision-function