android opencv 简单的人脸识别

很简单的人脸识别功能,识别人脸后用矩形圈出来

实现人脸识别需要模型文件,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函数在前面文章有用到,但这样写会很卡,可以用多线程,一个线程渲染,一个线程后台人脸识别,返回结果画出来,可能会有一定的延迟,但总比卡顿好

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值