问题标签 [v4l]

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.

0 投票
0 回答
1758 浏览

linux - 如何为 GStream 配置 v4l2src?

我正在尝试.flv使用 GStreamer 流式传输网络摄像头流以进行格式化。类似于下面的命令。

我得到以下错误 -

错误的管道:没有元素“v4l2src”

我搜索了这个错误,尝试了下面链接中提到的许多选项。但它似乎不适用于 Ubuntu 16.04 操作系统。

Gstreamer 错误:无法构造管道:没有元素“v4l2src”

更新:我使用 gst-inspect-1.0 来获得以下输出以查看所有已安装的插件。

强文本**

0 投票
0 回答
90 浏览

raspberry-pi3 - 我正在使用带有 PiCamera v2.1 的 Tinker Board。如何设置捕获图像的颜色格式以及如何设置曝光参数?

我能够使用带有 PiCam 的 Tinker Board 捕获 NV12 格式的图片。我正在使用带有 v4l2src 插件的 gstreamer 管道来捕获图像,如下所示:

我尝试使用使用“gst-inspect-1.0 v4l2src”指定的所有格式,但这些格式都没有给我一个 RGB 图像作为输出。请帮助我了解如何捕获 RGB 图像!此外,我无法在捕获图像时手动指定我的 Picam 的曝光时间。有关如何执行此操作的任何建议也会非常有帮助?

0 投票
2 回答
638 浏览

c++ - 在覆盆子上使用带有多个网络摄像头的 opencv 来拍摄延时摄影时出现多个 v4l 错误

我发布这个是因为我已经在网上搜索试图找到一些解释导致的错误但没有找到任何错误。

所以我试图从 4 个不同的角度拍摄正在生长的植物的延时摄影。我有 4 个网络摄像头 (Logitech B525) 连接到我的树莓派 3。每小时一次,所有 4 个摄像头都应该拍摄尽可能窄和准确的时间同步帧。

在平稳运行后,有时几分钟有时几个小时,V4L 不再发现连接的摄像机或输出损坏的信息。产生错误的相机是随机的,因此没有坏的 USB 端口,也没有损坏的电缆。一段时间后,出现故障的摄像头再次开始工作,然后另一个摄像头出现故障,这种情况一直持续到所有摄像头都出现故障并且程序停止。

这是错误输出的示例

我的保存期编程输出:

然后发生错误:

相机永远不会断开连接,并且始终存在于设备文件夹 /dev/videoX 中,我想可以假设这不是电源问题。

我导致错误的代码部分是开关部分一遍又一遍地重复,延迟 5 秒。我的猜测是 USB 带宽问题,因为 raspberry 只有一个 USB 2.0 总线分成 4 个端口。我尝试在关闭和再次打开捕获之间增加更多时间,但没有任何帮助。我错过了什么吗?

这是我的代码:

0 投票
1 回答
1962 浏览

python - 是否可以在 Windows 10 上禁用网络摄像头的自动对焦?

我正在使用 python opencv,但无法在 Windows 10 上禁用自动对焦、自动​​曝光等。

我正在使用罗技 BRIO 4k 网络摄像头。

一切都在 Ubuntu 18.04 上完美运行。通过使用 v4l 后端的 Opencv 3.4.4,我能够成功设置焦点、曝光和视频分辨率。但是相同的代码在 Windows 上不起作用

在我尝试过的 Windows 上:

  1. 用于 Python 的非官方预构建 OpenCV 包:opencv-contrib-python https://pypi.org/project/opencv-contrib-python/

  2. 从带有 MSMF、VFW、DSHOW 后端的源代码 opencv 3.4.3 构建。使用 VFW,我根本无法打开视频捕获

  3. 使用 MSMF、DSHOW 后端从源代码 opencv 4.1 构建

在上述每种情况下(VFW 后端除外),我都可以使用 opencv 功能,从网络摄像头读取和显示帧,但无法禁用自动对焦。

我使用的来自官方 opencv GitHub 存储库的代码https://github.com/opencv/opencv/blob/master/samples/python/video_v4l2.py

我像这样创建视频捕获以指定VideoCapture(0 + BACKEND_ID)从此处获取 BACKEND_ID 的 后端https://docs.opencv.org/3.4.3/d4/d15/group__videoio__flags__base.html

环境变量OPENCV_VIDEOIO_DEBUG=True 确认我使用特定的后端

相同主题的问题没有答案使用 opencv-python 在 Windows 中禁用网络摄像头的自动对焦

cap.set( cv.CAP_PROP_SETTINGS, 1 ); 不适用于 windows 和 linux

由于代码适用于 linux,我相信问题出在 videoio 后端。您能否在 opencv 支持的 Windows 上建议一些其他后端或 v4l 模拟。

0 投票
0 回答
622 浏览

python - 网络摄像头不通过 OpenCV 读取,但通过 guvcview 读取

我有一个很旧的网络摄像头。我一直试图让它工作。我从 guvcview 开始,它可以工作,但是它只给了我捕获的第一帧然后停止。现在没关系。

我正在尝试使用 OpenCV 重新创建这种行为。我在linux上并使用python。据我了解,我最好的选择是让 OpenCV 使用 guvcview 使用的 v4l2。

我的长期想法是只获取第一帧,但在循环中执行此操作以获取“视频”但帧速率较低。

但是,使用下面的非常简单的程序,我收到以下错误:

我在循环中执行此代码,直到它向我显示一些东西。我得到的错误:

