Локальное использование Text для OCR

Я хочу извлечь текст из изображений с помощью Python. (Tessaract lib у меня не работает, потому что требует установки).

Я нашел boto3 lib и Textract, но у меня возникли проблемы с работой с ними. Я все еще новичок в этом. Можете ли вы сказать мне, что мне нужно сделать, чтобы правильно запустить мой скрипт.

Это мой код:

import cv2
import boto3
import textract


#img = cv2.imread('slika2.jpg') #this is jpg file
with open('slika2.pdf', 'rb') as document:
    img = bytearray(document.read())

textract = boto3.client('textract',region_name='us-west-2')

response = textract.detect_document_text(Document={'Bytes': img}). #gives me error
print(response)

Когда я запускаю этот код, я получаю:

botocore.exceptions.ClientError: An error occurred (InvalidSignatureException) when calling the DetectDocumentText operation: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

Я также пробовал это:

# Document
documentName = "slika2.jpg"

# Read document content
with open(documentName, 'rb') as document:
    imageBytes = bytearray(document.read())

# Amazon Textract client
textract = boto3.client('textract',region_name='us-west-2')

# Call Amazon Textract
response = textract.detect_document_text(Document={'Bytes': imageBytes}) #ERROR

#print(response)

# Print detected text
for item in response["Blocks"]:
    if item["BlockType"] == "LINE":
        print ('\033[94m' +  item["Text"] + '\033[0m')

Но я получаю эту ошибку:

botocore.exceptions.ClientError: An error occurred (InvalidSignatureException) when calling the DetectDocumentText operation: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

Я нуб в этом, так что любая помощь будет хорошо. Как я могу прочитать текст из моего изображения или файла PDF?

Я также добавил этот блок кода, но ошибка по-прежнему Unable to locate credentials.

session = boto3.Session(
    aws_access_key_id='xxxxxxxxxxxx',
    aws_secret_access_key='yyyyyyyyyyyyyyyyyyyyy'
)

person taga    schedule 24.09.2020    source источник
comment
stackoverflow.com/questions/33297172/ см. это может вам помочь. Как я вижу, вы не установили профиль AWS.   -  person aviboy2006    schedule 24.09.2020
comment
Любая помощь в этом: stackoverflow.com/questions /64101224/   -  person taga    schedule 28.09.2020
comment
@ aviboy2006 Можете ли вы сказать мне, что я должен добавить в свой код при настройке профиля AWS?   -  person taga    schedule 01.10.2020
comment
Если вы установили профиль, проверьте мой первый ответ.   -  person aviboy2006    schedule 01.10.2020
comment
@ aviboy2006 Извините, но это мне не поможет. Я все еще изучаю aws и texttract. Я хочу иметь возможность читать текст из pdf или изображения. У меня есть код, который я написал выше, поэтому, если можете, скажите мне, что именно мне нужно сделать, что я должен добавить в свой код, что я должен удалить и т. д.   -  person taga    schedule 01.10.2020
comment
Пожалуй, начнем с самого начала. У вас есть аккаунт AWS? Если да, то как получить к нему доступ? Настроили ли вы AWS CLI, как показано здесь ? У вас есть программные ключи для доступа к вашей учетной записи?   -  person Marcin    schedule 04.10.2020
comment
Да, я установил awscli на свой mac, я установил свой регион, ключ доступа и секретный ключ доступа, но когда я запускаю программу, я получаю сообщение об ошибке, что мои ключи недействительны   -  person taga    schedule 06.10.2020


Ответы (1)


Возникла проблема с передачей учетных данных в boto3. Вы должны передать учетные данные при создании клиента boto3.

import boto3

# boto3 client
client = boto3.client(
    'textract', 
    region_name='us-west-2', 
    aws_access_key_id='xxxxxxx', 
    aws_secret_access_key='xxxxxxx'
)

# Read image
with open('slika2.png', 'rb') as document:
    img = bytearray(document.read())

# Call Amazon Textract
response = client.detect_document_text(
    Document={'Bytes': img}
)

# Print detected text
for item in response["Blocks"]:
    if item["BlockType"] == "LINE":
        print ('\033[94m' +  item["Text"] + '\033[0m')

Обратите внимание, что не рекомендуется жестко кодировать ключи AWS в коде. Пожалуйста, обратитесь к следующему документу

https://boto3.amazonaws.com/v1/documentation/api/1.9.42/guide/configuration.html

person Vipin Kumar    schedule 08.10.2020
comment
Я не проверял для pdf, пожалуйста, попробуйте и дайте мне знать, если есть какие-либо проблемы. :) - person Vipin Kumar; 09.10.2020
comment
Выдает ошибку, я не знаю, смогу ли я сделать это без ведра s3 - person taga; 09.10.2020
comment
пожалуйста, проверьте этот вопрос 64261011/ - person taga; 09.10.2020
comment
Да, ты прав. Для PDF вы используете асинхронный метод с использованием S3. Обходной путь может состоять в том, чтобы преобразовать pdf в изображения, а затем использовать texttract. Дайте мне знать, если вам нужен пример для этого. - person Vipin Kumar; 10.10.2020