如何找到 USB 设备摄像头?

如何找到 USB 设备摄像头?

我是 LINUX 的初学者,如果我的问题不是最好的,很抱歉。我有一个使用 OpenCV 库的 C++ 应用程序。该应用程序在启动时通过服务运行(使用 systemctl)。我的应用程序需要 USB 摄像头设备的 ID 作为参数。我有 2 个 USB 摄像头。当我关闭这些设备时, ls /dev/video* 的输出是:

/dev/video1 

如果我插入设备, ls /dev/video* 的输出为:

/dev/video0
/dev/video1
/dev/video2

所以,我找到了 USB 摄像头设备,现在我知道如何运行我的 C++ 应用程序:

./my_app 0 2

这是我的问题:我的应用程序在每次启动时自动运行,无需插入/关闭我的相机设备,因此我无法找到这些 id(在本例中为 0 和 2)。每次重新启动时,这些 id 都会不同。

只找出USB摄像头设备的规则是什么?我的操作系统:Ubuntu 18.04 LTS 我的主板:Nvidia Jetson Tx2(它有一个我不想使用的集成摄像头)

编辑:lsusb 的输出:

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 03f0:094a Hewlett-Packard Optical Mouse [672662-001]
Bus 001 Device 004: ID 258a:0001  
Bus 001 Device 039: ID 0ac8:0346 Z-Star Microelectronics Corp. 
Bus 001 Device 038: ID 0ac8:0346 Z-Star Microelectronics Corp. 
Bus 001 Device 037: ID 14cd:8601 Super Top 
Bus 001 Device 002: ID 14cd:8601 Super Top 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

答案1

我找到了最简单的解决方案,使用下一个命令:

v4l2-ctl --list-devices

这是输出:

vi-output, ov5693 2-0036 (platform:15700000.vi:2):
    /dev/video2

HBV HD CAMERA (usb-3530000.xhci-2.1.2):
    /dev/video0

HBV HD CAMERA (usb-3530000.xhci-2.1.3):
    /dev/video1

之后,我编写了一个脚本来仅获取 USB 摄像头设备的 ID:

   keywordUSB=usb # used for searching the usb camera
    lineCount=0 # index for each line command
    
    # even lines -> type of camera device : native/usb
    # odd lines -> id of camera
    
    
    USB_ID_CAMERA_ARRAY=() # array where we append our id usb camera
    
    while read cmd_line
    do
        if [ -z "$cmd_line" ] # ignore empty line
        then
            continue
        else
            if [ $(expr $lineCount % 2) -eq "0" ] # usb/native camera 
            then
                if [[ "$cmd_line" == *"$keywordUSB"* ]] # true if it is a usb camera device
                then
                    state=active # state is active only for usb camera devices
                else
                    state=inactive # inactive for native camera
                fi
            else
                if [[ $state == "active" ]] # this is a usb camera
                then
                    camera_id="${cmd_line: -1}" # id camera
                    USB_ID_CAMERA_ARRAY+=($camera_id) # append to our array
                fi
            fi
        fi
        let "lineCount+=1"
    done < <(v4l2-ctl --list-devices)
    
    command="./myCppApp --camera-sources"
    
    for elem in ${USB_ID_CAMERA_ARRAY[@]}
    do
        command="$command $elem"
    done
$command

相关内容