【问题标题】:Create a new camera source using OpenCV Python (Camera Driver Using Python)使用 OpenCV Python 创建新的相机源(Camera Driver Using Python)
【发布时间】:2020-12-29 16:53:41
【问题描述】:

有谁知道使用 python 创建相机源的方法?例如,我有 2 个摄像头:

  1. 网络摄像头
  2. USB 摄像头

每当我使用任何需要摄像头的 Web 应用程序或界面时,我都可以从上述两个中选择摄像头源。

我想要实现的是,我正在使用我自己的相机门户在我的 python 程序中处理实时帧,如下所示:

import numpy as np
import cv2

    while True:
        _,frame = self.cam.read()
        k = cv2.waitKey(1)
        if k & 0xFF == ord('q'):
            self.cam.release()
            cv2.destroyAllWindows()
            break
        else:
            cv2.imshow("Frame",frame)

现在我想使用这个frame 作为相机源,所以下次当我打开需要相机的软件或网络应用程序时,它会显示如下选项:

  1. 网络摄像头
  2. USB 摄像头
  3. Python Cam(或任何名称)

有没有人对如何去做有任何建议或暗示?我见过一些生成自己的相机源的高级软件,但它们是用 C++ 编写的。我想知道这是否会在 python 中发生。

这是一个相同的例子:

如您所见,那里有多个摄像头源。我想添加一个摄像头源,在它的提要中显示由 python 处理的帧。

【问题讨论】:

  • 嗨@Karthik,不,这是一个完全不同的问题。我不想从 opencv 打开两个摄像头...我想创建自己的摄像头源,任何需要摄像头的 webapp 或软件都可以看到它,以显示我的 opencv 处理的帧。
  • 哦,我看到您看起来像是您自己的相机门户,您想将其嵌入某处以显示处理后的帧
  • 是的。为了更加清晰,我添加了一张图片截图。

标签: python opencv-python


【解决方案1】:

您可以为此使用 v4l2loopback (https://github.com/umlaeute/v4l2loopback)。它是用 C 编写的,但有一些 python 包装器。我用过virtualvideo (https://github.com/Flashs/virtualvideo)。
virtualvideo 自述文件非常简单,但这是我对其 github 示例的修改以符合您的目标:

import virtualvideo
import cv2


class MyVideoSource(virtualvideo.VideoSource):
    def __init__(self):
        self.cam = cv2.VideoCapture(0)
        _, img = self.cam.read()
        size = img.shape
        #opencv's shape is y,x,channels
        self._size = (size[1],size[0])

    def img_size(self):
        return self._size

    def fps(self):
        return 30

    def generator(self):
        while True:
            _, img = self.cam.read()
            yield img


vidsrc = MyVideoSource()
fvd = virtualvideo.FakeVideoDevice()
fvd.init_input(vidsrc)
fvd.init_output(2, 640, 480, pix_fmt='yuyv422')
fvd.run()

init_output中,第一个参数是我在添加内核模块时创建的虚拟相机资源:

sudo modprobe v4l2loopback video_nr=2 exclusive_caps=1

最后一个参数是我的网络摄像头大小和像素格式。

你应该会在环聊中看到这个选项:

【讨论】:

  • sudo modprobe v4l2loopback video_nr=2 exclusive_caps=1 windows 的等效终端代码是什么? Windows 是否支持这个库?
  • 该库仅适用于 Linux。知道您在 Windows 上,也许 this 是您一直在寻找的(我相信它与我向您展示的方法类似),但我不知道是否可以进行 python 集成。您还有其他似乎不涉及创建内核模块softwarerecs.stackexchange.com/a/74002的解决方案。
  • 嗯,我明白了...非常感谢您的参考!
猜你喜欢
  • 1970-01-01
  • 2018-01-30
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 2019-12-25
  • 2016-03-05
相关资源
最近更新 更多