какое устройство - WEB камера?

Обмен опытом по установке Линукс на разные аппаратные конфигурации

Модераторы: Olej, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: какое устройство - WEB камера?

Непрочитанное сообщение Olej » 14 авг 2018, 11:34

Olej писал(а): Очень интересно! :

Код: Выделить всё

linaro@linaro-alip:/dev/v4l$ pwd
/dev/v4l
Video4Linux
Video4Linux (v4l) — интерфейс прикладного программирования (API) аудио и видео захвата для операционных систем семейства Linux[1]. Video4Linux тесно интегрируется с ядром Linux. Поддержка v4l появилась в конце цикла развития ядра Linux 2.1.X. Поддерживается большое количество веб-камер и видео устройств — плат видеозахвата, ТВ-тюнеров, плат приёма DVB.
И спецификация: Linux Media Subsystem Documentation.
Где даже по отдельным конкретным моделям драйверов разделы, типа:
24. Qualcomm Camera Subsystem driver

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: какое устройство - WEB камера?

Непрочитанное сообщение Olej » 15 авг 2018, 11:56

Вот такой скрипт, по итогам:

Код: Выделить всё

#!/usr/bin/python
# -*- coding: utf-8 -*- 
import os, sys, commands, cv2, re

vd = []
stat, ls = commands.getstatusoutput( 'ls -l /dev/v4l/by-id' )
if stat != 0:
    print( 'no video cameras!' )
    sys.exit( 0 )
for dir in ls.splitlines():
    i = dir.find( 'index' )
    if i < 0: continue
    vv = dir[ i: ].split( ' -> ' )
    if int( vv[ 0 ][ ( re.search( '\d', vv[ 0 ] ).start( 0 ) ): ] ) != 0:
        continue               # index not 0
    print( vv[ 0 ].strip(), ' | ', vv[ 1 ].strip( ' ./' ) )
    vd.append( int( vv[ 1 ][ ( re.search( '\d', vv[ 1 ] ).start( 0 ) ): ] ) )
print( vd )
На десктопе где 2 WEB-камеры висят на USB:

Код: Выделить всё

[olej@xenix Face_recognition]$ ls /dev/video*
/dev/video0  /dev/video1  /dev/video2  /dev/video3

[olej@xenix Face_recognition]$ lsusb
Bus 001 Device 004: ID 0c45:62f0 Microdia 
Bus 001 Device 003: ID 1908:2310 GEMBIRD 
...

[olej@xenix Face_recognition]$ python find_video.py
('index0', ' | ', 'video0')
('index0', ' | ', 'video2')
[0, 2]
На другом десктопе, где на USB висит всё что угодно, только не WEB-камеры:

Код: Выделить всё

olej@nvidia ~/2018_WORK/own.WORKs/AplitSoft/Face $ lsusb
Bus 001 Device 007: ID 14cd:168a Super Top 
Bus 001 Device 004: ID 148f:7601 Ralink Technology, Corp. MT7601U Wireless Adapter
Bus 001 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 003: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 05d8:4002 Ultima Electronics Corp. Artec Ultima 2000 (GT6801 based)/Lifetec LT9385/ScanMagic 1200 UB Plus Scanner
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 2101:020f ActionStar 
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

olej@nvidia ~/2018_WORK/own.WORKs/AplitSoft/Face $ ls /dev/video*
ls: невозможно получить доступ к '/dev/video*': Нет такого файла или каталога

olej@nvidia ~/2018_WORK/own.WORKs/AplitSoft/Face $ python find_video.py
no video cameras!
На SBC DragonBoard 410c ARM64:

Код: Выделить всё

linaro@linaro-alip:~/Face$ uname -a
Linux linaro-alip 4.14.0-qcomlt-arm64 #1 SMP PREEMPT Fri Feb 2 21:19:01 UTC 2018 aarch64 GNU/Linux

