标签: uvc

Android 作为 UVC 相机

我被一个相当糟糕的网络摄像头困在家里。我正在考虑升级,但后来让我震惊:现在的手机内置了非常好的摄像头。那么为什么不将其用作网络摄像头呢?

然而,当我进一步研究这个时,我对可用的应用程序感到非常失望。据我所知,我们有大致如下工作的 Android 应用程序:

  • 将手机摄像头作为网络连接摄像头呈现。然后您可以使用本地软件将该提要用作网络摄像头。参见例如IP 网络摄像头。这可能就足够了,但这是一个复杂的设置,而且网络延迟使其远非理想。

  • Android 应用程序将摄像头馈送发送到自定义主机应用程序,该应用程序又会创建一个虚拟网络摄像头。参见例如DroidCam。这基本上解决了延迟问题,但还是比较复杂,而且需要我们安装特定的第三方应用程序,在用户隐私方面很麻烦。特别是因为应用程序是闭源的。

所以,我采用了工程方法,并试图看看是否有可能改善这种情况。据我所知,Android 支持用作自定义 USB配件。查看 USB 视频类文档,我觉得应该可以创建一个 Android 应用程序,将手机显示为通用 UVC 网络摄像头,这样我们就不必求助于上述技巧。

理想情况下,除了调试模式、文件传输等之外,我希望 Android 添加另一个 USB 设备选项(“使用 USB 连接作为网络摄像头”)。然而,这在短期内似乎不太可能发生。

所以,我的问题是:是否已经存在具有上述功能的应用程序?到目前为止,我的搜索没有产生任何结果,但我可能会遗漏一些东西,因为谷歌搜索结果比我预期的要难一些。

或者,我上面的假设是否错误,以至于存在一些基本问题,为什么不能使 Android 应用程序以这种方式工作?

webcam android uvc

14
推荐指数
2
解决办法
3509
查看次数

USB摄像头:OpenCV VideoCapture返回部分帧

我正在开发一个程序来处理Ubuntu上USB摄像机的帧。目前,我在python中使用OpenCV。当我尝试使用cv2.VideoCapture对象读取框架时,只会得到部分框架

我使用的相机是Kayeton GS1M2812 USB相机,据称它符合UVC。大多数应用程序(例如奶酪)在可用的网络摄像头中列出了相机,但不显示任何帧。另一方面,Google Hangouts可以毫无问题地显示来自摄像机的实时帧。

我还可以使用成功捕获图像和视频streamer。例如:

streamer -c /dev/video1 -o capture.jpg
Run Code Online (Sandbox Code Playgroud)

最初,当我尝试使用时cv.VideoCapture,我选择了超时并且没有图像。经过一番研究,我发现重新启动uvcvideo模块可以nodrop=1使我至少从opencv获得部分帧(如上面链接的部分)。

我试图将uvcvideo超时参数设置为一个荒谬的大值,并弄乱了所有其他参数和各种怪癖,但无济于事。

我确实发现,在每次调用之前将分辨率(cv.CAP_PROP_FRAME_WIDTHcv.CAP_PROP_FRAME_HEIGHT)更改为320x240或更小会read()导致捕获整个帧,但是任何更大的分辨率都不会。

我也尝试过使用更改各种参数v4l2-ctl,但这也不起作用。

我该怎么做才能解决此问题?

这是我的python代码:

streamer -c /dev/video1 -o capture.jpg
Run Code Online (Sandbox Code Playgroud)

当我使用笔记本电脑的内置网络摄像头(通常是/dev/video0)时,此代码可以正常工作,但在使用USB摄像头时,该代码会显示局部帧。

我在Ubuntu 16.04上使用python 2.7.12和opencv 3.3.1

python webcam opencv video-capture uvc

11
推荐指数
1
解决办法
238
查看次数

UVCCamera带有示例,如何导入到android studio?

我想使用 USB 摄像头 (uvc) 和 Android Studio (Windows)。我在使用 USB 摄像头库“libuvcamera”时遇到问题。我想知道如何解决问题或任何其他方式在我的应用程序中获取 USB 摄像头的视图。让我更好地解释一下\xc2\xb4s 发生了什么:

