AWS: запуск Rekognition на устройстве DeepLens

Я создаю проект DeepLens для распознавания людей, когда камера сканирует одну из выбранных групп людей.

В проекте используется лямбда, которая обрабатывает изображения и запускает aws api 'rekognition'.

На лямбда-консоли AWS (с версией 1.8.9 boto) возникает следующая проблема при попытке вызвать API-интерфейс Python AWS:

Примечание: img_str является байтовым массивом

img_str = cv2.imencode('.jpg', frame)[1].tostring()
image = { 'Bytes': img_str }
response = rekognition.search_faces_by_image(CollectionId = 'TestingCollection', Image = { "Bytes" : image } )

Первая ошибка: аргумент sendall() 1 должен быть строкой или буфером, а не dict

Причина в моем понимании: { "Bytes": image } - это Json, а НЕ строка

Мое решение: сделать json строкой (не уверен, смогу ли я объединить img_str (байтовый массив)

image = '{ "Bytes" :' + img_str + '}'
response = rekognition.search_faces_by_image(CollectionId = 'TestingCollection', Image = { "Bytes" : image } )

Теперь ошибка: Ошибка в обнаружении лица лямбда: кодек 'ascii' не может декодировать байт 0xff в позиции 52: порядковый номер не в диапазоне (128)

Вопрос Как объединить байтовый массив (img_str) со строками без потери массива?

Могу ли я преобразовать переменную изображения в строку БЕЗ получения исключения невозможности декодирования байта 0xff? или же

Можем ли мы сделать что-то еще, чтобы преодолеть эту проблему?

Заранее спасибо ребята!!

1 ответ

Я сделал нечто подобное, и этот кусок кода работал для меня:

    # img is an image object (numpy array)
    success, img = cv2.imencode('.jpg', img)
    image= img.tobytes()
    response=client.search_faces_by_image(CollectionId='TestingCollection',
                                        Image={'Bytes':image})
Другие вопросы по тегам