-1

我正在尝试使用 opencv 和 openkinect 库构建人脸检测。对于图像输入,我想使用 xbox kinect v2。我的代码基于 opencv 库中的人脸检测示例。我正在使用 Mac。

到目前为止,这是我的代码:

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 相机(使用内置功能“捕获”和“视频”-add-on)而不是 kinect 时,一切正常。

谁能帮忙?

4

1 回答 1

1

将来,请尝试提供MCVE。这意味着从一个空白草图重新开始,只添加足够的代码以便我们可以看到问题。在您的情况下,我们不需要查看任何 kinect 代码。只需加载一个硬编码的图像并将其传递给 OpenCV。

这是一个示例草图,正是这样做的。我从人类维基百科页面获得了图像 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人脸检测

请注意,我每帧都opencv.detect()调用该函数。您只是从 调用它,这意味着您仅在第一帧中检测面部。setup()

如果您仍然无法使其正常工作,那么您将不得不进行一些调试。尽量隔离你的问题。摆脱 kinect 代码,只使用硬编码的图像。对通过您的 kinect 获得的图像进行屏幕截图,并使用它而不是实时流。以较小的步骤工作,这样您就可以在遇到困难时发布更具体的问题(很难帮助解决一般的“这不起作用”问题 - 帮助解决具体的“我尝试过 X,预期 Y,但是得到 Z 而不是”类型的问题)。祝你好运。

于 2016-09-13T23:32:22.993 回答