安卓opencv人脸检测
2015-11-17 14:56
417 查看
先看效果图
代码
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);
}
}
代码
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);
}
}
相关文章推荐
- linux运维实战练习-2015年11月8日-11月17日课程
- handleOpenURL 不能执行
- centos6.7 配置多个ip
- HBase权威指南 高清中文版 PDF(来自linuxidc)
- Hadoop + HBase (自带zookeeper 也可单独加) 集群部署
- 一些好的在线网站
- Testlink在CentOS、windows安装
- CentOS7 安装配置过程 (Apache + SQL+ PHP + SSH + Opensips+Openfire)
- 使用NGINX支持PHP,MYSQL
- virtualbox5.0 centos7 mini 安装
- Linux shell sed awk
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- Ecshop商品促销时间精确到小时分钟和秒的设置方法 调用时间
- 16 从EventLoop取消注册和重新注册
- 在linux下开启FTP服务
- ecshop2.7.3土特产商城源码绿色大气整站带数据茶叶商城网站模板 修正
- 教你如何安装配置Windows7系统 IIS IIS7.5本地浏览测试网站 完整版介绍
- 购物车shopping-cart问题
- centos6.5 x86_64 python2.6升级2.7