

[以下の方法](https://irohaplat.com/python-opencv-camera-id-
detection/)で、Windowsで接続されているカメラのIDは取得できるようですが、カメラデバイスの名前は取得できません。  
デバイスの名前を取得する方法があれば知りたいです。

[code]

    import cv2
    
    for i1 in range(0, 20): 
        cap1 = cv2.VideoCapture( i1, cv2.CAP_DSHOW )
        if cap1.isOpened(): 
            print("VideoCapture(", i1, ") : Found")
        else:
            print("VideoCapture(", i1, ") : None")
        cap1.release() 
    
[/code]

Pythonの実行環境は、WinPythonとPython 3.10.4です。

**＊追記**  
私の環境で[Pygrabber](https://pypi.org/project/pygrabber/)を使用して以下のコードを実行すると、Index番号とカメラ名がズレた形ですが取得できました。正しく取得できる場合もありますが、複数のカメラを接続するとIndex番号がズレるようです。Index番号とカメラ名を同時に正しい状態で取得する方法が知りたいです。

[code]

    from pygrabber.dshow_graph import FilterGraph
    
    devices = FilterGraph().get_input_devices()
    for device_index, device_name in enumerate(devices):
        print(str(device_index) + ':  ' + device_name)
    
[/code]

私と同じ問題が、[windows-capture-device-list
1.1.0のGitHubのissue](https://github.com/yushulx/python-capture-device-
list/issues/7)にも上がっているようですが、OpenCVの仕様の問題による不具合のように見えます。カメラの種類というよりも、複数台カメラを接続しているとindex番号がズレるものと思われます。

私の環境は、HPのノートPCの標準カメラと、外部にLogicoolのWebカメラを接続している状況です。GitHubのissueでも、ラップトップでカメラのindex番号がズレると報告されています。


CC BY-SA 4.0
2022-12-26T20:11:51.677
93028
2023-10-17T03:54:48.470
2023-10-17T03:54:48.470
34471
34471
question
python windows opencv
Windows環境のPythonで、接続されているWEBカメラの名前を取得する方法はあるかどうか


以下により，カメラ名を一覧できました．

[code]

    import subprocess
    import re
    
    output = (
        subprocess.check_output(["powershell.exe", 'Get-PnpDevice -Class "Image"'])
        .decode("utf-8")
    )
    
    camera_infos = output.splitlines()[3:-2]
    
    cameras = [re.split(r"\s{2,}", camera)[2] for camera in camera_infos]
    print(cameras)
    
[/code]

`output`： PowerShellから取得した全カメラ情報の文字列  
`camera_infos`：各カメラ情報を要素に持つリスト  
`cameras`：`camera_infos`からカメラ名だけに絞ったリスト


CC BY-SA 4.0
2023-02-08T04:46:20.807
93764
2023-02-08T04:46:20.807
50560
93028
answer