Перечислять по камерам в Python - PullRequest
       52

Перечислять по камерам в Python

0 голосов
/ 28 сентября 2018

У меня возникли проблемы с перечислением камер в 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.Они работают, но только для определенных брендов.

Я провел некоторые исследования по переполнению стека, и некоторые люди предложили привязки gstreamer в Python в качестве возможного решения, независимого от ОС.Это то, что у меня пока есть.

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

По какой-то причине я не получаю никаких веб-камер, но только аудиоустройства.Есть идеи, что я делаю не так?Какие-то другие подходы, которые я должен использовать?Спасибо.

1 Ответ

0 голосов
/ 09 марта 2019

Для 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

...