2017-04-04 4 views
0

여기에 약간 이상한 문제가 있습니다. 간단히 말하면, 저는 카메라 (Mercury 2.0 웹캠 임베디드 카메라)에서 프레임을 잡으려고하는데 예상대로 진행되지 않습니다.잡아 당길 때 OpenCV 3.2가 선택 타임 아웃을 제공하지만 fswebcam이 작동합니다.

BeagleBone Black에서 데비안 제시를 실행 중입니다. OpenCV 3.2를 설치하고 테스트 한 결과, 내 Vision 알고리즘이 imread()로 잘 작동하므로 카메라를 사용할 시간입니다. 내가 처음 만난 문제는 카메라가 우분투 16.04에서 작동하지 않는다는 것입니다. 그래서 저는 데비안 Jessie로 바꿨고 fswebcam (fswebcam -r 1600x1200 -jpeg 95 -D 0 test.jpg)을 사용하여 1600x1200 프레임을 초 단위로 잡을 수있었습니다.

효과가 있으면 매우 만족해서 VideoCapture >> Mat가 예상대로 작동하지 않아서 이제 다시 짜증이났습니다. 여기 키커가 있는데, 해상도를 800x600으로 설정하면 정상적으로 작동합니다. 해상도를 1600x1200으로 설정하면 우선 시간 초과 선택이 표시되지만 그 다음에 즉시 결과가 나옵니다. 프레임을 잡을 수는 있지만 첫 번째 시도에서는 그렇지 않습니다. 날 타이밍 문제라고 생각해. 그래서 grab() 및 retrieve()를 사용하여 시도했지만 도움이되지 않습니다.

다른 사람에게 좋은 아이디어/제안/조언이나 경험이 있습니까?

일부 사양 : 또한

$ uname -a 
Linux arm 4.9.13-bone4 #1 [date] armv7l GNU/Linux 

$ gcc --version 
gcc (Debian 4.9.2-10) 4.9.2 

$ v4l2-ctl --all 
Driver Info (not using libv4l2): 
    Driver name: uvcvideo 
    Card type: Mercury USB2.0 Camera 
    Bus info: usb-musb-hdrc.1.auto-1.1 
    Driver version: 4.9.13 

$ fswebcam -r 1600x1200 --jpeg 95 -D 0 test.jpg 
Opening /dev/video0 
Trying source module v4l2... 
/dev/video0 opened. 
No input was specified, using the first. 
Capturing frame... 
Captured frame in 0.00 seconds. 
Processing captured image... 
Setting output format to JPEG, quality 95 
Writing JPEG image to 'test.jpg'. 

Basic 코드 기능

VideoCapture cam(0); 
cam.set(CAP_PROP_FRAME_WIDTH,width); 
cam.set(CAP_PROP_FRAME_HEIGHT,height); 

    /*check cam.isOpened()*/ 

    /*echo some camera properties*/ 

if(cam.grab()) cam.retrieve(frame); 

imwrite(filename, frame); 

cam.release(); 

, 나는 시도 :

modprobe uvcvideo nodrop=1 timeout=6000 

그러나 나는 또한 사용하여 시도 ... 도움이되지 않았다 예전의 CvCapture 클래스이지만 도움이되지 않았습니다.

하루 종일 작업 중이며 몇 가지 추가 사항을 생각했습니다. BeagleBone은 USB 장치를 연결하거나 분리하는 데 어려움을 겪고있는 것 같습니다. 내가 찍은 사진을 확인하고 싶었 기 때문에 USB 플래시 드라이브를 연결하고, 마운트하고, 마운트 해제하고, 꺼내고, 사진을 감상했습니다. 그러면 fswebcam을 사용해도 카메라가 더 이상 작동하지 않습니다. 다시 작동 시키려면 다시 부팅해야했습니다.

또한 fswebcam을 사용하여 몇 가지 2MP 사진을 빠르게 연속으로 촬영하면 문제가있는 것처럼 보입니다. 때로는 다시 부팅해야하기 전에 몇 번이나 사진을 찍을 수 있습니다. 2MP 사진을 찍을 수 없으면 800x600 사진을 찍을 수 있습니다. 단순히 USB를 다시 연결해도 도움이되지 않습니다.

답변

1

이 동일한 문제를 다루는 모든 사람에게 (시간 초과 선택). 나는 이것을 다른 사람들에게 도움이된다면 모든 사람들에게 효과가 있을지 모르겠다.하지만 나는 그것을 좋아한다.

문제는 아마도 사용하려는 카메라가 semi-UVC와 호환되기 때문일 수 있습니다. UVC는 실제로 UVC와 호환되지 않는 제품으로 판매되는 제품에 익숙합니다. 그래서 그들은 버크를이라고 추가했습니다. 여기에 대해 자세히 알아보기 : UVC FAQ

그렇다면 선택 시간 초과를 수정하는 방법은 무엇입니까? 글쎄요, 분명히 쉬운 일입니다. 첫째, 우리는 우리가 다시 활성화하지만, 대역폭 특질과 활성화 uvcvideo 모듈을

# rmmod uvcvideo 

다음을 닫습니다; 그리고 nodrop 및 timeout 플래그도 추가하십시오. 평균 프레임 속도 :

# modprobe uvcvideo quirks=128 nodrop=1 timeout=6000 

당신은 솔루션, 재부팅 한 후 작동 나는이 철저하게 해결 한 후 내 USB2.0 카메라와 함께 BeagleBone 블랙을 테스트

당신의 .bash_profile에 그 라인을 모두 추가 할 경우 4 (빛에 크게 의존 함, 어두운 환경에서 5 FPS를 얻음) 평균 오류율 : 2.4 % (2000 read() '중에서 1953 성공적인 사진)

루프에서 100 프레임 잡아서 테스트 타임스. 내 .bash_profile 편집이 제대로 작동하는지 확인하고 새로운 재부팅 후에 성능 차이가 있는지 확인하기 위해 10시 후 재부팅했습니다. 없음)