LINUX.ORG.RU

Как повысить разрешение веб-камеры?

 , , , ,


1

2

Есть у меня какая-та Microdia USB 2.0 camera(0c45:62f1), на винде определялась как Xonix. Максимальное заявленное разрешение: 1280х720 пикселей, что можно выбить на винде ТОЛЬКО с 32-битным драйвером. На 64-битной винде ясное дело драйвер не шёл и максимальное разрешение было 640х480.

На линуксе та же беда. Установлена Ubuntu(64-бит), камеру определяет как /dev/Video0(даже определяет её как /dev/Video1, но с неё уже идут ошибки при использовании). На форуме видел идею с v4l2-ctl -d /dev/video0 -v width=640,height=480, но оно ничего не делает. Я даже не смог найти что делает агрумент -v…

Вывод v4l2-ctl –all:

tyseex@tyseex-desktop:~$ v4l2-ctl --all
Driver Info:
	Driver name      : uvcvideo
	Card type        : USB 2.0 Camera: USB Camera
	Bus info         : usb-0000:00:1d.0-1.3
	Driver version   : 6.3.5
	Capabilities     : 0x84a00001
		Video Capture
		Metadata Capture
		Streaming
		Extended Pix Format
		Device Capabilities
	Device Caps      : 0x04200001
		Video Capture
		Streaming
		Extended Pix Format
Media Driver Info:
	Driver name      : uvcvideo
	Model            : USB 2.0 Camera: USB Camera
	Serial           : 
	Bus info         : usb-0000:00:1d.0-1.3
	Media version    : 6.3.5
	Hardware revision: 0x00000100 (256)
	Driver version   : 6.3.5
Interface Info:
	ID               : 0x03000002
	Type             : V4L Video
Entity Info:
	ID               : 0x00000001 (1)
	Name             : USB 2.0 Camera: USB Camera
	Function         : V4L2 I/O
	Flags            : default
	Pad 0x01000007   : 0: Sink
	  Link 0x02000013: from remote pad 0x100000a of entity 'Extension 5' (Video Pixel Formatter): Data, Enabled, Immutable
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
	Width/Height      : 640/480
	Pixel Format      : 'YUYV' (YUYV 4:2:2)
	Field             : None
	Bytes per Line    : 1280
	Size Image        : 614400
	Colorspace        : sRGB
	Transfer Function : Rec. 709
	YCbCr/HSV Encoding: ITU-R 601
	Quantization      : Default (maps to Limited Range)
	Flags             : 
Crop Capability Video Capture:
	Bounds      : Left 0, Top 0, Width 640, Height 480
	Default     : Left 0, Top 0, Width 640, Height 480
	Pixel Aspect: 1/1
Selection Video Capture: crop_default, Left 0, Top 0, Width 640, Height 480, Flags: 
Selection Video Capture: crop_bounds, Left 0, Top 0, Width 640, Height 480, Flags: 
Streaming Parameters Video Capture:
	Capabilities     : timeperframe
	Frames per second: 30.000 (30/1)
	Read buffers     : 0

User Controls

                     brightness 0x00980900 (int)    : min=-128 max=127 step=1 default=-5 value=-5
                       contrast 0x00980901 (int)    : min=0 max=127 step=1 default=28 value=28
                     saturation 0x00980902 (int)    : min=0 max=127 step=1 default=64 value=64
                            hue 0x00980903 (int)    : min=-28 max=40 step=1 default=0 value=0
                          gamma 0x00980910 (int)    : min=72 max=255 step=1 default=85 value=85
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1 (50 Hz)
				0: Disabled
				1: 50 Hz
				2: 60 Hz
                      sharpness 0x0098091b (int)    : min=0 max=50 step=1 default=20 value=20
         backlight_compensation 0x0098091c (int)    : min=0 max=2 step=1 default=1 value=1

При вводе v4l2-ctl -d /dev/video0 -v width=640,height=480 вообще ничего не произойдёт.

Также видел идею с настройкой кропов v4l2-ctl -d /dev/video0 --set-crop top=10,left=10,width=1280,height=720, но тут только пишет об неизвестном аргументе.

Может быть подскажете как выжать заявленные 720P?

Ну, если ваша камера умеет в разрешения, и драйвер это поддерживает, то задать нужное можно так

v4l2-ctl --verbose -d 0 --set-fmt-video=width=2560,height=1440,pixelformat=MJPG

где pixelformat может отличаться, разные камеры в разных форматах вывод отдавать умеют.

Webcamoid может показать, какие разрешения и форматы умеет ваша камера. Ну, или в OBS глянуть можно.

lucentcode ★★★★★
()

