AWS: запуск Rekognition на устройстве DeepLens - PullRequest
0 голосов
/ 12 декабря 2018

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

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

На лямбда-консоли 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) со строками, не теряя при этомray?

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

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

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

1 Ответ

0 голосов
/ 27 января 2019

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

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