Saya memiliki lima kamera USB, merek yang sama, model yang sama (Canyon CNR-FWC120H). Mereka digunakan untuk memantau pemandangan yang berbeda 24/7. Saya perlu mengidentifikasi kamera mana yang berasal dari konsol Linux (Debian) atau secara terprogram (bahasa apa pun).
Saya sudah mencoba melihat output lsusb -vvv
, ada bidang iSerial
yang harus berbeda untuk setiap kamera tetapi sayangnya pabrikan ini memutuskan untuk tidak repot dan semua kamera memiliki serial yang sama di tempat itu:200901010001
Apakah ada cara lain saya bisa mengidentifikasi kamera mana yang independen dari port USB yang terhubung karena sayangnya dalam skenario khusus saya, saya tidak dapat mengandalkan kenyataan bahwa kamera yang sama akan selalu terhubung ke port yang sama.
PEMBARUAN Setelah beberapa diskusi dalam komentar saya menyadari bahwa ini adalah misi yang mustahil. Jadi, lupakan paragraf terakhir atau jika Anda memiliki ide yang cerdik, mohon, Anda dipersilakan untuk mempresentasikannya. Saya sekarang tertarik jika saya bisa mengidentifikasi port USB yang terhubung dengan perangkat; Saya menggunakan port USB bawaan pada motherboard dan kartu pengontrol USB PCI tambahan untuk mengakomodasi kamera dengan bandwidth yang cukup. Saya perlu mengidentifikasi port secara unik, dan nomor port / identifikasi tidak boleh berubah jika misalnya mesin reboot dan untuk beberapa alasan pengendali USB diinisialisasi dalam urutan yang berbeda. Apakah itu mungkin?
UPDATE 2 saya lihat di log saya untuk salah satu kamera info berikut:
[Wed Apr 30 18:35:02 2014] uvcvideo: Found UVC 1.00 device FULL HD 1080P Webcam (0bda:58b0)
[Wed Apr 30 18:35:02 2014] input: FULL HD 1080P Webcam as /devices/pci0000:00/0000:00:01.0/0000:01:00.0/usb3/3-2/3-2:1.0/input/input4
Dengan menggunakan itu, saya telah memanggil perintah ini:
udevadm info --query=all --path=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/usb3/3-2/3-2:1.0/input/input4
Dan mendapatkan ini:
P: /devices/pci0000:00/0000:00:01.0/0000:01:00.0/usb3/3-2/3-2:1.0/input/input4
E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/usb3/3-2/3-2:1.0/input/input4
E: EV=3
E: ID_BUS=usb
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_MODEL=FULL_HD_1080P_Webcam
E: ID_MODEL_ENC=FULL\x20HD\x201080P\x20Webcam
E: ID_MODEL_ID=58b0
E: ID_PATH=pci-0000:01:00.0-usb-0:2:1.0
E: ID_PATH_TAG=pci-0000_01_00_0-usb-0_2_1_0
E: ID_REVISION=5801
E: ID_SERIAL=Generic_FULL_HD_1080P_Webcam_200901010001
E: ID_SERIAL_SHORT=200901010001
E: ID_TYPE=video
E: ID_USB_DRIVER=uvcvideo
E: ID_USB_INTERFACES=:0e0100:0e0200:010100:010200:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=Generic
E: ID_VENDOR_ENC=Generic
E: ID_VENDOR_ID=0bda
E: KEY=100000 0 0 0
E: MODALIAS=input:b0003v0BDAp58B0e5801-e0,1,kD4,ramlsfw
E: NAME="FULL HD 1080P Webcam"
E: PHYS="usb-0000:01:00.0-2/button"
E: PRODUCT=3/bda/58b0/5801
E: PROP=0
E: SUBSYSTEM=input
E: UDEV_LOG=3
E: USEC_INITIALIZED=41090223
Hal-hal yang berbeda antara kamera yang DEVPATH
, ID_PATH
, ID_PATH_TAG
, PHYS
dan (paling menarik) USEC_INITIALIZED
. Sekarang empat elemen pertama mungkin terkait dengan port USB, tetapi yang terakhir USEC_INITIALIZED
terlihat seperti semacam nomor seri. Saya tidak dapat menemukan info tentang apa yang sebenarnya diwakilinya. Adakah yang tahu tentang itu? Saya pikir mungkin ini adalah waktu dalam mikro detik ketika kamera diinisialisasi tetapi kamera yang diinisialisasi setelah ini USEC_INITIALIZED=17919751
, dan kemudian setelah itu USEC_INITIALIZED=25609278
jadi sepertinya agak acak. Saya akan mencoba untuk reboot sistem dan lihat, tapi saya harus menunggu waktu yang tepat untuk melakukan itu.
Dan jika ada yang bertanya-tanya mengapa saya tidak hanya mencoba menghubungkan kembali kamera dan melihat apakah itu tetap sama. Jawabannya adalah saya mengoperasikan PC ini dari jarak jauh, dan saya sedang menyelidiki semua ini untuk mempersiapkan sistem agar sepenuhnya otonom untuk setiap peristiwa potensial di masa depan. Misalnya yang mungkin termasuk melepas kamera dari port USB.
Jawaban:
Apakah kamera dalam posisi tetap? Apakah adegan kurang lebih konstan? Jika demikian, Anda dapat menggunakan pengenalan gambar untuk mengidentifikasi kamera berdasarkan apa yang mereka lihat.
Ada beberapa alat python yang layak untuk melakukan ini, jawaban ini memiliki beberapa info bagus tentang topik ini: /programming/1927660/compare-two-images-the-python-linux-way
sumber
Ketika Anda menemukan, masalahnya tidak dapat diselesaikan, jika Anda tidak bisa mendapatkan identifikasi unik dari perangkat itu sendiri. Hal yang paling dekat dengan solusi adalah bergantung pada koneksi fisik unit. (Ini tidak akan berubah saat reboot. Hanya jika Anda secara fisik mengubah posisi konektor)
Secara terprogram Anda dapat menggunakan sysfs untuk mendapatkan informasi yang dimiliki kernel, tentang perangkat. Sysfs adalah representasi perangkat yang menyerupai sistem file seperti yang dilihat oleh kernel. (Ini bukan file nyata pada disk)
Dengannya, Anda dapat: - mengidentifikasi jenis perangkat dengan ID produk dan vendor - membaca nomor seri perangkat, jika ada. - baca nomor koneksi fisik pada hub USB
Anda bisa mulai dengan menemukan tipe perangkat Anda di / sys / class. Dalam contoh ini saya menggunakan port USB → LPT. Tetapi prinsipnya sama.
Grap nama perangkat dari file uevent:
tambahkan / dev sehingga Anda mendapatkan nama perangkat untuk dibuka: / dev / usb / lp1
Gunakan path asli: $ cd -P / sys / class / usbmisc / lp1
Mundur 3 cabang:
Direktori ini berisi banyak informasi di perangkat:
idProduct dan idVendor dapat digunakan untuk mengidentifikasi secara unik jenis perangkat.
Jika ada file seri dan berisi nomor seri unik, Anda selesai.
Jika tidak, pilihan Anda adalah menggunakan koneksi fisik sebagai identifikasi, yang merupakan nama direktori ini " 4-1.5 " Ini unik untuk koneksi fisik, dan akan seperti yang Anda sebutkan berubah jika Anda mencolokkan perangkat ke port lain.
sumber
Cukup cabut kamera, pasang 1 dan lakukan lsusb. Identifikasi kamera dan catat port USB mana yang digunakan. Mungkin menaruh label kecil di kamera. Kemudian ulangi untuk kamera lain dan Anda akan sampai di sana. Tidak ada misi yang mustahil;)
sumber
Dimungkinkan untuk mengidentifikasi semua kamera. Perintah
mengembalikan nomor seri kamera saya (Webcam Logitech HD Pro, digunakan sebagai contoh dengan Vendor yang benar: Kode produk yang diperoleh dari penggunaan sebelumnya
lsusb
). Harap perhatikan bahwa sangat penting untuk melakukan operasi ini sebagai pengguna istimewa: pengguna yang tidak berhak tidak mendapatkan akses ke semua info yang tersedia melalui perintah.Nomor seri sering, tetapi tidak selalu, unik. Jika tidak unik (cukup bandingkan output dari perintah di atas untuk dua perangkat dengan Vendor yang sama: Kode produk), Anda dapat mengaturnya sehingga berbeda. Ada panduan di seluruh Google untuk melakukan itu, saya hanya akan menunjuk beberapa dari mereka, demi ketelitian: di sini dan di sini .
Sekarang perintahnya
mengembalikan kode yang sesuai untuk kamera khusus ini. Trial and error dengan semua
/dev/videoX
perangkat memungkinkan merpati semuanya.sumber
Saya pernah mendengar seseorang menunda daya secara berurutan ke perangkat selama boot up, yang akan memungkinkan Anda untuk mengidentifikasi mereka berdasarkan urutan mereka hidup. Dibutuhkan beberapa perangkat tambahan yang dapat mengontrol daya ke masing-masing port usb.
Anda dapat meretas hub USB yang memiliki sakelar daya tersendiri untuk setiap port, menghubungkannya ke arduino dan memicu urutan mana yang dinyalakan.
sumber