您的位置:首页 > 移动开发 > Android开发

android opencv 简单的人脸识别

2017-10-11 16:43 453 查看
很简单的人脸识别功能,识别人脸后用矩形圈出来

实现人脸识别需要模型文件,opencv再带的模型文件在OpenCV-android-sdk\sdk\etc内

我使用haarcascade_frontalface_alt.xml来做人脸识别

把haarcascade_frontalface_alt.xml文件拉到项目raw文件夹,没有创建一个

初始化

InputStream is = getResources().openRawResource(R.raw.haarcascade_frontalface_alt);
File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
File mCascadeFile = new File(cascadeDir, "haarcascade_frontalface_alt.xml");
try {
FileOutputStream os = new FileOutputStream(mCascadeFile);

byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
is.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
cascadeDir.delete();
cascadeClassifier = new CascadeClassifier(mCascadeFile.getAbsolutePath());


在onCameraFrame函数内实现

MatOfRect faces = new MatOfRect();
if (cascadeClassifier != null) {
cascadeClassifier.detectMultiScale(g, faces, 1.1, 1, 1,
new Size(absoluteFaceSize, absoluteFaceSize), new Size());
}

// 检测出多少个人脸
Rect[] facesArray = faces.toArray();
for (int i = 0; i < facesArray.length; i++) {
Imgproc.rectangle(r, facesArray[i].tl(), facesArray[i].br(), new Scalar(0, 255, 0, 255), 3);
}
return r;


onCameraFrame函数在前面文章有用到,但这样写会很卡,可以用多线程,一个线程渲染,一个线程后台人脸识别,返回结果画出来,可能会有一定的延迟,但总比卡顿好
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: