2014-10-10 1 views
0

Matlab의 Image Acquisition Toolbox를 사용하여 기가비트 이더넷을 통해 고속 비디오를 수집하고 있습니다. 나는 프레임 하락과 관련해서 약간의 문제를 겪고있다. 그러나 그것은이 질문에 관한 것이 아니다. 내가 정말로하고 싶은 것은 Matlab에게 에게 프레임 놓기 오류가 발생한 후에도 스크립트를 계속 실행하도록 명령하는 것입니다.Image Acquisition Toolbox가 프레임을 떨어 뜨릴 때 Matlab에서 작업을 시도하거나 잡을 수없는 이유는 무엇입니까?

이 목적을 위해 try/catch 문을 사용했지만 작동하지 않습니다.

어떻게됩니까
%% setting up camera 
while(1) 
    % continue acquiring data forever 

    while(vidObj.FramesAvailable < vidObj.FramesPerTrigger) 
     % wait until we're ready to get the data 
     try 
      pause(.1) 
     catch exception 
      disp "i got an error" 
     end 
    end 

    % get the data 
    [img, t] = getdata(vidObj); 

    %% do something with the data 
    %% ... 
end 

가 가끔씩, 일부 프레임이 누락되어 있다는 것입니다 및 도구 상자는 오류를 발생시킵니다 : 여기 내 코드는 카메라를 설정하고 데이터를 사용에 관한 세부 사항 중 일부를 살려주는 것입니다. 이것은 try 블록 내부에서 발생하지만, Matlab은 예외를 발생시킵니다! 우리는 데이터 try 블록 내부에, 그리고 예외가 아니다 아직 (이하 "일시 정지"문을), 수집 기다리는 동안 당신은 오류가 발생하는 것을 볼 수 있습니다

Error event occurred at 21:08:20 for video input object: Mono8-gige-1. 
gige: Block/frame 1231 is being dropped beecause a lost packet is unable to be resent.... 

Error in script_name (line 82) 
    pause(.1) 

: 출력은 뭔가처럼 보인다 내 디버깅 메시지가 인쇄되지 않고 프로그램이 멈추기 때문에 올바르게 캐치되었습니다.

Matlab에서 try/catch 구조를 관찰하고이 오류가 발생한 후에도 계속할 수 있습니까?

+0

그래서 나는 실제로 오류가 '일시 중지'에서 발생하지 않는다고 확신합니다. vidObj는 백그라운드에서 기다리고 있습니다. 일시 중지가 발생하면 자체 실행 기회가 주어지며 오류가 발생합니다. 오류가 발생하는 vidObj에서 실제 코드를 찾아야합니다. 나는 이것이 도움이되기를 바란다 ... – Trogdor

+0

나는 당신이 옳을 수 있다고 생각하지만, vidObj를위한 코드는 ImageAcquisitionToolbox 어딘가에 묻혀있다. 나는 어디서부터 시작해야할지조차 알지 못했을 것이고, 소스 코드를 사용할 수있게 만들지도 못했을지도 모른다. – cxrodgers

답변

0

나는 그것을 알아 냈다. 오류 메시지는 실제 오류가 아니지만 경고가 더 있습니다. 실행이 멈추지 않습니다. 그러나 vidObj는 프레임 수집을 중단하고 코드는 계속 수집되어 충분한 프레임이 수집 될 때까지 기다립니다.

당신과 같이이 조건에 대한 검사를 삽입 할 수 있습니다 취득 방식이 계속

% wait until enough frames are available 
while(vidObj.FramesAvailable < vidObj.FramesPerTrigger) 
    pause(.1) 

    if strcmp(vidObj.Running, 'off') 
     % It has stopped running, probably because frames were dropped 
     start(vidObj) 
    end 
end 

이제, 프레임 낙하시 개체가 다시 시작 될 것입니다. 분명히 드롭 된 프레임을 복구 할 수 없으므로 비디오에 간격이 생깁니다.

관련 문제