Как преобразовать локальный файл.JPG в Base64 для работы с Boto3 и Detect_Text?
Соответствующий код:
import boto3
from PIL import Image
import base64
client = boto3.client('rekognition')
filename = r'C:\Users\H-63\Pictures\scantests\Rekognition test.JPG'
with open(filename, 'rb') as image_file:
image = image_file.read()
image = base64.b64encode(image).decode('UTF-8')
response = client.detect_text(
Image={'Bytes': image
})
Однако, когда я запускаю это, я получаю сообщение об ошибке:
An error occurred (InvalidImageFormatException) when calling the DetectText operation: Request has Invalid image format
Как сделать так, чтобы мое изображение было подходящим форматом для Detect_text? В документации сказано, что это должна быть кодировка base64.
2 ответа
Я не уверен, почему в документации даже упоминается base64, но функция требует байтов. Так что просто используйте:
with open(filename, 'rb') as image_file:
image = image_file.read()
client.detect_text(Image={'Bytes': image})
Вы можете просто использовать байты возврата read () https://docs.aws.amazon.com/rekognition/latest/dg/images-bytes.html
#Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.)
import boto3
if __name__ == "__main__":
imageFile='input.jpg'
client=boto3.client('rekognition')
with open(imageFile, 'rb') as image:
response = client.detect_labels(Image={'Bytes': image.read()})
print('Detected labels in ' + imageFile)
for label in response['Labels']:
print (label['Name'] + ' : ' + str(label['Confidence']))
print('Done...')
[1]: https://docs.aws.amazon.com/rekognition/latest/dg/images-bytes.html
Чтобы работать с AWS boto3 с механизмом rekognition, просто прочитайте файл изображения и передайте его сервисной функции AWS, которая даст вам ответ. Вот код, и это работает для меня с boto3.
import boto3
import base64
client = boto3.client('rekognition')
def processor(file):
data_str = reader(file)
response = client.detect_text(Image={'Bytes': data_str })
print(response)
def reader(file):
with open(file, "rb") as image_file:
encoded_string = image_file.read()
return encoded_string
processor(path of your image file)