Судя по https://ipeerbhai.wordpress.com/2013/09/01/usb-camera-on-beaglebone-black/ получить выхлоп в более высоком разрешении не получится. Вероятно на винде драйвер апскейлил картинку до 720p, а в реальности устройство умеет только 640x480. Хотя, может камера умеет в UVC, но режим переключения формата реализовали проприетарный, не тот, что должен быть по стандарту UVC, и из-за этого камера не переключается в нужный формат в 720p. Кто его знает…

А что команда

v4l2-ctl --list-formats-ext

выдаёт?

lucentcode ★★★★★
()
Ответ на: комментарий от lucentcode

Только это:

tyseex@tyseex-desktop:~$ v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
	Type: Video Capture

	[0]: 'YUYV' (YUYV 4:2:2)
		Size: Discrete 640x480
			Interval: Discrete 0.033s (30.000 fps)
			Interval: Discrete 0.040s (25.000 fps)
			Interval: Discrete 0.050s (20.000 fps)
			Interval: Discrete 0.067s (15.000 fps)
			Interval: Discrete 0.100s (10.000 fps)
			Interval: Discrete 0.200s (5.000 fps)
		Size: Discrete 352x288
			Interval: Discrete 0.033s (30.000 fps)
			Interval: Discrete 0.040s (25.000 fps)
			Interval: Discrete 0.050s (20.000 fps)
			Interval: Discrete 0.067s (15.000 fps)
			Interval: Discrete 0.100s (10.000 fps)
			Interval: Discrete 0.200s (5.000 fps)
		Size: Discrete 320x240
			Interval: Discrete 0.033s (30.000 fps)
			Interval: Discrete 0.040s (25.000 fps)
			Interval: Discrete 0.050s (20.000 fps)
			Interval: Discrete 0.067s (15.000 fps)
			Interval: Discrete 0.100s (10.000 fps)
			Interval: Discrete 0.200s (5.000 fps)
		Size: Discrete 176x144
			Interval: Discrete 0.033s (30.000 fps)
			Interval: Discrete 0.040s (25.000 fps)
			Interval: Discrete 0.050s (20.000 fps)
			Interval: Discrete 0.067s (15.000 fps)
			Interval: Discrete 0.100s (10.000 fps)
			Interval: Discrete 0.200s (5.000 fps)
		Size: Discrete 160x120
			Interval: Discrete 0.033s (30.000 fps)
			Interval: Discrete 0.040s (25.000 fps)
			Interval: Discrete 0.050s (20.000 fps)
			Interval: Discrete 0.067s (15.000 fps)
			Interval: Discrete 0.100s (10.000 fps)
			Interval: Discrete 0.200s (5.000 fps)
Tyse_EX
() автор топика
Ответ на: комментарий от lucentcode
v4l2-ctl --verbose -d 0 --set-fmt-video=width=1280,height=720,pixelformat=YUYV

Ничего не меняет. Только выдаёт:

tyseex@tyseex-desktop:~$ v4l2-ctl --verbose -d 0 --set-fmt-video=width=1280,height=720,pixelformat=YUYV
VIDIOC_QUERYCAP: ok
VIDIOC_G_FMT: ok
VIDIOC_S_FMT: ok
Format Video Capture:
	Width/Height      : 640/480
	Pixel Format      : 'YUYV' (YUYV 4:2:2)
	Field             : None
	Bytes per Line    : 1280
	Size Image        : 614400
	Colorspace        : sRGB
	Transfer Function : Rec. 709
	YCbCr/HSV Encoding: ITU-R 601
	Quantization      : Default (maps to Limited Range)
	Flags             : 

Кстати камера реально не понимает, что такое MJPG.

Tyse_EX
() автор топика
Ответ на: комментарий от Tyse_EX

Значит она не умеет гнать картинку в MJPG. Жаль. Хотя, с таким сенсором это не велика потеря. Оно обычно более быстро отдаёт поток, хоть изображение и с потерями при этом сжато, чем YUYV. Но, на разрешениях ниже FullHD и YUYV даже по USB 2.0 вполне достаточно для стабильной отдачи потока в 30fps, а в некоторых расширениях и до 60fps. Видно камера старая, с сенсором с небольшим расширением, и ей дополнительные форматы пикселей потока не нужны.

Моя камера умеет

[0]: 'YUYV' (YUYV 4:2:2)
[1]: 'MJPG' (Motion-JPEG, compressed)

с разрешениями до


		Size: Discrete 2592x1944
		Interval: Discrete 0.033s (30.000 fps)

где высокие разрешения с нормальным фреймрейтом при обычном разрешении получить можно только с MJPG. Видел камеры, что умеют гнать сразу в h264 поток, те вплоть до 4k вполне себе по USB поток неплохо гоняют.

lucentcode ★★★★★
()
Последнее исправление: lucentcode (всего исправлений: 1)