Как преобразовать локальный файл.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)
Другие вопросы по тегам