\n\n

我使用 CameraFi 应用程序测试了 USB 摄像头(https://www.camerafi.com/apps/)测试了 USB 摄像头,USB 摄像头被 Android 系统识别(并且工作正常)。

\n\n

在 Android Studio 中搜索使用 uvc (usb) 摄像头后,我发现我可以使用这个库: https: //github.com/saki4510t/UVCCamera

\n\n

下载此库+示例后,我尝试使用 Android Studio 打开(只需打开 builg.gradle),代码看起来不错,但当我尝试运行 usbCameraTest0 (或任何其他示例)时,构建失败(我附加构建输出) :

\n\n

失败:构建失败并出现异常。

\n\n
    \n
  • 出了什么问题:\n任务 \':libuvcamera:ndkBuild\' 执行失败。

    \n\n
    \n

    启动进程\'命令\'null/ndk-build.cmd\'\'时出现问题

    \n
  • \n
  • 尝试:\n使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。使用 --scan 运行以获得完整的见解。

    \n\n

    在https://help.gradle.org获取更多帮助

  • \n
\n\n

2 秒内构建失败\n14 个可操作任务:7 个已执行,7 个是最新的

\n\n

=> …

android android-camera ndk-build uvc lib

8
推荐指数
1
解决办法
2649
查看次数

如何在Linux UVC Driver中启用UVC_QUIRK_FIX_BANDWIDTH怪癖?

我目前正在尝试在Wandboard主板上运行2个网络摄像头,这些主板必须共享USB集线器.问题是,当前的驱动程序实现(仅限YUV)使USB集线器饱和,最后我只能连接一个摄像头.

然而,UVC驱动实现有此怪癖样的情况,等等.

问题是,我没有找到任何关于如何加载这些怪癖的文档.你可以帮助我吗?

linux v4l2 uvc

7
推荐指数
2
解决办法
9347
查看次数

Linux 作为 USB UVC 设备

使 Linux 设备 (Raspberry Pi) 表现得像另一台计算机的 UVC 设备需要什么?本质上,我想使用 ffmpeg 的输出来表现得像另一台计算机的网络摄像头输入。

linux usb ffmpeg uvc

5
推荐指数
1
解决办法
2548
查看次数

Microsoft Media Foundation / UVC ReadSample()回调

我正在编写一个Media Foundation应用程序,以从60Hz的UVC摄像机获取并显示1920x1080 YUV2图像。

我的问题是ReadSample()回调仅以非常低的速率(大约1 FPS)被不稳定地调用,只有几帧的突发。

这发生在两台笔记本电脑上,但是到目前为止我还没有尝试过使用台式机。我正在运行Windows 10,并且我在其上进行测试的所有计算机都是最新的。

但是,我注意到,如果我让CPU忙于我的应用程序,则回调将按预期以60Hz进行调用。

编辑

注意:当CPU由于反病毒启动而繁忙时,回调率也会提高。虽然没有达到完整的60Hz。

因此,如果我将消息循环从以下位置更改:

while (GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
Run Code Online (Sandbox Code Playgroud)

至:

   while (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) {
      TranslateMessage(&Msg);
      DispatchMessage(&Msg);
   }
Run Code Online (Sandbox Code Playgroud)

然后FPS回到60Hz;但当然CPU使用率接近100%...

同上,使用第一个消息循环将鼠标移到窗口上方会使FPS增加一点(〜10FPS)。

将摄像机的帧速率降低到30Hz会导致ReadSample()回调以应有的30Hz发生。

我已经从Microsoft提供的示例(“ Windows经典示例”)中复制了MFCaptureD3D示例的相同问题。

注意,我对示例进行了一些修改,以测量ReadSample()回调中的帧速率。

在我的笔记本电脑上,该示例的大小约为25FPS(因此丢掉了很多帧)。这是因为色彩空间转换是基于CPU的并且效率很低(一个内核的75%)。但是,它仍然管理25PFS!

注释掉转换(没有其他代码更改),导致帧速率下降到几乎为零!... CPU使用率为0%。因此,回调不会发生。

在两个应用程序中,COM库都在应用程序的主线程中初始化(运行窗口的消息循环),如下所示:

hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
Run Code Online (Sandbox Code Playgroud)

为了方便起见,我从Microsoft的示例复制了ReadSample()回调:

HRESULT CPreview::OnReadSample(HRESULT hrStatus, DWORD /* dwStreamIndex */, DWORD /* dwStreamFlags */, LONGLONG /* llTimestamp */, IMFSample *pSample)
{
HRESULT hr = S_OK;
IMFMediaBuffer *pBuffer = NULL;

EnterCriticalSection(&m_critsec);

if (FAILED(hrStatus))
    hr = hrStatus; …
Run Code Online (Sandbox Code Playgroud)

video video-capture ms-media-foundation uvc windows-10

5
推荐指数
0
解决办法
341
查看次数

无法通过 uvc_gadget 获取视频到主机

我正在尝试将 raspberry pi 板设置为管道设备,它可以从相机或任何其他来源接收视频并将其通过管道传输到主机。我正在关注这里提到的教程

https://gist.github.com/justinschuldt/36469e2a89d95ef158a8c4df091e9cb4

我能够成功地将网络摄像头视频流式传输到主机 PC。我想要做的是使用视频文件而不是来自网络摄像头的流。为了做到这一点,我做了如下

  • 创建了一个虚拟的 v4l2loopback 设备
  • 按照上面的教程创建了 uvc_gadget

我的设置看起来像这样

在此处输入图片说明

之后我能够启动 uvc_gadget 如下 在此处输入图片说明

现在,当我尝试将视频文件流式传输到 /dev/video2 时,我只在主机 pc 上看到彩色条纹,错误没有找到 jpeg 数据

在此处输入图片说明

在主机 PC 上

在此处输入图片说明

错误

在此处输入图片说明

如果我使用 g_webcam 而不是 configFS 创建小工具,我会得到几乎相似的行为。

将不胜感激任何帮助。我假设编码存在一些问题。

ubuntu ffmpeg video-streaming raspberry-pi uvc

5
推荐指数
0
解决办法
103
查看次数

无法在 Python 中导入 dll 模块

几天来,我一直在努力在 Windows 上编译一个修改过的 libuvc 版本,现在我终于完成了,我似乎无法在 Python 上加载它。我已经在 Linux 机器上使用相同版本的 Python 编译并成功导入的这个库根本不喜欢 w10。

系统

  • 赢得 10 64 位
  • 蟒蛇 3.8 64 位
  • libusb 1.022
  • 使用 MinGW64 编译的 libuvc.dll

问题

当尝试

import ctypes
import ctypes.util
name = ctypes.util.find_library('libuvc')
lib = ctypes.cdll.LoadLibrary(name)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Could not find module 'C:\Program Files (x86)\libuvc\lib\libuvc.dll'.
Try using the full path with constructor syntax. 
Error: could not find libuvc!
Run Code Online (Sandbox Code Playgroud)

问题是该文件自 util.find_library 找到以来就存在,但 python 认为它不在它所在的位置,或者输出可能只是默认值。我在这里缺少什么?不仅无法加载模块,而且无法找到它,这可能是什么原因?对不起,我没有比这更多的输出。

PS:我尝试以不同的方式重新格式化字符串,但消息没有改变。

python windows winapi ctypes uvc

3
推荐指数
3
解决办法
1万
查看次数

USB:小工具:设备模式:configfs:单一配置上的uvc和大容量存储?

我正在尝试在设备模式下为单个 USB 设备控制器端口添加 uvc 和大容量存储。我正在使用 configfs 来完成工作。

任何人都可以告诉如何做到这一点。

问候, GBiradar

linux linux-kernel embedded-linux uvc

1
推荐指数
1
解决办法
2647
查看次数