Linux C++中的 UVC Camera "Still Pin" 捕获

UVC Camera "Still Pin" capture in Linux C++

本文关键字:Still 捕获 Pin Camera C++ 中的 UVC Linux      更新时间:2023-10-16

我这里有一个USB相机,我非常熟悉,并且已经使用了一段时间。我可以在OpenCV和Gstreamer中捕获"静止图像",而不会出现问题。然而,这款相机的一个使用案例涉及相机本身的一个按钮来捕捉剧照。

相机有一个"静态引脚",我已经连接了一个按钮。在带有DirectShow的Windows中,它的工作原理正如你所期望的那样。在过去的一周里,我一直在为我的嵌入式项目寻找一种在Linux中复制这种行为的方法。到目前为止,我还没能找到任何可以利用的东西。似乎所有对该功能的支持都仅限于Windows。

我搜索了以下内容:V4l2文档OpenCVGstreameruvc拖缆悬雍垂luvcview

我还在Windows上进行了USB嗅探,发现发送了一个"捕获开始"数据包。虽然我还没有找到一种方法,我可以在流媒体播放过程中监控摄像头的USB流量。从设备捕获时,V4l2正在使用/dev/video0,我无法读取在总线上传输的字节。如果有一种方法可以从相机中读取原始数据,我也可以在应用程序中处理"静止"按钮。

目前欢迎任何可能的解决方案/想法。我的想法和网络资源都用完了。

因此,事实证明,在linux中有一种方法可以看到"still pin"按钮按下!

按下按钮显示为事件。使用libevdev之类的东西,我可以在代码中使用它。这个答案主要在这里找到:

可以';t从/dev/input/event*获取鼠标移动事件

下面是相机按钮的输出示例:

# input-events 15
/dev/input/event15
   bustype : BUS_USB
   vendor  : 0xc45
   product : 0x62c0
   version : 256
   name    : "Celestron Digital Microscope"
   phys    : "usb-0000:00:14.0-1/button"
   bits ev : EV_SYN EV_KEY
waiting for events
08:34:01.980650: EV_KEY KEY_CAMERA (0xd4) pressed
08:34:01.980650: EV_SYN code=0 value=0
08:34:02.180637: EV_KEY KEY_CAMERA (0xd4) released
08:34:02.180637: EV_SYN code=0 value=0
08:34:02.580673: EV_KEY KEY_CAMERA (0xd4) pressed
08:34:02.580673: EV_SYN code=0 value=0
08:34:02.680676: EV_KEY KEY_CAMERA (0xd4) released
08:34:02.680676: EV_SYN code=0 value=0
08:34:03.580618: EV_KEY KEY_CAMERA (0xd4) pressed
08:34:03.580618: EV_SYN code=0 value=0
08:34:03.780657: EV_KEY KEY_CAMERA (0xd4) released
08:34:03.780657: EV_SYN code=0 value=0
08:34:04.280631: EV_KEY KEY_CAMERA (0xd4) pressed
08:34:04.280631: EV_SYN code=0 value=0
08:34:04.580679: EV_KEY KEY_CAMERA (0xd4) released
08:34:04.580679: EV_SYN code=0 value=0
08:34:05.080636: EV_KEY KEY_CAMERA (0xd4) pressed
08:34:05.080636: EV_SYN code=0 value=0
08:34:05.380704: EV_KEY KEY_CAMERA (0xd4) released
08:34:05.380704: EV_SYN code=0 value=0

因此,正如您所看到的,按下/释放按钮对系统来说是清晰可见的。我希望这对其他人的搜索有所帮助。

我想我还应该提到,按下按钮可以在guvcviewer中保存静态图像,所以我知道必须支持这种类型的东西。