Обработка OpenCV+ - FaceDetection в фильме

Я использую "Обработка" с OpenCV Lib и хотел переписать пример кода от создателей Git, чтобы вместо определения лица при захвате камеры я загружал видео (.mp4).

Ссылка на Git и пример кода (который работает): Ссылка

Вот мой эскиз:

import processing.video.*;
import gab.opencv.*;
import java.awt.Rectangle;

OpenCV opencv;
Movie myMovie;
Rectangle[] faces;

void setup() {
  size(480, 270);

  myMovie = new Movie(this, "people3.mp4");
  myMovie.loop();
  opencv = new OpenCV(this, myMovie.width, myMovie.height);
  opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);
}

void movieEvent(Movie myMovie) {
  myMovie.read();
}

void draw() {

  background(0);
  if (myMovie.available()) {    

    opencv.loadImage(myMovie);
    faces = opencv.detect();
    image(myMovie, 0, 0);

    if (faces != null) {
      for (int i = 0; i < faces.length; i++) {
        strokeWeight(2);
        stroke(255, 0, 0);
        noFill();
        rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
      }
    }
  }
}

То, что я получаю, это

IndexOutOfBoundsException: индекс: 3, размер: 0

на openCV.loadImage(myMovie), и я не знаю почему.

Ценю любую помощь!

1 ответ

Сделано это работает. Не спрашивайте меня почему, но необходимо вызвать обе функции: Movie.loop() и Movie.play(). Вот и все:

import processing.video.*;
import gab.opencv.*;
import java.awt.Rectangle;

OpenCV opencv;
Movie myMovie;
Rectangle[] faces;

void setup() {
  size(480, 270);

  myMovie = new Movie(this, "people3.mp4");
  opencv = new OpenCV(this, 480, 270);

  opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);
  myMovie.loop();
  myMovie.play();
}

void draw() {
   //Movie needs time to load into canvas, so we wait until we get a height
   while (myMovie.height == 0 )  delay(10); 
   image(myMovie, 0, 0);
   opencv.loadImage(myMovie);
   faces = opencv.detect();


  if (faces != null) {
    for (int i = 0; i < faces.length; i++) {
      strokeWeight(2);
      stroke(255, 0, 0);
      noFill();
      rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
    }
  }
}


void movieEvent(Movie myMovie) {
  myMovie.read();
}
Другие вопросы по тегам