BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #92272同步于 2016/6/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[算是解决了]图像网络传输的问题

restrest
2016/6/22镜像同步9 回复
各位大大好,有一个小问题想问问各位有什么想法、方案或者案例。 #### 算是已经解决了,使用了很污的办法 使用的方法大概是: * 在发端 C++ 程序中使用 OpenCV 的 imwrite 将图像存下来,并通过 MQ 通知 ```c++ std::vector<int> comp_params; comp_params.push_back(CV_IMWRITE_JPEG_QUALITY); comp_params.push_back(80); cv::imwrite("xxx.jpg", rgbbuf, comp_params); ``` * 使用 pycURL 将图片 POST 出去 * 在收端用 flask 服务器接收图片并使用 pexpect 直接操作 yolo,获得结果并返回 * 总的发送时间在 20ms 上下 (网线直连的两个主机,从得到 cv::Mat 到收端接收到图片,一个一般的3代i5笔记本),如果发端将图片存在 tmpfs 中应该会更快些,还没有试过。 如果有人对具体代码感兴趣可以和我说(万一有的话) -------- #### 需求: 通过网络(使用TCP,其他更高级的传输协议)将一个 [cv::Mat](http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat) 传输到另一个地方。其中: * 发送端的程序是用C++写的,接收端是C程序。 * 只需要单向的传输,不需要差错控制。 * 每秒钟需要传5张左右,分辨率为640x480(24bit颜色),网络带宽用iperf测试,为40Mbps左右。如果能有压缩就更好了,没有也没关系(因为发送端是Wi-Fi接入的)。_更新 偶遇热心老司机,他告诉我OpenCV有一些内置的压缩功能,有压缩到文件或in-memory的,可以选择JPEG或PNG和一写压缩配置_ #### 背景: 我是想把嵌入式设备上采集的图片送到服务器上做图像内容识别,具体来说是要用[yolo](http://pjreddie.com/darknet/yolo/)。 #### 目前的情况: 还没有做,目前的想法是直接TCP传 cv::Mat 中的 data 域, ```c class CV_EXPORTS Mat { public: ... //! pointer to the data uchar* data; ... }; ``` 不过这样肯定是最麻烦的,所以动手之前想先来看看有没有大大做过或见过这样的事情。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
nuanyangyang机器人#1 · 2016/6/22
是实时的吗?如果有几帧没及时传完,或者丢掉几帧,后果会怎么样?
restrest机器人#2 · 2016/6/22
算是准实时的,没有及时传完或丢帧不会产生不可恢复的影响 当然还是希望尽量能没传完或者丢帧尽量少,在不加差错控制的情况下,我只想到通过压缩来减少丢帧等情况 【 在 nuanyangyang 的大作中提到: 】 : 是实时的吗?如果有几帧没及时传完,或者丢掉几帧,后果会怎么样?
nuanyangyang机器人#3 · 2016/6/22
【 在 restrest 的大作中提到: 】 : 算是准实时的,没有及时传完或丢帧不会产生不可恢复的影响 : 当然还是希望尽量能没传完或者丢帧尽量少,在不加差错控制的情况下,我只想到通过压缩来减少丢帧等情况 总觉得不需要重新发明协议。试试HTTP?
cyf333333机器人#4 · 2016/6/23
C++ 下有啥靠谱好用的轻量级http库么,目前用的是libevent 【 在 nuanyangyang 的大作中提到: 】 : : 总觉得不需要重新发明协议。试试HTTP?
nuanyangyang机器人#5 · 2016/6/23
【 在 cyf333333 的大作中提到: 】 : C++ 下有啥靠谱好用的轻量级http库么,目前用的是libevent 我不是C++专家。但我想http这么有名的协议应该不缺库吧。
qyz0123321机器人#6 · 2016/6/23
可以试一下google的protobuf,能把对象进行序列化并使用tcp直接传输。。但感觉有现成比这个还现成的。。
restrest机器人#7 · 2016/6/27
还是使用了 Python 大法了,详细情况贴在1楼 【 在 nuanyangyang 的大作中提到: 】 : : 总觉得不需要重新发明协议。试试HTTP?
restrest机器人#8 · 2016/6/27
这里是不用自已做序列化的,因为两边都是用的cv::Mat且不存在大小端的问题。。主要考虑的压缩和编程的简单。。。 【 在 qyz0123321 的大作中提到: 】 : 可以试一下google的protobuf,能把对象进行序列化并使用tcp直接传输。。但感觉有现成比这个还现成的。。
qyz0123321机器人#9 · 2016/6/28
【 在 restrest 的大作中提到: 】 : 这里是不用自已做序列化的,因为两边都是用的cv::Mat且不存在大小端的问题。。主要考虑的压缩和编程的简单。。。 : soga,看来应用场景不一样