有谁知道如何使用 python 创建相机源?例如我有 2 个摄像头:
- Webcam
- USB Cam
每当我使用任何需要相机的网络应用程序或界面时,我都可以选择从上述两个来源中选择相机源。
我想要实现的是,我在 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
作为相机源,因此下次每当我打开需要相机的软件或网络应用程序时,它都会显示如下选项:
- Webcam
- USB Cam
- Python Cam(或者随便叫什么名字)
有人对如何去做有任何建议或提示吗?我见过一些生成自己的相机源的高级软件,但它们是用 C++ 编写的。我想知道这是否会发生在 python 中。
这是一个相同的例子:
如您所见,那里有多个摄像机源。我想添加一个相机源,它在其 feed 中显示 python 处理的帧。
您可以使用v4l2环回 (https://github.com/umlaeute/v4l2loopback https://github.com/umlaeute/v4l2loopback) 为了那个原因。它是用 C 编写的,但有一些 python 包装器。我用过虚拟视频 (https://github.com/Flashs/virtualvideo https://github.com/Flashs/virtualvideo).
virtualvideo README 非常简单,但这里是我对其 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()
in 初始化输出第一个参数是我在添加内核模块时创建的虚拟相机资源:
sudo modprobe v4l2loopback video_nr=2 exclusive_caps=1
最后一个参数是我的网络摄像头大小和像素格式。
您应该在环聊中看到此选项:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)