linaro@linaro-alip:~/Face$ lsusb
Bus 001 Device 016: ID 046d:082b Logitech, Inc. Webcam C170
Bus 001 Device 015: ID 045e:0750 Microsoft Corp. Wired Keyboard 600
Bus 001 Device 014: ID 046d:c03d Logitech, Inc. M-BT96a Pilot Optical Mouse
Bus 001 Device 017: ID 07a6:8515 ADMtek, Inc. AN8515 Ethernet
Bus 001 Device 013: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 002: ID 0424:2513 Standard Microsystems Corp. 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

linaro@linaro-alip:~/Face$ ls /dev/video*
/dev/video0  /dev/video1  /dev/video2

linaro@linaro-alip:~/Face$ 
linaro@linaro-alip:~/Face$ python find_video.py 
('index0', ' | ', 'video2')
[2]
Вложения
find_video.py
(583 байт) 124 скачивания

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: какое устройство - WEB камера?

Непрочитанное сообщение Olej » 15 авг 2018, 12:31

Olej писал(а):На SBC DragonBoard 410c ARM64:
Вот такая игрушка: Orange Pi One
Изображение

Код: Выделить всё

  ___                               ____  _    ___             
 / _ \ _ __ __ _ _ __   __ _  ___  |  _ \(_)  / _ \ _ __   ___ 
