返回信息流各位大大好,有一个小问题想问问各位有什么想法、方案或者案例。
#### 算是已经解决了,使用了很污的办法
使用的方法大概是:
* 在发端 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;
...
};
```
不过这样肯定是最麻烦的,所以动手之前想先来看看有没有大大做过或见过这样的事情。
这是一条镜像帖。来源:北邮人论坛 / cpp / #92272同步于 2016/6/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[算是解决了]图像网络传输的问题
restrest
2016/6/22镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
算是准实时的,没有及时传完或丢帧不会产生不可恢复的影响
当然还是希望尽量能没传完或者丢帧尽量少,在不加差错控制的情况下,我只想到通过压缩来减少丢帧等情况
【 在 nuanyangyang 的大作中提到: 】
: 是实时的吗?如果有几帧没及时传完,或者丢掉几帧,后果会怎么样?
【 在 restrest 的大作中提到: 】
: 算是准实时的,没有及时传完或丢帧不会产生不可恢复的影响
: 当然还是希望尽量能没传完或者丢帧尽量少,在不加差错控制的情况下,我只想到通过压缩来减少丢帧等情况
总觉得不需要重新发明协议。试试HTTP?
C++ 下有啥靠谱好用的轻量级http库么,目前用的是libevent
【 在 nuanyangyang 的大作中提到: 】
:
: 总觉得不需要重新发明协议。试试HTTP?
【 在 cyf333333 的大作中提到: 】
: C++ 下有啥靠谱好用的轻量级http库么,目前用的是libevent
我不是C++专家。但我想http这么有名的协议应该不缺库吧。
还是使用了 Python 大法了,详细情况贴在1楼
【 在 nuanyangyang 的大作中提到: 】
:
: 总觉得不需要重新发明协议。试试HTTP?
这里是不用自已做序列化的,因为两边都是用的cv::Mat且不存在大小端的问题。。主要考虑的压缩和编程的简单。。。
【 在 qyz0123321 的大作中提到: 】
: 可以试一下google的protobuf,能把对象进行序列化并使用tcp直接传输。。但感觉有现成比这个还现成的。。
【 在 restrest 的大作中提到: 】
: 这里是不用自已做序列化的,因为两边都是用的cv::Mat且不存在大小端的问题。。主要考虑的压缩和编程的简单。。。
:
soga,看来应用场景不一样