2017-10-31 3 views
0

OpenCV Lib에서 Processing을 사용하고 있으며 작성자 Git의 예제 코드를 다시 작성하여 카메라 캡처에서 얼굴 인식을 수행하는 대신 비디오 (.mp4). (노력) 힘내 및 예제 코드에OpenCV + Processing - 무비에서의 FaceDetection

링크 :

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가 : 여기 Link

내 스케치입니다 : 색인 : 3, 크기 : 0

at openCV.loadImage (myMovie) 그리고 이유를 모르겠습니다.

감사합니다.

+0

, 나는 [시도 깨는 것 당신의 문제를 더 작은 단계로] (http://happycoding.io/tutorials/how-to/program) 한 번에 하나씩 단계를 수행하십시오. 예를 들어, 영화를 상영하는 기본 스케치를 얻을 수 있습니까? –

+0

이 책 읽었습니까? https://forum.processing.org/two/discussion/18536/opencv-problem-with-bootcamp – Harry

+0

@Harry 거기에 그렇게 해 봤어 :)하지만 여전히 작동하지 않습니다. 공식 openCV Reference를 검사 할 때 loadImage() 함수에서 Movie 인수를 사용할 수 있어야 함을 의미하는 코드를 찾을 수도 있습니다. – Jawah

답변

0

제작되었습니다. .. 여기 왜 나 한테 물어하지만이 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(); 
}