安卓opencv人脸检测

先看效果图

 https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.2.0-cp27-none-linux_x86_64.whl

代码

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);  
    }  
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无v邪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值