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})