| | | | '__/ _` | '_ \ / _` |/ _ \ | |_) | | | | | | '_ \ / _ \
| |_| | | | (_| | | | | (_| |  __/ |  __/| | | |_| | | | |  __/
 \___/|_|  \__,_|_| |_|\__, |\___| |_|   |_|  \___/|_| |_|\___|
                       |___/                                   

Welcome to ARMBIAN 5.38 stable Debian GNU/Linux 9 (stretch) 4.14.48-sunxi   
System load:   1.34 1.72 1.00  	Up time:       8 min		
Memory usage:  10 % of 493MB  	IP:            192.168.1.201
CPU temp:      47°C           	
Usage of /:    94% of 1.7G   	

[ 0 security updates available, 1 updates total: apt upgrade ]
Last check: 2018-06-30 13:17

Код: Выделить всё

olej@orangepione:~$ uname -a
Linux orangepione 4.14.48-sunxi #1 SMP Wed Jun 6 19:14:27 EEST 2018 armv7l GNU/Linux

olej@orangepione:~$ lsusb
Bus 004 Device 004: ID 1908:2310 GEMBIRD 
Bus 004 Device 003: ID 046d:c31c Logitech, Inc. Keyboard K120
Bus 004 Device 002: ID 05e3:0606 Genesys Logic, Inc. USB 2.0 Hub / D-Link DUB-H4 USB 2.0 Hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Здесь вообще ничего нет на USB (не считая клавиатуры и мышки) кроме всё той же WEB-камеры 1908:2310 GEMBIRD

Код: Выделить всё

olej@orangepione:~$ ls /dev/video*
/dev/video0

olej@orangepione:~$ ls -l /dev/video*
crw-rw----+ 1 root video 81, 0 авг 15 12:15 /dev/video0
Но здесь она же, в отличие от стационара выше, отображается только как единичное устройство /dev/video0

Код: Выделить всё

olej@orangepione:~$ ls -l /dev/v4l/by-id/
total 0
lrwxrwxrwx 1 root root 12 авг 15 12:15 usb-Generic_USB2.0_PC_CAMERA-video-index0 -> ../../video0

Код: Выделить всё

olej@orangepione:~$ python find_video.py
Traceback (most recent call last):
  File "find_video.py", line 3, in <module>
    import os, sys, commands, cv2, re 
ImportError: No module named cv2
Естественно :cry:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: какое устройство - WEB камера?

Непрочитанное сообщение Olej » 15 авг 2018, 13:37

Olej писал(а): На десктопе где 2 WEB-камеры висят на USB:

Код: Выделить всё

[olej@xenix Face_recognition]$ ls /dev/video*
/dev/video0  /dev/video1  /dev/video2  /dev/video3

[olej@xenix Face_recognition]$ lsusb
Bus 001 Device 004: ID 0c45:62f0 Microdia 
Bus 001 Device 003: ID 1908:2310 GEMBIRD 
...

[olej@xenix Face_recognition]$ python find_video.py
('index0', ' | ', 'video0')
('index0', ' | ', 'video2')
[0, 2]
Вот ровно на том же десктопе, когда одна из камер отключена:

Код: Выделить всё

[olej@xenix Face_recognition]$ lsusb
Bus 001 Device 004: ID 0c45:62f0 Microdia 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 2101:020f ActionStar 
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

[olej@xenix Face_recognition]$ ls -l /dev/video*
crw-rw----+ 1 root video 81, 2 авг 14 10:13 /dev/video2
crw-rw----+ 1 root video 81, 3 авг 14 10:13 /dev/video3

[olej@xenix Face_recognition]$ python find_video.py
('index0', ' | ', 'video2')
[2]
Как легко видеть, разобраться в /dev/video* "на глаз" не так то и просто. :-o

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: какое устройство - WEB камера?

Непрочитанное сообщение Olej » 15 авг 2018, 13:42

Olej писал(а):Естественно :cry:
Но для этого скрипта вовсе не нужен OpenCV.
Достаточно строку импорта упростить до:

Код: Выделить всё

import commands, re
И вот на том же Orange Pi One:

Код: Выделить всё

olej@orangepione:~$ ls -l /dev/video*
crw-rw----+ 1 root video 81, 0 авг 15 12:15 /dev/video0

olej@orangepione:~$ python find_video.py 
('index0', ' | ', 'video0')
[0]

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: какое устройство - WEB камера?

Непрочитанное сообщение Olej » 15 авг 2018, 13:46

Olej писал(а): Но для этого скрипта вовсе не нужен OpenCV.
В конечном итоге, для работы с видео в OpenCV (а это всё и делалось для OpenCV) создались 2 функции:

Код: Выделить всё

def get_cameras():
    vd = []
    stat, ls = commands.getstatusoutput( 'ls -l /dev/v4l/by-id' )
    if stat != 0: return vd
    for dir in ls.splitlines():
        i = dir.find( 'index' )
        if i < 0: continue
        vv = dir[ i: ].split( ' -> ' )
        if int( vv[ 0 ][ ( re.search( '\d', vv[ 0 ] ).start( 0 ) ): ] ) != 0:
            continue                                # index not 0
        vd.append( int( vv[ 1 ][ ( re.search( '\d', vv[ 1 ] ).start( 0 ) ): ] ) )
    return vd
            
def get_default():
    vd = get_cameras()
    if len( vd ) != 0: return vd[ 0 ]
    else: return -1
get_cameras() - возвращает список номеров доступных камер;
get_default() - возвращает камеру по умолчанию, когда не хочется указывать конкретно - это 1-я камера в списке get_cameras();

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: какое устройство - WEB камера?

Непрочитанное сообщение Olej » 13 сен 2022, 23:54

Опять возник интерес к теме в связи с разборкой с камерой Genius VideoCam GE111 (USB камера 093a:2471).

Код: Выделить всё

root@HP-Compaq:/dev/v4l/by-id# ls -l /dev/v4l/by-id
итого 0
lrwxrwxrwx 1 root root 12 фев  2 17:36 usb-Pixart_Imaging_Inc._CIF_Single_Chip-video-index0 -> ../../video0

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

какое устройство - WEB камера?

Непрочитанное сообщение Olej » 25 янв 2023, 16:58

Olej писал(а):
13 сен 2022, 23:54
Опять возник интерес к теме в связи с разборкой с камерой Genius VideoCam GE111
И опять, в связи с диагностикой работоспособности камеры: диагностика WEB-камеры.

Ответить

Вернуться в «Железо для Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей