botocore.errorfactory.InvalidS3ObjectException: - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь запустить несколько изображений через систему AWS, используя код Python, просто базовый цикл for.Когда я запускаю код, я получаю сообщение об ошибке.Я могу запустить одно изображение, но как только я пытаюсь запустить несколько изображений, я снова получаю код ошибки.

import boto3

if __name__ == "__main__":

bucket='fastlane'
photo=','.join(('test.png',
'test2.png',
'test3.png',
'test4.png',
'test5.png',
'test6.png',
'test7.png',
'test8.png',
'test9.png',
'test10.png',
'test11.png',
'test12.png',
'test13.png',
'test14.png',
'test15.png',
'test16.png',
'test17.png',
'test18.png'))




client=boto3.client('rekognition')


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


textDetections=response['TextDetections']
print (response)
print ('Matching faces')
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

Код ошибки: обратная связь (последний вызов был последним): файл "main.py", строка37, в ответе = client.detect_text (Image = {'S3Object': {'Bucket': bucket, 'Name': photo}}) Файл "/home/Zeus/farcry/AWS/env/lib/python3.5/site-packages / botocore / client.py ", строка 320, в _api_call возвращает self._make_api_call (имя_операции, kwargs) Файл" /home/Zeus/farcry/AWS/env/lib/python3.5/site-packages/botocore/client.py ", строка 624, в _make_api_call вызывает error_class (parsed_response, operation_name) botocore.errorfactory.InvalidS3ObjectException: произошла ошибка (InvalidS3ObjectException) при вызове операции DetectText: невозможно получить метаданные объекта из S3.Проверьте ключ объекта, регион и / или права доступа.

1 Ответ

0 голосов
/ 29 ноября 2018

Вы объединяете все имена в одну большую строку и передаете это как имя объекта, который не будет работать, если ваш объект s3 не будет назван test1.png,test2.png, etc.

Из документов:

Имя (строка) - имя ключа объекта S3

Вам придется вызывать detect_text для каждой фотографии.

Вы можете сделать следующее:

import boto3

if __name__ == "__main__":

    bucket='fastlane'
    client=boto3.client('rekognition')
    photos= ['test.png',
    'test2.png',
    'test3.png',
    'test4.png',
    'test5.png',
    'test6.png',
    'test7.png',
    'test8.png',
    'test9.png',
    'test10.png',
    'test11.png',
    'test12.png',
    'test13.png',
    'test14.png',
    'test15.png',
    'test16.png',
    'test17.png',
    'test18.png']

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

        textDetections=response['TextDetections']
        print (response)
        print ('Matching faces')
        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'])
...