AWS:在DeepLens设备上运行识别

时间:2018-12-12 13:47:40

标签: python aws-lambda boto3 amazon-rekognition amazon-deeplens

我正在创建一个DeepLens项目,以在照相机扫描特定人群中的一个时识别人。

该项目使用一个lambda,该lambda处理图像并触发“ rekognition” aws api。

在AWS Lambda控制台(具有1.8.9 boto版本)上,当我尝试调用AWS python API时遇到以下问题:

注意: 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必须是字符串或缓冲区,而不是字典

我理解的原因:{“字节”:图片}是Json而不是字符串

我的解决方案:将json设置为字符串(不确定是否可以连接img_str(字节数组)

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

现在错误:人脸检测lambda错误:“ ascii”编解码器无法解码位置52的字节0xff:序数不在范围(128)中

问题 如何在不丢失数组的情况下将字节数组(img_str)与字符串连接起来?

我可以将 image 变量转换为字符串而没有导致无法解码字节0xff 异常吗?或

我们还能做些其他事情来解决这个问题吗?

预先感谢大家!

1 个答案:

答案 0 :(得分: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})