현재 문제 및 증상: 나는 그것을 각각 찾았다.개인의Raspbian에서 물리적 USB 웹캠을 연결했는데,한 쌍그런/개발자/비디오장치가 생성되었습니다. 1개의 실제 카메라를 이용하여 이미지를 캡쳐하려고 할 때웹캠다음 중 하나를 지정하여/개발자/비디오한 쌍의 장치에서 그 중 하나는 다음과 같은 오류로 인해 실패합니다.I/W 오류다른 하나는 성공할 것입니다.
내가 도움을 원하는 것: 오류 생성을 방지하고 호출할 수 있도록 어떤 쌍이 실패할지 감지/미리 결정하는 방법을 찾고 있습니다.웹캠회원에게 이의를 제기하다/개발자/비디오한 쌍이 작동합니다.
배경: 멀티 카메라 어레이에 사용하는 USB 웹캠이 몇 개 있습니다. 루프의 각 카메라에서 이미지를 캡처하고 싶습니다. 나는 각각을 반복하려고 시도했다./개발자/비디오장치를 검색하고 이 페어링을 발견했습니다./개발자/비디오각 카메라의 장치 이름은 성공하고 다른 카메라는 실패합니다.
이것웹캠호출 실패(즉, ioctl 오류 발생)는 다음 메시지를 생성합니다.
입력 0을 쿼리할 수 없습니다.
VIDIOC_ENUMINPUT: 장치의 ioctl이 부적절합니다.
전체 요청: 누가 나에게 간단한 방법을 제공할 수 있나요?grep또는찾다/dev/video* 또는 /sys/class/video4linux/에 있는 모든 "유효한" 장치/fswebcam에서 요청한 유효한 장치가 아닌 경우 오류 없이 tree 또는 간단한 셸 명령을 사용하여 알려줄 수 있습니까?
추가 정보: 아래에는 출력이 나와 있습니다.v4l2-ctl각 장치를 조회하여 표시됩니다.
이것v4l2-ctl출력/개발자/비디오*그럴 것이다성공:
$ v4l2-ctl --device=/dev/video0 --all
Driver Info (not using libv4l2):
Driver name : uvcvideo
Card type : UNIQUESKY_CAR_CAMERA: Integrate
Bus info : usb-3f980000.usb-1.2.1
Driver version: 4.19.58
Capabilities : 0x84A00001
Video Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 1920/1080
Pixel Format : 'MJPG'
Field : None
Bytes per Line : 0
Size Image : 4147200
Colorspace : sRGB
Transfer Function : Default
YCbCr/HSV Encoding: Default
Quantization : Default
Flags :
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 1920, Height 1080
Default : Left 0, Top 0, Width 1920, Height 1080
Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 1920, Height 1080
Selection: crop_bounds, Left 0, Top 0, Width 1920, Height 1080
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 30.000 (30/1)
Read buffers : 0
brightness (int) : min=-64 max=64 step=1 default=-8193 value=0
contrast (int) : min=0 max=95 step=1 default=57343 value=0
saturation (int) : min=0 max=100 step=1 default=57343 value=80
hue (int) : min=-2000 max=2000 step=1 default=-8193 value=0
white_balance_temperature_auto (bool) : default=1 value=1
gamma (int) : min=64 max=300 step=1 default=57343 value=84
gain (int) : min=1 max=8 step=1 default=57343 value=1
power_line_frequency (menu) : min=0 max=2 default=1 value=1
white_balance_temperature (int) : min=2800 max=6500 step=1 default=57343 value=3980 flags=inactive
sharpness (int) : min=1 max=7 step=1 default=57343 value=2
backlight_compensation (int) : min=0 max=128 step=0 default=20478 value=0
exposure_auto (menu) : min=0 max=3 default=0 value=3
exposure_absolute (int) : min=10 max=626 step=1 default=156 value=156 flags=inactive
다음 문제를 일으키는 대체 장치를 사용해 보면 다음이 반환됩니다.다음 오류로 인해 ioctl이 실패했습니다.
$ v4l2-ctl --device=/dev/video1 --all
Driver Info (not using libv4l2):
Driver name : uvcvideo
Card type : UNIQUESKY_CAR_CAMERA: Integrate
Bus info : usb-3f980000.usb-1.2.1
Driver version: 4.19.58
Capabilities : 0x84A00001
Video Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04A00000
Streaming
Extended Pix Format
Priority: 2
.
두 v4l2-ctl 출력 간의 중요한 차이점은 "비디오 캡처" 기능이 두 번째 /dev/video* 개체의 "Device Caps" 아래에 존재하지 않지만 첫 번째 장치의 "Device Caps" 아래에 존재한다는 것입니다. 확실히웹캠장치에 "비디오 캡처" 기능이 있을 것으로 예상하고 요청하고 "장치 캡"이 없으면 IOCTL 오류가 발생합니다.
불행하게도 v4l2-cntl 출력은 매우 장황하며 "비디오 캡처"라는 용어가 "기능" 아래의 두 목록에 나타납니다. 그러나 한 가지 경우에만 "Device Caps" 아래에 다시 나타납니다.
이로 인해 grep과 같은 것을 사용하여 테스트를 작성하는 것이 더 어려워지고 이러한 보고서 형식의 변경으로 인해 이를 기반으로 하는 테스트가 불안정해질 수 있다는 점이 걱정됩니다. 기기캡만 검색하는 방법이 있나요?
이 기능을 갖춘 카메라 목록을 생성하고 싶지만 어떻게 해야 할지 모르겠습니다. 현재 가장 좋은 해결책은 "비디오 캡처"가 두 번 나열된 것을 찾는 것입니다.
답변1
카메라의 경우 일반적으로 첫 번째 장치는 실제 공간을 캡처하는 것입니다.
따라서 ls /dev/video
목록이 생성되어 목록의 첫 번째 항목을 캡처합니다.