Обнаружение лиц в видеофайле. Ошибка в использовании типа данных

У меня следующий вопрос. Я работаю с Matlab 2016. Я хочу обнаружить лица в видеофайле, используя алгоритм Виолы-Джонса. Когда я пытаюсь ввести видеофайл в оператор 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, double, single, 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);

person Peter Zaytsev    schedule 09.04.2017    source источник


Ответы (1)


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);
person Honeybear    schedule 10.04.2017