android opencv NDK人脸识别和对比,android开发基础入门

//保存人脸信息Mat,图片jpg

Mat saveMat = Mat(equalize_mat, faceRect);

//保存face_info_mat

imwrite(filePath, equalize_mat);

return 1;

}

env->ReleaseStringUTFChars(name, filePath);

return 0;

}

  • 人脸对比

/**

*人脸对比

*/

extern “C”

JNIEXPORT jdouble JNICALL

Java_com_hxg_ndkface_FaceDetection_histogramMatch(JNIEnv *env, jobject instance, jobject bitmap1,

jobject bitmap2) {

//1.Bitmap转成opencv能操作的C++对象Mat

Mat mat, mat1;

bitmap2Mat(env, mat, bitmap1);

bitmap2Mat(env, mat1, bitmap2);

// 转灰度矩阵

cvtColor(mat, mat, COLOR_BGR2HSV);

cvtColor(mat1, mat1, COLOR_BGR2HSV);

int channels[] = {0, 1};

int histsize[] = {180, 255};

float r1[] = {0, 180};

float r2[] =

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

{0, 255};

const float *ranges[] = {r1, r2};

Mat hist1, hist2;

calcHist(&mat, 3, channels, Mat(), hist1, 2, histsize, ranges, true);

//https://www.cnblogs.com/bjxqmy/p/12292421.html

normalize(hist1, hist1, 1, 0, NORM_L1);

calcHist(&mat1, 3, channels, Mat(), hist2, 2, histsize, ranges, true);

normalize(hist2, hist2, 1, 0, NORM_L1);

double similarity = compareHist(hist1, hist2, HISTCMP_CORREL);

__android_log_print(ANDROID_LOG_ERROR, “TTTTT”, “相识度:%f”, similarity);

return similarity;

}

  • Dnn模式的人脸识别,并抠图

private void copyCaseCadeFilePbtxt() {

InputStream is = null;

FileOutputStream os = null;

try {

// load cascade file from application resources

is = getResources().openRawResource(R.raw.opencv_face_detector);

File cascadeDir = getDir(“cascade”, Context.MODE_PRIVATE);

mCascadeFile = new File(cascadeDir, “opencv_face_detector.pbtxt”);

if (mCascadeFile.exists()) return;

os = new FileOutputStream(mCascadeFile);

byte[] buffer = new byte[1024 * 1024];

int bytesRead;

while ((bytesRead = is.read(buffer)) != -1) {

os.write(buffer, 0, bytesRead);

}

is.close();

os.close();

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

private void copyCaseCadeFileUint8() {

InputStream is = null;

FileOutputStream os = null;

try {

// load cascade file from application resources

is = getResources().openRawResource(R.raw.opencv_face_detector_uint8);

File cascadeDir = getDir(“cascade”, Context.MODE_PRIVATE);

mCascadeFile = new File(cascadeDir, “opencv_face_detector_uint8.pb”);

if (mCascadeFile.exists()) return;

os = new FileOutputStream(mCascadeFile);

byte[] buffer = new byte[1024 * 1024];

int bytesRead;

while ((bytesRead = is.read(buffer)) != -1) {

os.write(buffer, 0, bytesRead);

}

is.close();

os.close();

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

*Dnn模式的人脸识别,并抠图

*/

extern “C”

JNIEXPORT jboolean JNICALL

Java_com_hxg_ndkface_FaceDetection_faceDnnDetection(JNIEnv *env, jobject instance,

jstring model_binary,

jstring model_desc,

jstring checkPath,

jstring resultPath) {

const char *model_binary_path = env->GetStringUTFChars(model_binary, 0);

const char *model_desc_path = env->GetStringUTFChars(model_desc, 0);

cons

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android OPenCV 4.8是一个强大的人脸识别工具,可在Android设备上进行人脸识别开发。它基于OpenCV库,提供了许多功能强大的特征和算法来检测和识别人脸。 使用Android OPenCV 4.8进行人脸识别需要进行以下步骤: 1. 导入OpenCV库:首先,需要将OpenCV库导入到Android项目中。可以下载OpenCV Android SDK并将其导入到项目中,然后在gradle文件中配置相关依赖。 2. 初始化OpenCV:在应用程序启动时,需要初始化OpenCV库,以便能够使用其功能。这可以通过在应用程序的主活动中添加一些代码来实现。 3. 图像预处理:在进行人脸识别之前,需要对图像进行预处理。这可能包括降噪、增强对比度和明暗等操作,以提高识别的准确性。 4. 人脸检测:使用OpenCV提供的人脸检测器,可以在图像中检测出人脸区域。可以使用Haar特征分类器来实现人脸检测,该分类器训练了大量的正负样本来识别人脸。 5. 特征提取:一旦检测到人脸区域,就可以从中提取出一些关键特征,例如眼睛的位置、嘴巴的位置等。这些特征将用于后续的人脸识别过程。 6. 人脸识别:使用提取的特征,可以将其与预先存储的已知人脸特征进行比较。可以使用各种算法,如人脸识别一对一、一对多等。 7. 结果展示:根据识别的结果,可以将结果展示给用户。可以显示识别的人脸名称或其他相关信息。 总之,Android OPenCV 4.8是一种实现人脸识别的强大工具,它提供了一系列功能和算法来实现人脸检测、特征提取和人脸识别等任务。使用这个工具,我们可以开发出各种应用,如人脸解锁、人脸支付等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值