使用c ++在Linux中束缚相机应用程序

时间:2012-12-18 10:46:45

标签: c++ opencv camera linux-device-driver tethering

我想制作一个程序,为数码视频/静态相机(DSLR以外的消费者相机)提供系留操作,这样您就可以将相机插入电脑(USB或其他)并使用它的功能(拍照,录制视频,缩放,聚焦等)。 目前的平台是Linux。

据我所知,没有制造商为他们的产品提供SDK,除了少数人(佳能,奥林巴斯,尼康),但只有他们的数码单反相机。

我不是c ++的新手,但我还没有参与很多项目。但是,我是OpenCV的新手,我还不知道这个库的功能。 为了测试opencv构建和我的配置,我创建了一个简单的应用程序,它只从网络摄像头获取流并将其显示在表单上。 (使用cvCreateCameraCapture)

这适用于数码相机或便携式摄像机吗?我猜他们必须有“网络摄像头模式”,但这并不常见(至少在摄像机中没有)。 如何使用firewire或是否有其他高清连接器?它们会被OpenCV识别吗? 如果可能的话,我想远离HDMI和捕获设备(额外费用)。

  

所以我想我的问题是,如果有人对这样的项目有任何经验:这种用法的首选相机规格是什么(哪些功能)?是否有任何图书馆可以解决我的麻烦:)

我也在研究libgphoto2。如果需要的话,我会尝试为相机编写驱动程序,如果可能的话使用libusb,但老实说我不知道​​从哪里开始。 嗅探USB端口(使用其本机驱动程序),之后如何处理该信息?

  

如果有人能够对这个问题有所了解,我将非常感激 - 如何开始,推荐编写驱动程序软件的好书?

另外,我知道Linux Kino提供了类似的功能,所以我可以查看源代码,但它仅适用于IEEE 1394吗?

  

最后一个问题,如果相机通过USB连接,我怎样才能在计算机启动时自动启动相机?

对不起,很长的帖子,

谢谢你,祝福!

Matekk

1 个答案:

答案 0 :(得分:3)

要启动与USB连接设备通信的程序,请为其添加udev规则,例如this。您可能希望使用ATTR{device}ATTR{vendor}而不是KERNEL,如示例所示。

至于相机本身,older Canon P&S cameras可以tethered shooting。有些受gphoto支持。如果没有Linux支持你的相机,但它能够在其他操作系统中工作,你将不得不逆向工程支持。是的,从提供的软件发出命令,嗅探USB端口,找出消息格式,通过libusb2使程序写入/读取消息(或者可能添加对libgphoto2的支持)。

另一种可能性是基于Android的相机(不是手机而是真正的P& S)。尼康和三星都制造这些东西。可能没有必要对任何东西进行反向工程,但您可能必须为相机编写Android应用程序。有一些应用程序可以做到这一点,但通过WiFi / 3G工作,所以这也应该可用于USB。