小编acz*_*czh的帖子

在Python中枚举相机

我在多个操作系统上用 Python 枚举相机时遇到一些问题。

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

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

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

我还尝试过使用 PyPylon 和 pyuvc 等库。它们有效,但仅适用于特定品牌。

我对堆栈溢出做了一些研究,有些人建议将 python 的 gstreamer 绑定作为可能的独立于操作系统的解决方案。这是我到目前为止所拥有的。

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()
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

Displaying devices. …
Run Code Online (Sandbox Code Playgroud)

python opencv gstreamer python-gstreamer

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

标签 统计

gstreamer ×1

opencv ×1

python ×1

python-gstreamer ×1