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);

}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • filter pitcher是什么意思_EncodingFilter

    filter pitcher是什么意思_EncodingFilterorg.apache.struts2.dispatcher.FilterDispatcher是Struts2的主要的Filter,负责四个方面的功能:       (1)执行Actions       (2)清除ActionContext       (3)维护静态内容       (4)清除request生命周期内的XWork的interceptors   另注:该

  • VC—-各种数据类型VARIANT、COleVariant 、_variant_t

    VC—-各种数据类型VARIANT、COleVariant 、_variant_tVARIANT、COleVariant和_variant_t在OLE、ActiveX和COM中,VARIANT数据类型提供了一种非常有效的机制,由于它既包含了数据本身,也包含了数据的类型,因而它可以实现各种不同的自动化数据的传输。下面让我们来看看OAIDL.H文件中VARIANT定义的一个简化版:structtagVARIANT{VARTYPEvt;union{

  • 前端面试题汇总

    前端面试题汇总歌谣最全前端面试题(建议收藏,欢迎讨论)【Vue】[vue]从0到1自己构架一个vue项目,说说有哪些步骤、哪些重要插件、目录结构你会怎么组织

  • mac电脑无法读取移动硬盘(mac无法写入移动硬盘)

    起因苹果电脑一般都是容量不大,大点的又贼贵,于是很多机智的小伙伴选择用移动硬盘或U盘来解决。然鹅,很多小伙伴可能会碰到这样的问题:移动硬盘只读且没法写入!这是因为你买的移动硬盘是NTFS格式的,而macOS无法识别NTFS格式。解决方法(不推荐)将移动硬盘或U盘格式化成macOS能识别的格式,但这样移动硬盘或U盘可能无法在Windows电脑上使用!(推荐TuxeraNTFS)借助第三方软件实现NTFS格式的读写对比过其他的NTFS软件,还是觉得Tux

  • android sqlite加密数据库,Android Sqlite数据库加密

    android sqlite加密数据库,Android Sqlite数据库加密Android使用的是开源的SQLite数据库,数据库本身没有加密,加密思路通常有两个:1.对几个关键的字段使用加密算法,再存入数据库2.对整个数据库进行加密SQLite数据库加密工具:收费工具:免费工具:SQLCipher使用:SQLCipher是完全开源的软件,提供256-bitAES加密源码编译:1.OpenSSL编译SQLCipher源码编译需要依赖OpenSSL提供的libcry…

  • 光伏发电功率预测_分布式光伏并网接入电压

    光伏发电功率预测_分布式光伏并网接入电压Reviewonprobabilisticforecastingofphotovoltaicpowerproductionandelectricityconsumption—论文阅读(1)。

    2022年10月19日

发表回复

您的电子邮箱地址不会被公开。

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