枚举Python中的相机

问题描述 投票:2回答:1

我在使用多个操作系统的Python上的相机进行枚举时遇到了一些麻烦。

以下是我尝试过的一些方法:

import cv2 as cv
num = 0
while 1:
    cap = cv.VideoCapture(num)
    if cap.isOpened():
        # working capture
        num += 1
    else:
        break

使用Opencv的缺点是Opencv不提供任何友好的显示名称。此外,通过相机进行枚举很慢,因为您需要实际打开和关闭相机以检查它是否是有效的相机。

我也尝试使用像PyPylon和pyuvc这样的库。它们有效,但仅适用于特定品牌。

我已经对堆栈溢出进行了一些研究,有些人建议将python的gstreamer绑定作为可能的OS独立解决方案。这就是我到目前为止所拥有的。

import pgi
pgi.require_version("Gtk", "3.0")
pgi.require_version("Gst", "1.0")
pgi.require_version("GstVideo", "1.0")
from pgi.repository import Gtk, GObject, Gst, GstVideo

Gst.init("")
dm = Gst.DeviceMonitor()
dm.set_show_all_devices(True)

dm.start()

print("Displaying devices.")
for device in dm.get_devices():
    print(device.get_display_name())
print("Displaying providers.")
for provider in dm.get_providers():
    print(provider)

dm.stop()

这是我得到的输出:

Displaying devices.
papalook Microphone
DisplayPort
HDMI
Built-in Output
Built-in Microph
Displaying providers.
osxaudiodeviceprovider

出于某种原因,我没有得到任何网络摄像头,只有音频设备。关于我做错了什么的任何想法?我应该采取什么不同的方法?谢谢。

python opencv gstreamer python-gstreamer
1个回答
0
投票

对于Windows,您可以使用库pygrabber,这是一个纯python工具,可以从摄像头捕获照片,并使用DirectShow和OpenCV进行简单的图像处理。它还列举了连接的网络摄像头,如下所示:

from __future__ import print_function
from pygrabber.dshow_graph import FilterGraph

graph = FilterGraph()
print(graph.get_input_devices())

我已经修改了库以在Python 2和3下工作。下载地址:https://github.com/bunkahle/pygrabber

仅适用于Python 3的原始资源:https://github.com/andreaschiavinato/python_grabber

© www.soinside.com 2019 - 2024. All rights reserved.