在Java中使用openCV检测面部微笑

时间:2014-09-24 11:46:38

标签: java opencv detection

我正在开发一个openCV应用程序。通过一些代码,我能够检测到正面。我想检测并保持用户微笑的次数。我的想法是在检测到面部后,我在它周围画了一个矩形,然后我会称之为微笑检测。到目前为止,我的结果不那么成功了。我发布了我的面部检测代码,任何人都可以给我任何指针如何从面部检测中的for循环开始。谢谢你。

 public Mat detect(Mat inputframe) {
        Mat mRgba = new Mat();
    Mat mGrey = new Mat();
    MatOfRect faces = new MatOfRect();
    inputframe.copyTo(mRgba);
    inputframe.copyTo(mGrey);
    Imgproc.cvtColor(mRgba, mGrey, Imgproc.COLOR_BGR2GRAY);
    Imgproc.equalizeHist(mGrey, mGrey);
    face_cascade.detectMultiScale(mGrey, faces);
    System.out.println(String.format("Detected %s face",
            faces.toArray().length));
    MatOfRect smileDetections = new MatOfRect();
    face_cascade1.detectMultiScale(mGrey,smileDetections);
    System.out.println(String.format("Detected %s smiles",smileDetections.toArray().length));
    for (Rect rect : faces.toArray()) {
        Point center = new Point(rect.x + rect.width * 0.5, rect.y
                + rect.height * 0.5);
        Core.ellipse(mRgba, center, new Size(rect.width * 0.5,
                rect.height * 0.5), 0, 0, 360, new Scalar(255, 0, 255), 4,
                8, 0);
    }
    return mRgba;
}
    }

1 个答案:

答案 0 :(得分:2)

无论如何,你几乎没有选择:

  1. 使用Active Shape Model(ASM)和Active Appearance Model(AAM),您可以轻松找到一些免费的开源库。
  2. 使用一些统计分类器:我认为您可能需要检查这个有用的paper,他们使用Tree-Augmented-Naive Bayes(TAN)分类器来识别面部表情。
  3. 或者你可以使用opencv人脸识别api,但不能识别脸部,你可以定义你的笑脸,甚至只有不同情况下的mouthes,opencv识别器会根据你定义的类标签对它们进行分类。 Here您发现opencv的内容告诉您如何重新编制数据并对其进行培训。