大家好,又见面了,我是你们的朋友全栈君。
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 {
代码语言:javascript复制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.cn/133938.html原文链接:https://javaforall.cn