问题标签 [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.
c++ - 以毫秒为单位的媒体基础曝光
在我提出问题之前,我需要说明我主要是一名 Linux C++ 开发人员,并且没有太多编写 Windows 应用程序的经验。我使用 g++ 而不是 Microsoft 编译器编译所有代码。
背景
一段时间以来,我一直致力于支持各种专业相机的科学成像应用程序。这些相机中的大多数都有制造商提供的 SDK,这使得开发更加容易。但是,我的应用程序支持的一些相机是标准 UVC 相机。直到最近,这个应用程序一直专门用于 Linux,但现在正在移植到 macOS 和 Windows。
- Linux 端口通过 Video4Linux 实现了 UVC 支持,并且运行得非常好。
- macOS 端口通过 libuvc ( https://github.com/libuvc/libuvc ) 实现 UVC 支持并且运行良好
问题:Windows UVC 支持
我在 Windows 上实现 UVC 相机时遇到问题。我编写了 DirectShow 和 Media Framework 处理器,它们运行良好,可以控制增益、亮度、对比度等参数,以及 V4L2,这正是我所需要的。但是,当我尝试实施曝光控制时,问题就出现了。
如果我使用记录曝光范围为 1 毫秒到 1000 毫秒的特定 UVC 相机,那么我可以通过使用 V4L2_CID_EXPOSURE_ABSOLUTE 来使用 Video4Linux 的完整曝光范围。当应用新的曝光时,我看到输出图像的线性变化很好。在 macOS 上使用 libuvc 时,我可以观察到相同的情况。
在 Windows 上使用 DirectShow 或 Media Foundation 上的相同相机时,曝光范围非常不同。我使用以下代码查询曝光控制的范围:
如文档所述,从proc_amp->GetRange发现的值不是实时单位。例如,这些值为 -11 到 -3,对于某些支持大于 1000 毫秒曝光的 UVC 相机,这些值为正值。当我将曝光应用于流时,步骤非常粗糙。如前所述,Linux 下这个特定相机的曝光步骤是线性的,有数百个步骤。在 Windows 中只有大约 14 个。
我的主要问题是:可以在 DirectShow 或 Media Foundations 中使用具有实时单元的 UVC 相机,如果是这样,这是如何完成的?如果有人有任何想法,我很乐意考虑另一种方法。遗憾的是,这种粗略的曝光步骤是不可接受的。
我知道在 Windows 上支持 libuvc,但它需要安装特定的驱动程序,这是我真的不希望我的用户做的事情。
非常感谢所有帮助。
阿曼达。
ubuntu - 无法通过 uvc_gadget 获取视频到主机
我正在尝试将树莓派板设置为管道设备,它可以接收来自相机或任何其他来源的视频并将其通过管道传输到主机 PC。我正在按照这里提到的教程
https://gist.github.com/justinschuldt/36469e2a89d95ef158a8c4df091e9cb4
我能够成功地将网络摄像头视频流式传输到主机 PC。我想做的是使用视频文件而不是来自网络摄像头的流。为了做到这一点,我做了如下
- 创建了一个虚拟 v4l2loopback 设备
- 按照上面的教程创建了 uvc_gadget
我的设置看起来像这样
现在,当我尝试将视频文件流式传输到 /dev/video2 时,我只在主机 pc 上看到彩色条纹,并出现错误 no jpeg data found
在主机 PC 上
错误
如果我使用 g_webcam 而不是 configFS 创建小工具,我会得到几乎类似的行为。
将感谢任何帮助。我假设编码存在一些问题。
camera - 在 ROS 动力学上运行 uvc 相机时遇到问题
我想在 ROS 动力学上运行 uvc_camera,但遇到错误“uvc_start_streaming:无效模式(-51)”的问题
我的相机参数:
启动文件:
启动时的消息:
我知道大多数问题都发生在“图像大小和类型”领域,但我已经非常关注它。
我在网上找了很久。但是没有用。请帮助或尝试提供一些想法如何实现这一目标。
android - 无法获取对话框以请求 UVC 设备的权限
我正在尝试开发一个应用程序来将手机与特定的 UVC 相机连接起来。当我用 USB 电缆插入设备并能够枚举不同的接口时,我成功地检测到了设备。我的问题是,当我尝试请求访问此设备的权限以打开相机界面时,用户不会看到任何对话框,并且会立即调用来自我的接收器的 onReceive 回调。
这是我添加 USB 和相机权限的清单:
这是我的 MainActivity.kt :
我在https://developer.android.com/reference/android/hardware/usb/UsbManager#requestPermission(android.hardware.usb.UsbDevice,%20android.app.PendingIntent)上读到,对于 UVC 设备,我需要获得相机权限我添加了,但我仍然没有获得权限对话框并且无法打开我的设备。我在这里想念什么?如何获得访问我的设备的权限?如果我对任何其他未标记为 UVC 的 USB 设备使用相同的代码,我每次都会得到对话框。
谢谢你的帮助 !
python - 如何在 ARM64 系统上从 UVC 设备获取 MJPG 格式的视频帧?(与蟒蛇)
作为标题。我想从Logic HD Pro Webcam C920获得最高性能,应该是1920*1080, FPS=30.0。我从互联网上尝试了很多方法,但是都不能解决我的问题。一般来说,有两种方法可以达到目的。
- opencv-python -> 视频捕捉:
这是我的代码。
问题是虽然我设置了相机和计算机支持的正确分辨率和格式,但我仍然从相机得到错误的 FPS(结果是 1920*1080 FPS=5)。我使用的摄像头是 Logic HD Pro Webcam C920。以下是相机信息。
- 流媒体
这是我的代码,它也不起作用。除非删除pixelformat
, 并设置width=2304,height=1536,framerate=2/1
这已经让我困惑了很长时间。我真的很想知道如何从 UVC 设备获得正确的分辨率、fps 和格式。如果有人能解决问题并告诉我发生了什么,我将非常感激。
ffmpeg - ffplay - 指定来自 UVC cam 的输入像素格式(通过 V4L2)
我开发了一个可以流式传输视频的 UVC 设备,但它的输出格式是 RGB565,并且 UVC 不支持 RGB。
所以,我声明我的输出是 YUV422(也是每像素 16 位),现在我可以看到我的图像,但它的颜色不正确(当然..)。
是否可以使用任何工具(ffplay/vlc/mplayer/etc..)来强制输入像素格式而不参考 v4l2 设备功能?感谢大家。
camera - 与 Windows 10 相比,v4l2 手动曝光不起作用
这个问题非常类似于V4L2 absolute exposure setting has (almost) not effect
我有一个在模块UVC
上运行的兼容相机。Raspberry Pi CM3+
它显示为video0
。
使用工具/驱动程序v4l2-ctl
,qv4l2
或无法控制,但在 Windows 10 上使用时可以guvcview
控制。absolute exposure
Amcap
相机有两种曝光模式manual
和aperature controlled
。然而,当图像中aperature controlled
的曝光水平动态变化时,当切换到manual
模式时,图像变得非常暗,并且无论在可选择范围的上限还是下限都不会改变。
运行时v4l2-ctl
,范围min
被声明5
为max
is 2500
。然而,在 Windows 中,它介于-2
和之间,-11
并且图像的曝光按您所期望的比例变化。
参数范围v4l2
:
Amcap
Windows 10 上的参数范围:
如果我在v4l2-ctl -d0 -all
这里做,我会得到:
我尝试在没有任何变化MJPEG
的情况下更改格式。YUYV
我假设它是驱动程序问题或我忽略的某些设置?
linux - Bresser MikroCam SP 5.0 没有用于锚芯片的驱动程序 (ID 0547:1236)
我被分配使用Bresser MikroCam SP 5.0 相机。此相机使用供应商 ID 为 0547的Anchor Chips Inc。我试图找到一个允许芯片被识别为视频输入的驱动程序,但它告诉我一个死胡同。目前,通信和流式传输的唯一方法是通过 Windows 中提供的软件。我正在尝试将相机与 ROS 一起使用,但首先我需要将其识别为相机。您知道我该如何解决吗?我使用的是Ubuntu 18.04,我的内核是5.4.0-65-generic。我也尝试过使用cheese、gucview、camorama、AstroDMx Capture 和v4l2。
这是来自的输出lsusb
:
Bus 001 Device 009: ID 0547:1236 Anchor Chips, Inc.
这是来自的输出dmesg
:
这是来自的输出usb-devices
:
我已经在 askubuntu 上发布了这个,但仍然没有回复。
android - Vuforia 找到 0 种支持的相机模式。使用 Epson Moverio BT35E 时,外部摄像头报告功能无效
亲爱的 StackOverflow 社区,
我正在为 Epson Moverio BT35E (Vuforia SDK Android) 开发用于最终学位评估的 AR 应用程序,这些智能眼镜在 Vuforia 上没有任何集成实现,所以我按照我的所有步骤实现了外部摄像头驱动程序如果我想通过 Vuforia 处理 Epson 相机的图像,请在Vuforia 的文档上找到。(所有这些都是为了有一些功能性应用而进行的2周的不断研究和开发)。
该程序在通过 USB 连接到设备上的标准网络摄像头上运行顺畅,但是当我连接眼镜时,出现 USB 自动提示,但应用程序显示以下错误消息:
初始化相机失败。
但深入研究后,我从 UVC 驱动程序和 Vuforia 中找到了一些可能有助于修复错误的关键字。
这是我使用标准网络摄像头时的样子。
所以,我不知道我是否做错了什么,我设置了校准文件,我有正确的 Android API 版本和 Vuforia,我的库运行良好,但 Vuforia 无法访问爱普生眼镜相机.
你能帮我想想解决办法吗?我猜测库的相机的一些内存地址,但我没有更多的知识来解决或调试这类问题。
我找到了有关Vuforia 自定义驱动程序的信息,但我不知道如何从那里着手。
我将不胜感激任何形式的帮助,谢谢。
android - java.lang.ClassNotFoundException 在 Xamarin.Android 中绑定 java 库
我正在尝试绑定 libuvccamera java 库以访问在 Xamarin.Android 中开发的 Android 设备中的 UVC 摄像头,并且在绑定libuvccamera.aar 和 usbCameraCommon.aar文件期间我遇到了很多麻烦。其中一个是 java.lang.ClassNotFoundException,它在调用 java 类的 USBMonitor 协构函数时被调用:
我已经导入了 .arr 库,如此处所述
但是当我创建分发并将应用程序运行到我的 Android 设备时,我得到如下异常调用:
一些建议如何解决这个问题?
谢谢!