首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面部识别使用Opencv4Android SDK教程?

面部识别使用Opencv4Android SDK教程?
EN

Stack Overflow用户
提问于 2014-09-14 06:24:27
回答 1查看 2.1K关注 0票数 0

我是一个学生。最近,我使用opencv构建了一个面部识别项目,但是我不知道从哪里开始。

通过阅读opencv人脸检测样本,我成功地使用OpenCv4Android构建了我的人脸检测。

现在我开始构建Face recognize (使用LBPH算法)部分,我阅读Opencv文档并搜索google以获得实际上可以遵循但失败的教程(有很多教程使用javacv,但我想使用OpenCv4Android ) :(

有人能帮我一步一步地指导我如何在OpenCV4Android SDK中使用面部识别吗?多亏了你。

补充:

  • 我在opencv/contrib中找到了关于FaceRecognizer.java类的信息
  • 我在facerec.java文件夹中找到了OpenCV4android
  • 我在某个地方阅读并尝试了FaceRecognize模型= createLBPHFaceRecognizer()在哪里可以找到和使用这种方法?

请帮我下一个需要做的事?非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2014-10-09 15:38:50

在java包装代码生成过程中跳过了createFisherFaceRecognizer()方法(以及其他2 createXXXFaceRecognizer()),这是一个已知但尚未解决的问题。

最好的解决方案可能是用jni/ndk实现它。你必须建造:

  • 一个带有本机.so代码的c++文件,让我们称它为facerec.so一个额外的java包装类,调用它,FisherFaceRecognizer.java

遗憾的是,ndk(这里没有这样的东西)帮不了什么忙,但是它在桌面/eclipse( dll/so会直接进入您的项目文件夹)上工作得很好,所以下面是代码(相当大的一堵墙)。

// - 8< -8<- facerec.cpp

代码语言:javascript
复制
#include "jni.h"
#include "opencv2/contrib/contrib.hpp"

#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT jlong JNICALL Java_FisherFaceRecognizer_createFisherFaceRecognizer_10(JNIEnv* env, jclass);
JNIEXPORT jlong JNICALL Java_FisherFaceRecognizer_createFisherFaceRecognizer_10(JNIEnv* env, jclass) {
    try {
        cv::Ptr<cv::FaceRecognizer> pfr = cv::createFisherFaceRecognizer();
        pfr.addref(); // this is for the 2.4 branch, 3.0 would need a different treatment here
        return (jlong) pfr.obj;
    } catch (...) {
        jclass je = env->FindClass("java/lang/Exception");
        env->ThrowNew(je, "sorry, dave..");
    }
    return 0;
}

JNIEXPORT jlong JNICALL Java_FisherFaceRecognizer_createFisherFaceRecognizer_11(JNIEnv* env, jclass, jint num_components);
JNIEXPORT jlong JNICALL Java_FisherFaceRecognizer_createFisherFaceRecognizer_11(JNIEnv* env, jclass, jint num_components) {
    try {
        cv::Ptr<cv::FaceRecognizer> pfr = cv::createFisherFaceRecognizer(num_components);
        pfr.addref();
        return (jlong) pfr.obj;
    } catch (...) {
        jclass je = env->FindClass("java/lang/Exception");
        env->ThrowNew(je, "sorry, dave..");
    }
    return 0;
}

JNIEXPORT jlong JNICALL Java_FisherFaceRecognizer_createFisherFaceRecognizer_12(JNIEnv* env, jclass, jint num_components, jdouble threshold);
JNIEXPORT jlong JNICALL Java_FisherFaceRecognizer_createFisherFaceRecognizer_12(JNIEnv* env, jclass, jint num_components, jdouble threshold) {
    try {
        cv::Ptr<cv::FaceRecognizer> pfr = cv::createFisherFaceRecognizer(num_components,threshold);
        pfr.addref();
        return (jlong) pfr.obj;
    } catch (...) {
        jclass je = env->FindClass("java/lang/Exception");
        env->ThrowNew(je, "sorry, dave..");
    }
    return 0;
}

#ifdef __cplusplus
}
#endif

// - 8< -8<

代码语言:javascript
复制
import org.opencv.contrib.FaceRecognizer;
import org.opencv.core.Core;

public class FisherFaceRecognizer extends FaceRecognizer {

    static{ System.loadLibrary("facerec"); }

    private static native long createFisherFaceRecognizer_0();
    private static native long createFisherFaceRecognizer_1(int num_components);
    private static native long createFisherFaceRecognizer_2(int num_components, double threshold);

    public FisherFaceRecognizer () {
        super(createFisherFaceRecognizer_0());
    }
    public FisherFaceRecognizer (int num_components) {
        super(createFisherFaceRecognizer_1(num_components));
    }
    public FisherFaceRecognizer (int num_components, double threshold) {
        super(createFisherFaceRecognizer_2(num_components, threshold));
    }
}

一旦您完成了所有这些编译(恭喜!!),您可以这样称呼它:

代码语言:javascript
复制
FaceRecognizer  facerec = new FisherFaceRecognizer();
   facerec.load("/sdcard/smile.yml"); // note, that it can't read from apk or zip, so you need to copy it somewhere

   Mat img = ...//test face
   int [] label = new int[1];
   double [] conf = new double[1];
   facerec.predict(img, label, conf);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25830660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档