android 眼球识别技术,基于Dragonboard 410c android系统实现人的眼球识别功能

描述

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

一 准备工具:

540ac669627e313151adee0e59fe4384.png

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

b5661ce6a20d17e6571eac0f17c97f68.png

图2.显示器

1bbde810ed70d0b84e45e644e80e5136.png

图3.HDMI线

633c8b3f9d9a6031b9c31bb474ebefb2.png

图4.罗技C525(usb camera)

二 移植opencv库:

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

2.移植步骤:大家可以参照 Android 使用OpenCV的方法案例,包括如何可以通过省略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__()}");

}

}

四 例程共享:

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

打开APP阅读更多精彩内容

点击阅读全文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值