Как проверить Rekognition от AWS локально, не используя S3 при обнаружении текстов на изображениях - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь отсканировать тексты из изображений, но я не смог найти исходные коды без использования корзины S3.Это единственный исходный код, который я нашел, но он использует S3.Я использую python для этого проекта.

https://docs.aws.amazon.com/rekognition/latest/dg/text-detecting-text-procedure.html

import boto3

if __name__ == "__main__":

bucket='bucket'
photo='text.png'

client=boto3.client('rekognition')


response=client.detect_text(Image={'S3Object':{'Bucket':bucket,'Name':photo}})

textDetections=response['TextDetections']
print ('Detected text')
for text in textDetections:
        print ('Detected text:' + text['DetectedText'])
        print ('Confidence: ' + "{:.2f}".format(text['Confidence']) + "%")
        print ('Id: {}'.format(text['Id']))
        if 'ParentId' in text:
            print ('Parent Id: {}'.format(text['ParentId']))
        print ('Type:' + text['Type'])
        print

Нашел здесь Можно ли использовать Amazon Rekognition без корзины S3? и запустить его по-другомуиз того, что мне нужно, потому что он обнаруживает только этикетки.

1 Ответ

0 голосов
/ 13 февраля 2019

Метод DetectText в Rekognition API (для boto, detect_text) может принимать один из следующих параметров:

  • ссылка на изображение в корзине Amazon S3
  • байтов в кодировке base64

Так что, если вы не собираетесь использовать корзину S3, вы должны предоставить байтов .Третий способ не упоминается в документах .Структура ввода изображается следующим образом:

{
  "Image": { 
    "Bytes": blob,
    "S3Object": { 
      "Bucket": "string",
       "Name": "string",
       "Version": "string"
     }
  }
}

И, чтобы получить поток байтов изображения не-S3;Вы можете скопировать реализацию из этого ответа :

client = boto3.client('rekognition')

image_path='images/4.jpeg'
image = Image.open(image_path)

stream = io.BytesIO()
image.save(stream,format="JPEG")
image_binary = stream.getvalue()

response = client.detect_text(Image={'Bytes':image_binary})
...