Android opencv人脸识别

Android opencv人脸识别opencv人脸识别Androidopencv人脸识别图片:![在这里插入图片描述](https://img-blog.csdnimg.cn/2019012214185895.png//开始人脸检测publicvoidstart(){n_Start();}//停止人脸检测publicvoidstop(){n_Stop();}//设…

大家好,又见面了,我是你们的朋友全栈君。

opencv人脸识别

Android opencv人脸识别

下载地址:https://github.com/baoyu45585/OpenCVDemo

detectMultiScale函数
  选择最终的人脸分类器后,若想在这个基础上继续优化,那就试试这个detectMultiScale函数。具体可以查看Opencv源码,下面给出这个函数的讲解:

void detectMultiScale(
const Mat& image,
CV_OUT vector

& objects,

double scaleFactor = 1.1,

int minNeighbors = 3,

int flags = 0,

Size minSize = Size(),

Size maxSize = Size()

);

函数介绍:

参数1:image–待检测图片,一般为灰度图像加快检测速度;

参数2:objects–被检测物体的矩形框向量组;

参数3:scaleFactor–表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;

参数4:minNeighbors–表示构成检测目标的相邻矩形的最小个数(默认为3个)。 如果组成检测目标的小矩形的个数和小于 min_neighbors – 1 都会被排除。如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框;

参数5:flags–要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,函数将会使用Canny边缘检测来排除边缘过多或过少的区域, 因为这些区域通常不会是人脸所在区域;

参数6、7:minSize和maxSize用来限制得到的目标区域的范围。如果视频中误检到很多无用的小方框,那么就把minSize的尺寸改大一些,默认的为30*30。

图片: ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019012214185895.png在这里插入图片描述

分别测试下面的文件效果比较好的是alt文件
在这里插入图片描述

public class NDKUtils {

private CascadeClassifier mJavaDetector;
private static final String TAG = "FaceDetectActivity";
static {
    System.loadLibrary("native-lib");
}


// 构造方法:初始化人脸检测引擎
public NDKUtils(String cascadeName,int minFaceSize) {
    if (cascadeName!=null){
        // 使用模型文件初始化人脸检测引擎
        mJavaDetector = new CascadeClassifier(cascadeName);
        if (mJavaDetector.empty()) {
            Log.e(TAG, "加载cascade classifier失败");
            mJavaDetector = null;
        } else {
            Log.d(TAG, "Loaded cascade classifier from " + cascadeName);
        }
        n_CreateObject(cascadeName,minFaceSize);
    }
}
public NDKUtils() {

}


public CascadeClassifier getmJavaDetector() {
    return mJavaDetector;
}


// 开始人脸检测
public void start() {

    n_Start();
}

// 停止人脸检测
public void stop() {
    n_Stop();
}

// 设置人脸最小尺寸
public void setMinFaceSize(int size) {

    n_SetFaceSize(size);
}

// 检测人脸
public void detect(Mat imageGray, MatOfRect faces) {

    n_Detect(imageGray.getNativeObjAddr(), faces.getNativeObjAddr());
}

// 检测人脸
public void detect(byte[] buf, int w, int h,MatOfRect faces) {

    n_Detect(buf, w, h,faces.getNativeObjAddr());
}

// 释放资源
public void release() {
    n_DestroyObject();
}


public  native int[] n_gray(int[] buf, int w, int h);

private  native void n_CreateObject(String cascadeName, int minFaceSize);
private  native void n_DestroyObject();
private  native void n_Start();
private  native void n_Stop();
private  native void n_SetFaceSize( int size);
private  native void n_Detect(long inputImage, long faces);
private  native void n_Detect(byte[] buf, int w, int h, long faces);

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133938.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深度学习优化策略—权重、权重初始化与权重衰减「建议收藏」

    深度学习优化策略—权重、权重初始化与权重衰减「建议收藏」Nobiasdecay:一般来说,权重衰减会用到网络中所有需要学习的参数上面。然而仅仅将权重衰减用到卷积层和全连接层,不对biases,BN层的\gamma,\beta做权重衰减,效果会更好。BagofTricksforImageClassificationwithConvolutionalNeuralNetworks…

    2022年10月5日
    0
  • 程序员面试、算法研究、编程艺术、红黑树、机器学习5大系列集锦

    程序员面试、算法研究、编程艺术、红黑树、机器学习5大系列集锦程序员面试、算法研究、编程艺术、红黑树、机器学习5大经典原创系列集锦与总结作者:July–结构之法算法之道blog之博主。时间:2010年10月-2018年5月,一直在不断更新中..出处:http://blog.csdn.net/v_JULY_v。说明:本博客中部分文章经过不断修改、优化,已集结出版成书《编程之法:面试和算法心得》。前言开博4年有余,…

    2022年4月19日
    48
  • MATLAB—-输入和输出

    MATLAB—-输入和输出文章目录 1 输入语句 1 1 输入数值或矩阵 1 2 输入字符串 2 输出语句 2 1 输出单个字段 2 2 输出多个字段 1 输入语句 1 1 输入数值或矩阵 value1 input 请输入一个数值 value2 input 请输入一个矩阵 1 2 输入字符串输入字符串 需要加第二个参数 s string input 请输入一个字符串 s 2 输出语句使用 disp 函数可以输出 输出多个字段时 需要将多个字段转

    2025年7月2日
    0
  • JVM自动内存管理机制–读这篇就GO了

    之前看过JVM的相关知识,当时没有留下任何学习成果物,有些遗憾。这次重新复习了下,并通过博客来做下笔记(只能记录一部分,因为写博客真的很花时间),也给其他同行一些知识分享。Java自动内存管理机制包

    2022年2月16日
    33
  • uCOS OSTaskCreate()函数分析[通俗易懂]

    uCOS OSTaskCreate()函数分析[通俗易懂]INT8U OSTaskCreate(void(*task)(void*pd), void*p_arg,OS_STK*ptos,INT8Uprio);函数返回一个8位的整型数,调用该函数需要四个参数。第一个参数一个指针,也就是用户代码的首地址,在平时使用中我们把自己创建的任务的名字作为这个参数就可以了;第三个参数是指向任务堆栈栈顶的指针,通常我们把创建的任务的堆栈数组的首地址

    2022年9月5日
    1
  • 红黑树和平衡二叉树区别[通俗易懂]

    红黑树和平衡二叉树区别[通俗易懂]红黑树和平衡二叉树区别如下:1、红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单。2、平衡二叉树追求绝对平衡,条件比较苛刻,实现起来比较麻烦,每次插入新节点之后需要旋转的次数不能预知。…

    2022年10月20日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号