安卓opencv人脸检测
来源:互联网 发布:2016淘宝新店扶持期 编辑:程序博客网 时间:2024/05/23 13:01
先看效果图
代码
package com.example.facedetection;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.objdetect.CascadeClassifier;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
private Button btnObj;
private MyImageView imgObj;
private Bitmap mBitmap;
private File mCascadeFile;
private CascadeClassifier mJavaDetector;
// OpenCV类库加载并初始化成功后的回调函数,在此我们不进行任何操作
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
try {
// load cascade file from application resources
InputStream is = getResources().openRawResource(R.raw.lbpcascade_frontalface);
File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml");
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();
mJavaDetector = new CascadeClassifier(mCascadeFile.getAbsolutePath());
if (mJavaDetector.empty()) {
Log.e("", "Failed to load cascade classifier");
mJavaDetector = null;
} else
Log.e("", "Loaded cascade classifier from " + mCascadeFile.getAbsolutePath());
// mNativeDetector = new DetectionBasedTracker(mCascadeFile.getAbsolutePath(), 0);
cascadeDir.delete();
} catch (IOException e) {
e.printStackTrace();
Log.e("", "Failed to load cascade. Exception thrown: " + e);
}
}break;
default: {
super.onManagerConnected(status);
}
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnObj = (Button) findViewById(R.id.btnId);
imgObj = (MyImageView) findViewById(R.id.imgId);
mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.face);
imgObj.setImageBitmap(mBitmap);
btnObj.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Mat testMat = new Mat();
Utils.bitmapToMat(mBitmap, testMat);
// Detect faces in the image.
// MatOfRect is a special container class for Rect.
MatOfRect faceDetections = new MatOfRect();
mJavaDetector.detectMultiScale(testMat, faceDetections);
Log.e(String.format("Detected %s faces",
faceDetections.toArray().length), "");
imgObj.setMat(faceDetections);
}
});
}
@Override
public void onResume() {
super.onResume();
// 通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是
// OpenCV_300_Manager_3.0_*.apk程序包,存在于OpenCV安装包的apk目录中
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this,
mLoaderCallback);
}
}
- 安卓opencv人脸检测
- opencv 检测人脸
- opencv检测人脸
- 人脸检测 opencv
- OpenCV人脸检测
- opencv人脸检测
- OpenCV人脸检测
- OpenCv人脸检测
- opencv 人脸检测
- OpenCV人脸检测
- opencv人脸检测
- OpenCV人脸检测
- 人脸检测(opencv)
- opencv人脸检测
- opencv人脸检测
- opencv----人脸检测
- OpenCV人脸检测
- opencv人脸检测
- ENHMETAHEADER说明
- C++经典开源库
- 公共技术点之 Java 动态代理
- $()和${}和$(())和(())
- javascript_DOM 编程艺术学习笔记(三)
- 安卓opencv人脸检测
- Android传感器开发详解
- yii2 url 重写 自定义url
- android EditText中的inputType
- linux卸载自带jdk与jdk配置
- shell删除最后一列、删除第一行、比较文件
- Reverse Words in a String
- jq-delay()知识点
- Spring、整合Spring+JDBC