2016-09-12 11 views
-1

opencv 및 openkinect 라이브러리로 얼굴 인식을 시도하고 있습니다. 이미지 입력을 위해 나는 xbox kinect v2를 사용하고 싶다. opencv 라이브러리 안의 얼굴 검출 예제에 기초하고 있습니다. 나는 맥에서 일하고있다.처리에서 opencv, open kinect 및 kinect v2로 얼굴 인식

이 내 코드는 지금까지 있습니다 :

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

/* KINECT */ 
import org.openkinect.freenect.*; 
import org.openkinect.freenect2.*; 
import org.openkinect.processing.*; 

OpenCV opencv; 
Kinect2 kinect2; 

Rectangle[] faces; 

void setup() { 
    opencv = new OpenCV(this, 640/2, 480/2); 
    size(640, 480); 
    // Kinectv2 
    kinect2 = new Kinect2(this); 
    kinect2.initVideo(); 
    kinect2.initDevice(); 

    opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE); 
    faces = opencv.detect(); 
} 

void draw() { 
    opencv.loadImage(kinect2.getVideoImage()); 
    image(kinect2.getVideoImage(), 0, 0, 640, 480); 

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

문제가 줄 것으로 보인다 "opencv.loadImage (kinect2.getVideoImage());" 탐지가 작동하지 않기 때문에. isight 카메라로 작업 할 때 ("capture"및 "video"-add-on과 같은 빌드 인 기능 사용) 모든 것이 완벽하게 작동합니다.

아무도 도와 줄 수 있습니까?

+0

당신은 훨씬 더 구체적이어야 할 것입니다. 문제가 그 라인에있는 것 같으면 정확히 무엇을 의미합니까? 작동하지 않는다고 정확히 말하면 무슨 뜻입니까? 무슨 일이 일어날 것으로 예상됩니까? 대신 무엇이 발생합니까? 다른 행동이 시작되는 코드 줄은 무엇입니까? –

+0

opencv.loadImage (kinect2.getVideoImage()); // 여기서 나는 opencv가 작동하지 않는 kinect에 의해 기록 된 시각적 데이터를 처리 할 것을 기대한다. "문제는 그 줄에 있어야합니다"라는 말은 opencv가 "kinect2.getVideoImage()"함수에서 가져온 데이터를 처리 할 수 ​​없다는 것과 관련이 있으며 다른 형식이 필요할 수도 있다는 것입니다 입력의. image (kinect2.getVideoImage(), 0, 0, 640, 480); // 여기서 나는 xbox kinect가 기록한 시각적 데이터의 출력을 기대하고있다. – mindcraft

답변

1

미래에는 MCVE을 제공해주세요. 이는 빈 스케치로 시작하고 문제를 볼 수 있도록 충분한 코드 만 추가하는 것을 의미합니다. 귀하의 경우 kinect 코드를 볼 필요가 없습니다. 그냥 하드 코딩 된 이미지를로드하고 OpenCV로 전달하십시오.

다음은 정확히 그런 스케치의 예입니다. human Wikipedia page에서 이미지 URL을 받았습니다.

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

PImage image; 
OpenCV opencv; 

void setup() { 
    size(500, 500); 
    image = loadImage("https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/A_young_Man_and_Lady.png/800px-A_young_Man_and_Lady.png"); 
    image.resize(width, height); 

    opencv = new OpenCV(this, width, height); 
    opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE); 
} 

void draw() { 

    image(image, 0, 0); 

    opencv.loadImage(image); 
    Rectangle[] faces = opencv.detect(); 

    noFill(); 
    stroke(255, 0, 0); 
    strokeWeight(3); 
    for (Rectangle face : faces) { 
    rect(face.x, face.y, face.width, face.height); 
    } 
} 
나는 opencv.detect() 기능 모든 프레임를 호출하고있어

OpenCV face detection

알 수 있습니다. setup()에서 호출하는 것입니다. 즉, 첫 번째 프레임의 얼굴 만 감지합니다.

여전히 작동하지 않는다면 디버깅을해야 할 것입니다. 가능한 한 문제를 격리하십시오. kinect 코드를 없애고 하드 코딩 된 이미지 만 사용하십시오. kinect를 통해 얻은 이미지를 화면 캡처하여 라이브 스트림 대신 사용하십시오. 더 작은 단계로 작업하면 방해받을 때 좀 더 구체적인 질문을 게시 할 수 있습니다 (일반적인 "이 기능이 작동하지 않습니다"라는 질문에 도움이되기 어렵습니다. 특정 X를 사용하여 예상 한 Y를 사용하는 것이 훨씬 쉽습니다. 대신에 Z가 있습니다. "질문 입력). 행운을 빕니다.

+0

답장과 조언을 부탁드립니다. 이후이 문제에 대한 해결책을 찾지 못했기 때문에 얼굴 인식 기능을 통합 한 공식 Xbox Kinect SDK와 함께 작동하는 "Kinect 2 for Windows"라는 프로세싱 라이브러리를 사용하여 Windows에서 개발을 전환했습니다. 얼굴 인식을 위해 openCV를 기각했습니다. – mindcraft

+0

실제로 하드 코딩 된 단일 이미지로 작업을 시도하는 것은 여기에서 묻기 전에 저의 첫 번째 시도였습니다. 내 문제는 Kinect가 지속적으로받은 데이터가 openCV에 의해 처리 될 수 없다는 것이 었습니다. 적어도 코드에서 어떻게 구현되어야 하는지를 예상했던 방식이 아닙니다. 하지만 지금까지 해본 적이 없지만 opencv.detect()을 setup() - 함수 외부로 호출하고 있습니다. 그렇게 할 시간을 얻 자마자 시도해 보겠습니다. 그래도 의견을 보내 주셔서 감사합니다. – mindcraft