问题标签 [uvc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 运行 python opencv 脚本时出现“选择超时”错误
我正在尝试从 USB 3.0 网络摄像头捕获视频/图像馈送。每当我尝试运行此代码时,代码都会运行并捕获提要。但是,过了一会儿我得到“选择超时”。错误不会被异常捕获。有人可以帮我解决这个问题吗?
我也试过编辑'uvcvideo'驱动参数
还有,启用模块跟踪,
在“dmesg”图像上观察到这些错误
我遵循的链接: 在 Ubuntu 中选择超时错误 - Opencv
camera - 使用 uvc-gadget 和 g_webcam 闪烁和失败的视频流
从 4.4.143 开始,我正在将uvc-gadget 的这个提交与 g_webcam 一起用于 Rockchip。此版本的 uvc-gadget 仅传输静态 mjpeg 图像(并且比早期的 uvc-gadget 源代码编写得更好)。
观察主机笔记本电脑上的有趣行为,它正在接收来自小工具的流guvcview
:一段时间后,帧开始像旧电视一样闪烁(V4L2_CORE: (jpeg decoder) error while decoding frame
),然后最终流在主机上中断:V4L2_CORE: Could not grab image (select timeout): Resource temporarily unavailable
。在主机下方继续轮询([75290.124695] uvcvideo: uvc_v4l2_poll
),主机的 dmesg 和设备上的 uvc-gadget 都没有错误。事实上,重新打开 guvcview 流后再次工作,无需 uvc-gadget 重启,但很快以同样的方式崩溃。
我正在使用库存的 USB3.0 电缆,既可用于流式传输也可用于为设备供电。AFAIK,没有任何噪声源可能导致这种物理层面的奇怪闪烁。
此外,我注意到较小的 USB 数据包大小从 1024 下降到 256,流存活的时间更长(高达 50,000 帧左右),但最终仍然崩溃。
知道这里发生了什么吗?
更新
在我从 MJPEG 压缩流切换到未压缩流后,不再闪烁,但几秒钟后仍然失去联系:V4L2_CORE: Could not grab image (select timeout): Resource temporarily unavailable
usb - 如何限制 UVC 小工具的 FPS?
g_webcam
我正在开发一个基于git://git.ideasonboard.org/uvc-gadget.git
. 我注意到 USB 设备配置结构中提供的 FPS 设置不受尊重。事实上,小工具会尝试尽可能快的帧速率。此外,由于机会主义 FPS 选择可能导致低级 USB 接口泛滥,主机往往会松动到 UVC 设备的管道。
那么,我们如何为 UVC 小工具设置 FPS 的硬限制?
谢谢!
内核模块源码:
UVC小工具来源:
通用标题:
windows - 检测 UVC 视频设备断开连接 (WM_DEVICECHANGE) 在 Windows y 上有效,但在 Windows 10 上失败
我正在使用与此完全相同的代码来处理视频设备丢失。我正在使用 Logitech C920 网络摄像头测试我的应用程序。
当网络摄像头插入 Windows 7 上的 USB2 端口时,代码按预期工作,并检测到摄像头拔出。
但是,当相机连接到 Windows 10 下的 USB3 端口时,相同的代码会失败。
问题是 pDi->dbcc_name 的值仅部分匹配 g_pwszSymbolicLink 的值。
我强调下面的区别。
L"\\?\USB#VID_046D&PID_082D&MI_00#7&E9B492F&0&0000#{ E5323777-F976-4F5B-9B55-B94699C46E44 }\GLOBAL"
L"\\?\USB#VID_046D&PID_082D&MI_00#7&E9B492F&0&0000#{ 65E8773D-8F56-11D0-A3B9-00A0C9223196 }\GLOBAL"
有谁知道这是为什么?是否应该更正代码以忽略这部分字符串?
usb - DirectShow 需要哪些 USB 描述符字段才能识别 UVC 相机?
我正在自定义 USB 网络摄像头上调试 UVC 固件。相机枚举,我可以使用 guvcview 在 Ubuntu 上流式传输视频。但是在 Windows 10 中,设备会枚举并在设备管理器中显示为相机,但 DirectShow 无法识别(即它不会显示在 CLSID_VideoInputDeviceCategory 设备列表中)。因此,任何使用 DirectShow 接口的应用程序(例如 openCV 或 VLC)都无法使用该相机。需要在相机固件中实现哪些描述符,以便 DirectShow 使用 windows UVC 驱动程序识别我的 UVC 相机?固件实现 UVC 1.0 版。
video - Microsoft Media Foundation / UVC ReadSample() 回调
我正在编写一个媒体基础应用程序,以从 60Hz 的 UVC 相机获取和显示 1920x1080 YUV2 图像。
我的问题是 ReadSample() 回调仅以非常低的速率(1 FPS 左右)在几帧的突发中被不规律地调用。
这发生在两台笔记本电脑上,但到目前为止我还没有尝试过台式机。我正在运行 Windows 10,并且我运行测试的所有机器都是最新的。
但是,我注意到,如果我让 CPU 忙于我的应用程序,那么回调会按预期以 60Hz 的频率调用。
编辑
注意:当 CPU 因防病毒启动而忙碌时,回调率也会增加。虽然没有达到完整的 60Hz。
所以,如果我改变我的消息循环:
至:
然后 FPS 回到 60Hz;但当然 CPU 使用率接近 100%...
同上,在第一个消息循环的窗口上移动鼠标会导致 FPS 增加一点(~10FPS)。
将相机的帧速率降低到 30Hz 会导致 ReadSample() 回调以 30Hz 的频率发生。
我从 Microsoft 提供的示例('Windows-classic-samples')中重现了与 MFCaptureD3D 示例相同的问题。
请注意,我稍微修改了示例以测量 ReadSample() 回调中的帧速率。
在我的笔记本电脑上,该示例的测量速度约为 25FPS(因此丢了很多帧)。这是因为色彩空间转换是基于 CPU 的,效率非常低(一个内核的 75%)。但是,它仍然管理 25PFS!
注释掉转换(没有其他代码更改),导致帧速率下降到几乎为零!.. CPU 使用率为 0%。所以回调不会发生。
在这两个应用程序中,COM 库在应用程序的主线程(运行窗口的消息循环)中初始化如下:
为了方便起见,我从 Microsoft 的示例中复制了 ReadSample() 回调:
编辑
如下所示的窗口程序(尽可能简化);MF 对象在 OnCreate() 中创建:
想知道它是否与COM线程模型有关;我不明白页面底部的注释。
多线程单元旨在供非 GUI 线程使用。多线程单元中的线程不应执行 UI 操作。这是因为 UI 线程需要消息泵,而 COM 不会为多线程单元中的线程泵送消息。
这是否意味着我不应该在我的 UI 线程中创建 COM 对象?
我尝试在另一个线程中创建它们,并使用它自己的 msg 循环,但得到的结果完全相同。
编辑 已经使用基于 DirectShow 的 VLC 运行测试并且没有看到这些问题。它在 Win7 下运行良好,FPS 达到预期的 60Hz。注意到 VLC 将定时器中断降至 1ms(timeBeginPeriod ())。试过在我身上做同样的事情,但无济于事。
这里的想法用完了......看起来我可能不得不放弃 MF 并编写一个 DirectShow 应用程序,如果只是为了仔细检查它是否正常工作。
c# - 如何将 USB 视频类 (UVC) 转换为原始 USB 设备数据?
我们的视频桥设备从我们的 FPGA 输入原始非视频数据,然后将其作为视频类 (UVC) 输出。
我们的主机软件如何从接收到的 UVC 流中读取相同的原始数据?
主机是 Windows 10 上的 C# .NET 应用程序。视频桥设备是 FTDI FT602 (USB 3.1 Gen 1)
windows - 如何在 Windows 上使用 Gstreamer 获取来自 UVC 的编码流
我想使用 Gstreamer 在 Windows 上获取来自罗技高清网络摄像头 (UVC) 的编码流。我知道在 Linux 上您可以通过 /dev/video1 等访问。但是,我不知道如何在 Windows 上执行此操作。
我可以通过 Windows 上的 ksvideosrc 获取原始缓冲区,但这并不能解决我的问题。我必须得到硬件编码流。如果您知道任何其他库而不是 Gstreamer,请指导我。
我希望这样的输出,但对于 Windows 版本。
gst-launch-1.0 v4l2src device=/dev/video0 !解码器!ximagesink
python - USB 摄像头:OpenCV VideoCapture 返回部分帧
我正在开发一个程序来处理来自 Ubuntu 上的 USB 摄像头的帧。目前我在 python 中使用 OpenCV。当我尝试使用cv2.VideoCapture
对象读取帧时,我只会得到部分帧。
我使用的相机是Kayeton GS1M2812 USB 相机,它声称符合 UVC 标准。大多数应用程序(例如奶酪)在可用的网络摄像头中列出相机,但不显示任何帧。另一方面,Google Hangouts 可以毫无问题地显示来自相机的实时帧。
我还可以使用streamer
. 例如:
最初,当我尝试使用时cv.VideoCapture
,我得到了选择超时并且没有图像。经过一番研究,我发现重新启动 uvcvideo 模块nodrop=1
允许我至少从 opencv 获取部分帧(如上面链接的那个)。
我尝试将 uvcvideo 超时参数设置为一个大得离谱的值,并弄乱了所有其他参数和各种怪癖,但无济于事。
我确实发现在每次调用之前将分辨率 ( cv.CAP_PROP_FRAME_WIDTH
and ) 更改为 320x240 或更小会导致捕获完整帧,但任何更大的都不会。cv.CAP_PROP_FRAME_HEIGHT
read()
我也试过用 改变各种参数v4l2-ctl
,但这也没有奏效。
我能做些什么来解决这个问题?
这是我的python代码:
当我使用笔记本电脑的内置网络摄像头(通常/dev/video0
)时,此代码可以正常工作,但在我使用 USB 摄像头时会显示部分帧。
我在 Ubuntu 16.04 上使用 python 2.7.12 和 opencv 3.3.1