如何对静态图片流(video)进行动态编码,以便将这些从C#发送到Python?

我使用Kinect SDK( C# )从Kinect 2获得Depth和Color帧,然后使用ZeroMQ将它们发送给Python客户端。

 this.shorts = new ushort[ 217088]; // 512 * 424 this.depthBytes = new Byte[ 434176]; // 512 * 424 * 2 this.colorBytes = new Byte[4147200]; // 1920 * 1080 * 4 public void SendDepthFrame(DepthFrame depthFrame) { depthFrame.CopyFrameDataToArray(this.shorts); Buffer.BlockCopy(shorts, 0, this.depthBytes, 0, this.depthBytes.Length); this.depthPublisher.SendByteArray(this.depthBytes); } public void SendColorFrame(ColorFrame colorFrame, WriteableBitmap map) { colorFrame.CopyRawFrameDataToArray(this.colorBytes); this.colorPublisher.SendByteArray(this.colorBytes); } 

由于我发送未压缩的数据, 我正在超载网络 ,我想压缩这些帧。

这是否可以进行连续流处理?

我知道我可以通过压缩PNG/JPEG格式来做到这一点,但我想保持video流的概念。

目标是在C#发送压缩数据,然后在Python中解码它们。

是否有任何libs允许这样做?

可能会忘记当前的压缩和PoC缩减

如果您的设计确实有意义,请首先关注核心CVfunction,代价是降低(缩小)FPS,colordepth,分辨率(按此优先级顺序)。

您指示的数据产生大约1 Gbps的exgress数据流,其中即将进行的CV处理将会阻塞,具有显着的CV处理性能(延迟/延迟)/临时数据表示的内存管理瓶颈。

PoCPoC可能会受益于1/4 – 1/10较慢的FPS采集/流处理,并且经过精细调整的解决方案可能会向您显示,您的代码在流处理余量中每帧多少纳秒 (最终决定如果时间和处理能力足以将任何类型的CODEC处理包括在其他工作流水线中)

在此处输入图像描述

通过右键单击 – > [在新选项卡中打开[usec]检查[usec]的左下角窗口延迟
在单线程i7 / 3.33 GHz设备上以更小的FPS进行实际处理时,放大并实现几个实际openCV延迟的大小/数量级,大约是您的一个FullFD静止图像的1/4其中L3高速缓存大小可以携带多达15 MB的图像数据,最快的延迟小于13 ns ( core-local access case ) .. 40 ns ( core-remote NUMA access case ) + CV块性质-orchestrated图像处理从最小(如果不是零)缓存未命中率中获益很多 – 但这不是依赖的通用部署硬件方案: 在此处输入图像描述
每个缓存未命中的成本( penalty以及在主DDR-RAM请求和执行数据访问的需求大约为+100 ns >>> https://stackoverflow.com/a/33065382/3666197

没有工作流水线 ,就没有关于持续流处理/它的每帧边际的定量数据来决定所提出的PoC实现的先验的CODEC难度。