【发布时间】:2015-02-16 23:24:10
【问题描述】:
我尝试使用在 Internet 上找到的源代码创建一个微笑检测器。它可以检测面部并且效果很好。它使用 Haar 分类器,我找到了用于微笑识别的 Haar 分类器并尝试了它,但是它不起作用。我尝试以与识别面部相同的方式使用它。用眼睛分类器尝试了同样的方法——它奏效了。我在 opencv/data 文件夹中找到的所有分类器,有人可以给我一个提示,我可以用给定的代码做更多的事情吗?
import java.io.File;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.highgui.Highgui;
import org.opencv.objdetect.CascadeClassifier;
public class SmileDetector {
public void detectSmile(String filename) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
System.out.println("\nRunning SmileDetector");
CascadeClassifier faceDetector = new CascadeClassifier(new File(
"src/main/resources/haarcascade_frontalface_alt.xml").getAbsolutePath());
CascadeClassifier smileDetector = new CascadeClassifier(
new File("src/main/resources/haarcascade_smile.xml").getAbsolutePath());
Mat image = Highgui.imread(filename);
MatOfRect faceDetections = new MatOfRect();
MatOfRect smileDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));
for (Rect rect : faceDetections.toArray()) {
Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255, 0));
}
Mat face = image.submat(faceDetections.toArray()[0]);
smileDetector.detectMultiScale(face, smileDetections);
for (Rect rect : smileDetections.toArray()) {
Core.rectangle(face, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255, 0));
}
String outputFilename = "ouput.png";
System.out.println(String.format("Writing %s", outputFilename));
Highgui.imwrite(outputFilename, image);
Highgui.imwrite("ee.png", face);
}
}
【问题讨论】:
-
您好,我也在尝试做同样的事情,您找到解决问题的方法了吗?
-
还没有,等我在家的时候,我会尝试使用 haar 级联来解决这个问题,因为我相信问题出在那儿。
-
这个帖子有什么更新吗?
-
不行,我试过把鬼王的代码翻译成java,但是没有成功
-
在哪里可以解决您的问题?解决方案是什么?