1. 首页
  2. 技术知识

linux usb摄像头设备信息查看方式

目录

    linux usb摄像头设备信息查看linux usb摄像头索引的获取

      原理与实现

    总结

linux usb摄像头设备信息查看

linux下usb摄像头操作,离不开v4l2框架

V4L2是Video for linux2的简称,为linux中关于视频设备的内核驱动。

在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/video0下。

查看linux 摄像头设备,如果存在有效的摄像头设备,则可以在dev目录下查看

  1. eric@eric-PC:/$ ls dev/video* -l
  2. crw-rw—-+ 1 root video 81, 0 11月  8 13:37 dev/video0
  3. crw-rw—-+ 1 root video 81, 1 11月  8 13:37 dev/video1

复制代码 也可以查看启动信息,是否存在有效usb摄像头设备

  1. eric@eric-PC:/$ dmesg | grep video
  2. [ 1849.908486] videodev: Linux video capture interface: v2.00
  3. [ 1850.022954] uvcvideo: Found UVC 1.00 device hm1091_techfront (0408:1020)
  4. [ 1850.061899] uvcvideo 1-1:1.0: Entity type for entity Extension 4 was not initialized!
  5. [ 1850.061903] uvcvideo 1-1:1.0: Entity type for entity Extension 3 was not initialized!
  6. [ 1850.061905] uvcvideo 1-1:1.0: Entity type for entity Processing 2 was not initialized!
  7. [ 1850.061907] uvcvideo 1-1:1.0: Entity type for entity Camera 1 was not initialized!
  8. [ 1850.062579] usbcore: registered new interface driver uvcvideo

复制代码 v4l2-ctl命令查看video设备参数信息,如果提示如下未找到v4l2-ctl命令,则需要安装v4l-utils

  1. eric@eric-PC:/dev$ v4l2-ctl -d  /dev/video0 –all
  2. bash: v4l2-ctl:未找到命令  
  3. eric@eric-PC:/dev$ sudo apt-get install v4l-utils

复制代码

  1. eric@eric-PC:/$ v4l2-ctl -d  /dev/video0 –all
  2. Driver Info:
  3.         Driver name      : uvcvideo
  4.         Card type        : hm1091_techfront: hm1091_techfr
  5.         Bus info         : usb-0000:02:04.0-1
  6.         Driver version   : 5.4.50
  7.         Capabilities     : 0x84a00001
  8.                 Video Capture
  9.                 Metadata Capture
  10.                 Streaming
  11.                 Extended Pix Format
  12.                 Device Capabilities
  13.         Device Caps      : 0x04200001
  14.                 Video Capture
  15.                 Streaming
  16.                 Extended Pix Format
  17. Priority: 2
  18. Video input : 0 (Camera 1: ok)
  19. Format Video Capture:
  20.         Width/Height      : 1280/720
  21.         Pixel Format      : ‘MJPG’ (Motion-JPEG)
  22.         Field             : None
  23.         Bytes per Line    : 0
  24.         Size Image        : 1843200
  25.         Colorspace        : sRGB
  26.         Transfer Function : Default (maps to sRGB)
  27.         YCbCr/HSV Encoding: Default (maps to ITU-R 601)
  28.         Quantization      : Default (maps to Full Range)
  29.         Flags             : 
  30. Crop Capability Video Capture:
  31.         Bounds      : Left 0, Top 0, Width 1280, Height 720
  32.         Default     : Left 0, Top 0, Width 1280, Height 720
  33.         Pixel Aspect: 1/1
  34. Selection: crop_default, Left 0, Top 0, Width 1280, Height 720, Flags: 
  35. Selection: crop_bounds, Left 0, Top 0, Width 1280, Height 720, Flags: 
  36. Streaming Parameters Video Capture:
  37.         Capabilities     : timeperframe
  38.         Frames per second: 30.000 (30/1)
  39.         Read buffers     : 0
  40.                      brightness 0x00980900 (int)    : min=-64 max=64 step=1 default=0 value=0
  41.                        contrast 0x00980901 (int)    : min=0 max=95 step=1 default=0 value=0
  42.                      saturation 0x00980902 (int)    : min=0 max=100 step=1 default=64 value=64
  43.                             hue 0x00980903 (int)    : min=-2000 max=2000 step=1 default=0 value=0
  44.  white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
  45.                           gamma 0x00980910 (int)    : min=100 max=300 step=1 default=100 value=100
  46.            power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1
  47.       white_balance_temperature 0x0098091a (int)    : min=2800 max=6500 step=1 default=4600 value=4600 flags=inactive
  48.                       sharpness 0x0098091b (int)    : min=0 max=7 step=1 default=2 value=2
  49.          backlight_compensation 0x0098091c (int)    : min=0 max=1 step=1 default=1 value=1
  50.                   exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=3
  51.               exposure_absolute 0x009a0902 (int)    : min=10 max=2047 step=1 default=384 value=384 flags=inactive
  52.          exposure_auto_priority 0x009a0903 (bool)   : default=0 value=1

复制代码 有以上信息可以看出,设备支持分辨率1280×720,支持MJPEG格式。

linux usb摄像头索引的获取

一般情况下,笔记本自带的摄像头的索引号为0,而通过USв插入的摄像头一般为1(只有两个摄像头的情况下)。

但是,当笔记本插着USв摄像头开机时,有可能USв的索引变为0,如果还是使用原来的索引,便会产生错误或者结果误差。为此,我写了个程序自动获取USв摄像头的索引。

原理与实现

在Linux系统下,所有设备的均被当作文件的形式进行管理和交互(不是很懂),而摄像头对应的文件在/sys/class/video4linux/下,而每个摄像头均有name文件记录摄像头的名字。

因此,可以根据该文件得到摄像头的名称,而摄像头所在的文件夹(如video0)可以得到索引。

  1. def get_usb_camera_index():
  2.     # 获取USв摄像头的索引
  3.     camera_path = Path(‘/sys/class/video4linux/’)
  4.     camera_list = list(camera_path.glob(‘video*’))
  5.     camera_list.sort()
  6.     index = 0
  7.     for i in range(len(camera_list)):
  8.         camera = camera_list[i]
  9.         name_file = camera.joinpath(‘name’)
  10.         with open(name_file, ‘r’) as f:
  11.             info = f.readline()
  12.             if ‘USв’ in info:
  13.                 index = i
  14.                 break
  15.     return index

复制代码
总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持软件技术网。

原创文章,作者:starterknow,如若转载,请注明出处:https://www.starterknow.com/105992.html

联系我们