基于dragonboard410c android系统实现眼球识别

上一篇博客《基于Dragonboard410c android系统实现USB camera图像预览》,我们实现了如何在410c android系统上进行USB camera图像的预览功能,本文在此基础上,我们借助openncv库,实现人的眼球识别功能。


一.准备工具:



图1.Dragonboard410c开发板(android系统)




图2.显示器




图3 HDMI线



图4 罗技C525(usb camera)


二.移植opencv库:

1.下载地址:http://opencv.org/downloads.html

2.移植步骤:大家可以参照 http://www.2cto.com/kf/201511/448267.html这篇文章写得很详细,包括如何可以通过省略openncv_manger.apk的方式实现整体移植。

3.搭好环境后,最主要是加入我们上传的例程:Eye_recognition.rar,并编译运行(官网的opencv可不提供这个功能,笔者可是无私奉献给大家哈)。


三.关键代码:

#include 
#include 
#include 

#include 
#include 

#include 

#define LOG_TAG "FaceDetection/DetectionBasedTracker"
#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__))

using namespace std;
using namespace cv;

inline void vector_Rect_to_Mat(vector& v_rect, Mat& mat)
{
    mat = Mat(v_rect, true);
}

JNIEXPORT jlong JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeCreateObject
(JNIEnv * jenv, jclass, jstring jFileName, jint faceSize)
{
    const char* jnamestr = jenv->GetStringUTFChars(jFileName, NULL);
    string stdFileName(jnamestr);
    jlong result = 0;

    try
    {
    DetectionBasedTracker::Parameters DetectorParams;
    if (faceSize > 0)
        DetectorParams.minObjectSize = faceSize;
    result = (jlong)new DetectionBasedTracker(stdFileName, DetectorParams);
    }
    catch(cv::Exception e)
    {
    LOGD("nativeCreateObject catched cv::Exception: %s", e.what());
    jclass je = jenv->FindClass("org/opencv/core/CvException");
    if(!je)
        je = jenv->FindClass("java/lang/Exception");
    jenv->ThrowNew(je, e.what());
    }
    catch (...)
    {
    LOGD("nativeCreateObject catched unknown exception");
    jclass je = jenv->FindClass("java/lang/Exception");
    jenv->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1VideoCapture__()}");
    return 0;
    }

    return result;
}

JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDestroyObject
(JNIEnv * jenv, jclass, jlong thiz)
{
    try
    {
    ((DetectionBasedTracker*)thiz)->stop();
    delete (DetectionBasedTracker*)thiz;
    }
    catch(cv::Exception e)
    {
    LOGD("nativeestroyObject catched cv::Exception: %s", e.what());
    jclass je = jenv->FindClass("org/opencv/core/CvException");
    if(!je)
        je = jenv->FindClass("java/lang/Exception");
    jenv->ThrowNew(je, e.what());
    }
    catch (...)
    {
    LOGD("nativeDestroyObject catched unknown exception");
    jclass je = jenv->FindClass("java/lang/Exception");
    jenv->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1VideoCapture__()}");
    }
}

JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeStart
(JNIEnv * jenv, jclass, jlong thiz)
{
    try
    {
    ((DetectionBasedTracker*)thiz)->run();
    }
    catch(cv::Exception e)
    {
    LOGD("nativeStart catched cv::Exception: %s", e.what());
    jclass je = jenv->FindClass("org/opencv/core/CvException");
    if(!je)
        je = jenv->FindClass("java/lang/Exception");
    jenv->ThrowNew(je, e.what());
    }
    catch (...)
    {
    LOGD("nativeStart catched unknown exception");
    jclass je = jenv->FindClass("java/lang/Exception");
    jenv->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1VideoCapture__()}");
    }
}

JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeStop
(JNIEnv * jenv, jclass, jlong thiz)
{
    try
    {
    ((DetectionBasedTracker*)thiz)->stop();
    }
    catch(cv::Exception e)
    {
    LOGD("nativeStop catched cv::Exception: %s", e.what());
    jclass je = jenv->FindClass("org/opencv/core/CvException");
    if(!je)
        je = jenv->FindClass("java/lang/Exception");
    jenv->ThrowNew(je, e.what());
    }
    catch (...)
    {
    LOGD("nativeStop catched unknown exception");
    jclass je = jenv->FindClass("java/lang/Exception");
    jenv->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1VideoCapture__()}");
    }
}

JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSetFaceSize
(JNIEnv * jenv, jclass, jlong thiz, jint faceSize)
{
    try
    {
    if (faceSize > 0)
    {
        DetectionBasedTracker::Parameters DetectorParams = \
        ((DetectionBasedTracker*)thiz)->getParameters();
        DetectorParams.minObjectSize = faceSize;
        ((DetectionBasedTracker*)thiz)->setParameters(DetectorParams);
    }

    }
    catch(cv::Exception e)
    {
    LOGD("nativeStop catched cv::Exception: %s", e.what());
    jclass je = jenv->FindClass("org/opencv/core/CvException");
    if(!je)
        je = jenv->FindClass("java/lang/Exception");
    jenv->ThrowNew(je, e.what());
    }
    catch (...)
    {
    LOGD("nativeSetFaceSize catched unknown exception");
    jclass je = jenv->FindClass("java/lang/Exception");
    jenv->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1VideoCapture__()}");
    }
}


JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDetect
(JNIEnv * jenv, jclass, jlong thiz, jlong imageGray, jlong faces)
{
    try
    {
    vector RectFaces;
    ((DetectionBasedTracker*)thiz)->process(*((Mat*)imageGray));
    ((DetectionBasedTracker*)thiz)->getObjects(RectFaces);
    vector_Rect_to_Mat(RectFaces, *((Mat*)faces));
    }
    catch(cv::Exception e)
    {
    LOGD("nativeCreateObject catched cv::Exception: %s", e.what());
    jclass je = jenv->FindClass("org/opencv/core/CvException");
    if(!je)
        je = jenv->FindClass("java/lang/Exception");
    jenv->ThrowNew(je, e.what());
    }
    catch (...)
    {
    LOGD("nativeDetect catched unknown exception");
    jclass je = jenv->FindClass("java/lang/Exception");
    jenv->ThrowNew(je, "Unknown exception in JNI code {highgui::VideoCapture_n_1VideoCapture__()}");
    }
}

图5 关键JNI代码

四.例程共享:

下载地址:http://pan.baidu.com/s/1jIGz3dO


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值