在C ++和Python之间共享video数据

我有一个USB摄像头(uEye),它有一个C ++接口,允许你configuration摄像头的一些function。 C ++程序可以从相机读取图像数据并将其存储在预先分配的内存中。 所有这些在Windows下运行。

python与numpy给了我一个简单的环境来操纵图像,并花费一些高质量的时间来处理我的处理algorithm。

我想要做的是:

  1. 使用c ++程序configuration相机并获取图像(以video速率),
  2. 将数据传递给Python
  3. 用Python处理数据

我的印象是,我不想在Python或C ++中embeddedC ++,因为我更喜欢有两个独立的系统(所以我可以在没有Python的情况下使用相机,或者使用没有相机的Python东西)。

到目前为止,我所能find的方法是使用pipe道,套接字或映射内存来共享一些数据,尽pipe它似乎仅限于less量的数据或string。 然而,我找不到的是这个速度是否足够快,我应该尝试去实现。 我应该这样做吗?

如果这是一个坏主意,那么更好的select是什么? 将Python代码embedded到C ++中,反之亦然? 或者把Python放在一起,因为在那里节省开发时间并不能抵消获得进程间通信的额外努力?

PyPy博客最近有一篇关于实时视频处理的文章。 在这个例子中,他们使用mplayer来抓取和显示视频,这可能比尝试与C ++程序(假设它可以与您的网络摄像头一起使用)接口更好。 如果不是这样,那么简单的解决方法就是连接两个应用程序的stdout / stdin。 也可能是一个好主意,看看PyPy的视频处理。

既然你说的设备有一个“C ++接口”,我认为它提供了一个头文件+ DLL,你可以链接到并通过API控制设备。 在这种情况下,最快的方法是将这个API封装到Python中(使用Swig或其他C ++到Python的API工具)。 这将提供一个非常低的开销,只是几个过程调用,直接将数据作为指针传递给内存。

如果你不想“嫁给”Python,也可以用C ++自己编写一个控制应用程序,但是我认为将API连接到Python的最快最方便的方法就是上面这个。