2017-04-09 37 views
0

我有以下問題。 我正在使用matlab 2016. 我想使用Viola-Jones算法來檢測視頻文件中的人臉。 當我嘗試在step語句輸入的視頻文件,我得到以下錯誤:檢測視頻文件中的人臉。使用數據類型時出錯

Error using 
    vision.CascadeObjectDetector/validateInputsImpl 
    (line 330) 
    Expected input number 2 to be 
    one of these types: 

    uint8, uint16, double, single,int16 

    Instead its type was 
    vision.VideoFileReader. 

    Error in VJ1_video (line 12) 
    bboxes = step(faceDetector, videoFReader); 

我明白VideoFileReader莫名其妙的類型應轉換爲的類型之一:UINT8,UINT16,雙,單身,int16。 但我不明白如何做到這一點。請告訴我。 這裏是我的程序代碼:

clear all; 
%Load the video using a video reader object 
    videoFReader = vision.VideoFileReader('D:\465.avi'); 
%Create a detector object. 
    faceDetector = vision.CascadeObjectDetector; 
%Detect faces. 
    bboxes = step(faceDetector, videoFReader); 
%Annotate detected faces 
    IFaces = insertObjectAnnotation(videoFReader, 'rectangle', bboxes, 'Лицо'); 
%Create a video player object to play the video file. 
    videoPlayer = vision.VideoPlayer; 

%Use a while loop to read and play the video frames. 
    while ~isDone(videoFReader) 
    videoFrame = videoFReader(); 
    videoPlayer(videoFrame); 
    end 
%Release the objects. 
    release(videoPlayer); 
    release(videoFReader); 

回答

0

的CascadeObjectDetector工作在單一幀(圖像),而不是幀(視頻)的序列。因此,如您所建議的那樣,step函數的輸入是圖像。更改您的代碼,以便在遍歷幀時進行人臉檢測。

的(另)建議:

%Load the video using a video reader object 
     videoFReader = vision.VideoFileReader('D:\465.avi'); 
    %Create a video player object to play the video file. 
     videoPlayer = vision.VideoPlayer; 
    %Create a detector object. 
     faceDetector = vision.CascadeObjectDetector; 

    %Use a while loop to read and play the video frames. 
     while ~isDone(videoFReader) 
     videoFrame = videoFReader(); 
     %Detect faces. 
     bboxes = step(faceDetector, videoFReader); 
     %Annotate detected faces 
     IFaces = insertObjectAnnotation(videoFReader, 'rectangle', bboxes, 'Лицо'); 
     %Show annotated frames IFaces (instead of videoFrame) 
     videoPlayer(IFaces); 
     end 

    %Release the objects. 
     release(videoPlayer); 
     release(videoFReader);