我这里有一个 USB 摄像头,我非常熟悉并且已经使用了一段时间。我可以毫无问题地在 OpenCV 和 Gstreamer 中捕获“静止图像”。但是,此相机的一个用例涉及相机本身的一个按钮,用于拍摄静止图像。
相机有一个“静止针脚”,我已经连接了一个按钮。在带有 DirectShow 的 Windows 中,它可以像您期望的那样工作。在过去的一周里,我一直在寻找一种方法来为我的嵌入式项目在 Linux 中复制这种行为。到目前为止,我还没有找到任何我可以利用的东西。似乎只有 Windows 才支持此功能。
我搜索了以下内容: V4l2 文档 打开简历 meteor uvc流光 紫外线捕捉 luvc View
我还在 Windows 上进行了 USB 嗅探,发现发送了“捕获开始”数据包。虽然我还没有找到一种方法可以在流式传输期间监控来自相机的 USB 流量。从设备捕获时,/dev/video0 正在被 V4l2 使用,我无法读取总线上传输的字节。如果有一种方法可以从相机读取原始数据,我也可以在我的应用程序中处理“静止针”按钮按下。
此时欢迎任何可能的解决方案/想法。我没有想法和网络资源。
最佳答案
事实证明,在 Linux 中有一种方法可以看到按下“静止固定”按钮!
按钮按下显示为一个事件。使用诸如 libevdev 之类的东西,我可以在我的代码中使用它。这个答案主要是在这里找到的:
can't get the mouse move event from /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 中保存静止图像,所以我知道必须支持此类操作。
关于c++ - UVC 相机 "Still Pin"在 Linux C++ 中捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29355100/