获取OpenCV VideoStream Python的摄像机设备名称和端口?

kdfy810k  于 2023-01-26  发布在  Python
关注(0)|答案(2)|浏览(309)

我目前正尝试让用户为我们的前端软件选择一个摄像头。我们目前正在迭代摄像头设备,如StackOverflow上的this答案所示。这将返回摄像头ID:

index = 0
arr = []
while True:
    cap = cv2.VideoCapture(index)
    if not cap.read()[0]:
        break
    else:
        arr.append(index)
    cap.release()
    index += 1
return arr

这很好,但如果能得到一个友好的设备名称来向用户显示,那就好多了。罗技网络摄像头
有人知道如何获得这些摄像机的实际名称以显示给用户,而不是显示ID吗?

4xy9mtcn

4xy9mtcn1#

有两种选择,使用MSMF后端,您可以在CV-camera finder中完成,只需在Windows上下载.pyd文件(我认为仅适用于python 3.7),或者使用DSHOW,这在该repo的README中显示。

uxhixvfz

uxhixvfz2#

您可以直接使用此选项。

pip install pygrabber

from pygrabber.dshow_graph import FilterGraph

def get_available_cameras() :

    devices = FilterGraph().get_input_devices()

    available_cameras = {}

    for device_index, device_name in enumerate(devices):
        available_cameras[device_index] = device_name

    return available_cameras

print(get_available_cameras())

在我设备上输出,

{0: 'HD Webcam', 1: 'FHD Camera', 2: 'Intel Virtual Camera', 3: 'OBS Virtual Camera'}

此外,这款话筒也适用于话筒,

pip install pyaudio

import pyaudio

def get_available_michrophones() :

    available_microphones = {}
    pyduo = pyaudio.PyAudio()
    devices_info = pyduo.get_host_api_info_by_index(0)
    number_of_devices = devices_info.get('deviceCount')
    for device_index in range(0, number_of_devices):
        if (pyduo.get_device_info_by_host_api_device_index(0, device_index).get('maxInputChannels')) > 0:
            available_microphones[device_index] = pyduo.get_device_info_by_host_api_device_index(0, device_index).get('name')

    return available_microphones

print(get_available_michrophones())

在我设备上输出,

{0: 'Microsoft Sound Mapper - Input', 1: 'Microphone (Pusat USB Broadcast', 2: 'Microphone (FHD Camera Micropho', 3: 'Microphone (Realtek(R) Audio)'}

相关问题