Я пытаюсь распечатать результаты вызова Amazon Rekognition, но он возвращает ошибку:
list index out of range: IndexError
Traceback (most recent call last): File "/var/task/lambda_function.py", line 57, in lambda_handler
time = response['Persons'][0]['Timestamp']
IndexError: list index out of range
Я поставил индекс [0], я действительно не понимаю, почему это произойдет за пределами диапазона индекса.
Кто-нибудь может помочь?
response = get_face_search(jobID)
time = response['Persons'][0]['Timestamp']
print(time)
#below is the format:
--------------------------------------------
{
'JobStatus': 'IN_PROGRESS'|'SUCCEEDED'|'FAILED',
'StatusMessage': 'string',
'NextToken': 'string',
'VideoMetadata': {
'Codec': 'string',
'DurationMillis': 123,
'Format': 'string',
'FrameRate': ...,
'FrameHeight': 123,
'FrameWidth': 123
},
'Persons': [
{
'Timestamp': 123,
'Person': {
'Index': 123,
'BoundingBox': {
'Width': ...,
'Height': ...,
'Left': ...,
'Top': ...
},
'Face': {
'BoundingBox': {
'Width': ...,
'Height': ...,
'Left': ...,
'Top': ...
},
'AgeRange': {
'Low': 123,
'High': 123
},
'Smile': {
'Value': True|False,
'Confidence': ...
},
],
'Pose': {
'Roll': ...,
'Yaw': ...,
'Pitch': ...
},
'Quality': {
'Brightness': ...,
'Sharpness': ...
},
'Confidence': ...
}
},
'FaceMatches': [
{
'Similarity': ...,
'Face': {
'FaceId': 'string',
'BoundingBox': {
'Width': ...,
'Height': ...,
'Left': ...,
'Top': ...
},
'ImageId': 'string',
'ExternalImageId': 'string',
'Confidence': ...
}
},
]
},
]
}






Ваш код в порядке. Проблема в том, что ваш объект response не содержит ожидаемых данных.
boto3 требует, чтобы все входные параметры были ключевыми словами, поэтому:
response = get_face_search(jobID)
должно быть:
response = get_face_search(JobId = jobID)
Пример сценария Python, который обрабатывает результаты get_face_search(), см .: Автоматическое редактирование видео с ВАМИ в качестве звезды! | Блог по машинному обучению AWS
Привет, спасибо за ответ. Думаю, я нашел проблему. то есть поиск по лицу фактически занимает несколько секунд, чтобы выдать результат, во время выполнения он будет показывать статус, например «успешно», «выполняется», «не удалось», каждый раз, когда обработчик пытается распечатать результат, get_face_search получить возвращаемое значение с помощью Persons [] и 'jobstatus' = 'in_progress', я думаю написать цикл, чтобы продолжать чтение jobstatus до тех пор, пока он не будет == успешно.
Да, ты можешь это сделать. Официально Rekognition отправляет сообщение в тему SNS, которое можно использовать для запуска получения результатов. В противном случае будет достаточно опроса ответа каждые несколько секунд.
Привет, спасибо за ваше предложение, я пытаюсь использовать тему SNS, просто интересно, как функция get_face_search () в другой лямбде собирает получить идентификатор задания, сгенерированный из start_face_search ()? Большое спасибо
От Вызов операций с видео Rekognition: Rekognition Video отправляет уведомление о завершении анализа в зарегистрированную тему Amazon SNS. Уведомление включает идентификатор задания и статус завершения операции в строке JSON.
Вы показали нам (ожидаемый?) Формат ответа, но как насчет сброса структур ответа действительный? Что делать, если элементов
Personsнет?