【发布时间】:2021-05-30 10:16:09
【问题描述】:
我正在从网络摄像头捕获图像,并使用 AWS IoT Device Python SDK 将这些图像作为 numpy 数组发送到 AWS IoT Core。在 AWS IoT Core,这个 numpy 数组被传输到 lamda 函数进行图像处理(通过 RESNET 模型)。
但是 numpy 数组的大小太大而无法通过 MQTT 发送,这就是 AWS IoT Core 没有接收到它的原因。
所以我的问题是:
- 有没有办法增加 SDK 中的 MQTT TX 缓冲区大小?我找不到。
- 如果不是,那么通过 MQTT 发送大型 numpy 数组并接收它的最佳方法是什么?
发布代码:
cam = cv2.VideoCapture(0)
ret, frame = cam.read()
message['image'] = frame.tolist() #numpy array converted to list to make it work with json.dumps
messageJson = json.dumps(message)
myAWSIoTMQTTClient.publish(topic, messageJson, 0)
帧 numpy 数组:
[0:480] :[array([[156, 168, 20...ype=uint8), array([[155, 167, 20...ype=uint8), array([[144, 168, 20...ype=uint8), array([[144, 168, 20...ype=uint8), array([[138, 168, 20...ype=uint8), array([[138, 168, 20...ype=uint8), array([[149, 170, 20...ype=uint8), array([[151, 172, 20...ype=uint8), array([[156, 174, 20...ype=uint8), array([[156, 174, 20...ype=uint8), array([[153, 174, 20...ype=uint8), array([[152, 173, 20...ype=uint8), array([[153, 172, 20...ype=uint8), array([[154, 173, 20...ype=uint8), ...]
dtype:dtype('uint8')
max:222
min:0
shape:(480, 640, 3)
size:921600
【问题讨论】:
-
阵列有多大? MQTT 的最大有效负载大小为 256mb,AWS 的限制可能更小
-
我已经添加了有问题的数组信息
-
是的,但是转换成 JSON 后有多大?我们已经是 5mb 纯粹作为原始字节,将其转换为 JSON 表示可以轻松增加一个或多个数量级。
-
您能否利用 JPEG 压缩并发送 JPEG 图像并将其重新膨胀到接收端的 Numpy 数组?这可能是大小的 1/10 或更少。或者你可以使用一半大小的 YUV 吗?
标签: python-3.x amazon-web-services image-processing mqtt aws-iot