Ubuntu
如何找到 USB 設備的攝像頭?
我是 LINUX 的初學者,如果我的問題不是最好的,我很抱歉。我有一個使用 OpenCV lib 的 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
我找到了最簡單的解決方案,使用下一個命令:
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