有时我会在使用 guvcview 时遇到相同的错误,但只需重新启动程序即可修复它。请注意,当我的程序运行时 guvcview 不起作用(即使没有显示图像)。另请注意,read() 函数需要几秒钟才能返回。

0 投票
0 回答
495 浏览

c++ - Video For Linux 2 dequeuing 非常慢

我要做的是:

  • 通过以下方式打开相机:

    /li>
  • 然后在每一帧循环中,

    /li>

这是我运行以更新框架的代码:

此代码将应用程序的更新速度降低到每秒 <10 次更新(每次更新大约需要106毫秒),其中出列过程需要104毫秒

我想知道为什么会这样,以及是否有任何方法可以让这个应用程序实时运行,因为这台笔记本电脑上的网络摄像头运行速度为 30fps。

编辑:我发现相机在读取原始数据(在 yuv422 中)时只能以 10hz 运行,因此出队被阻塞。根据v4l2-ctl -d /dev/video2 --list-formats-ext. (30fps 的 720p 实际上给了我 15fps,降低分辨率也无济于事)现在我知道我需要解码 mjpeg 帧才能以高帧率获得实时高清视频,我正在尝试找到一种将 mjpeg 转换为 rgb 的方法(或 yuv)

0 投票
0 回答
1004 浏览

c++ - 在直播中解码 MJPEG 图像

我正在尝试从我的网络摄像头查看实时视频。我可以使用 OpenGL 将图像绘制到窗口,在 YUV 中获取帧并将它们即时转换为 RGB。我可以轻松地将 YUV 颜色转换为 RGB,也可以从 MJPEG 中获取指向数据的指针。我所需要的只是能够将 MJPEG 实时解码为 YUV 或 RGB。我听说过 libjpeg 和 libjpeg-turbo,但是,我不知道如何使用它们中的任何一个。我有 libjpeg

如果我使用 MJPEG(并缩小图像缓冲区,这样我就不会读取不属于我的内存):

mjpeg 随机噪声

如果我使用 YUV422:

在此处输入图像描述

0 投票
0 回答
93 浏览

c++ - 在 QT 应用程序中/上显示相机输入 HOWTO / Way to go

我正在使用 CAN 总线接口和 PAl 相机接口在嵌入式 Linux 显示器上实现 QT 应用程序。总体目标是使用现代外观仪表显示机器的传感器数据(行驶速度 km/h 等),并在显示屏的下半部分显示 CAMERA 输入。CAMERA 输入矩形是 GUI Widget(具有 QT 框架的所有功能)还是只是独立显示(我的意思是按像素叠加)到屏幕上并不重要。

环境:

  • 软件:Linux 4.1.15,
  • 可用的 QT 平台插件:eglfs、linuxfb、minimal、minimalegl、offscreen、wayland-egl、wayland。
  • 摄像头:/dev/video0 /dev/video1 Video4Linux 设备,驱动程序 mxc_v4l2。

  • 硬件为 Freescale / NXP、i.MX6 Solo / Quad、ARM Cortex-A9、800 MHz (Solo) / 1000 MHz (Quad)。

使用 Framebuffer 输出设备 /dev/fb0 将摄像机输入基本显示到屏幕上可以正常工作。

在 QT 应用程序内部或之上显示相机输入的最简单方法是什么?你能建议/推荐一条路吗?

0 投票
0 回答
1009 浏览

python - VIDIOC_G_STD:失败:不适当的 ioctl doer 设备

我尝试了以下命令:

v4l2-ctl -d 0 --get-standard

但我得到了错误

VIDIOC_G_STD: failed: Inappropriate ioctl for device

但是,下面的命令完全可以正常工作。

v4l2-ctl -d 0 --all

任何帮助,将不胜感激。在我的程序中,当我为我的相机重置控件时,我得到了 Inappropriate ioctl for device。

v4l2-compliance

上述命令未能通过四次测试。我在下面展示了一些失败的测试。我绝对需要 VIDIOC_QUERYCTRL 才能工作。

0 投票
1 回答
45 浏览

opencv3.0 - 是否可以使用 cv2.Videocapture 在 Ubuntu 18.04 上访问大于 7 索引的视频设备?

目前正在尝试使用连接到安装了 Ubuntu 18.04 的 Raspberry Pi 4(通过板载 USB 端口和 USB 集线器)的 10 个 USB 摄像头同时捕获 10 个图像。我正在使用多线程方法来创建多个将捕获照片的相机对象。我目前有 4 个摄像头工作(这上升到 /dev/video7,每个物理摄像头占用 2 个设备索引。

我目前遇到的问题是访问任何大于 7 索引的相机设备(将无法访问 5 或更高的物理相机)。我目前收到以下错误:

“视频错误:V4L:索引 8 不正确!”

它与位于 modules/videoio/src/cap_v4l.cpp 的 opencv_3.4.1 源文件相关联。在这个源文件中,它提到它已针对多达 8 个输入进行了测试,是否有人设法获得超过 8 个输入设备来使用 Raspberry Pi 拍摄照片?

我还将添加一些我已经尝试过的调试信息。

  • 将 #define MAX_CAMERAS 8(位于 cap_v4l.cpp 中)更改为更大的值并重建了 opencv 模块,但没有任何影响。
  • 我也尝试过自己访问设备索引大于 7 的任何相机,但它仍然存在。
  • 我设法使用 ROS melodic 上的 usb_cam 访问这些摄像头,因此它们可以正常工作和连接。如果可能的话,我更愿意通过 opencv-python 来完成这项工作,但如果没有解决方案,我将探索一种 ROS 方法来解决该任务。

任何帮助或建议表示赞赏,谢谢。