【UVCcamera/新手向】AS中使用OpenCV进行简单人脸识别

  • 说在前面

Android Studio版本:3.2

操作系统(AS):Windows10

Android版本:5.0.2

摄像头:USB摄像头(640*480 贼辣鸡

开源项目:saki4510t/UVCCamera

接上篇:【UVCcamera/新手向】AS中初次使用OpenCV

  •  运行截图

帧率有点感人我胡多帅啊

  • 导入文件 

这里要导入一个xml文件,放在这里;我放到了github​​​​​​​对应位置,当然在官方samples里也有。

  • 代码 

代码直接放在上一篇(包含github项目地址)的opencv处理那部分,把灰度图那部分改一下; 

改成下面的: 

                Mat image = new Mat();
                InputStream is = getResources().openRawResource(R.raw.lbpcascade_frontalface);
                File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
                File mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml");
                Utils.bitmapToMat(srcBitmap,image);
                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 (Exception e){
                    Log.v(TAG,e.getMessage());
                }

                CascadeClassifier mJavaDetector = new CascadeClassifier(mCascadeFile.getAbsolutePath());
                MatOfRect faceDetections = new MatOfRect();
                try {
                    mJavaDetector.detectMultiScale(image, faceDetections);
                    System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));
                    // Draw a bounding box around each face.
                    for (Rect rect : faceDetections.toArray()) {
                        Imgproc.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));
                    }
                }catch (Exception e){
                    Log.v(TAG,e.getMessage());
                }
                Utils.matToBitmap(image,bitmap);

 


参考:

OpenCV-android-SDK提供的samples-face-detection,github上有,下载的官方SDK里面也有;

https://opencv.org/releases.html

https://github.com/joaopedronardari/OpenCV-AndroidSamples

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android Studio使用OpenCV进行人脸识别,可以按照以下步骤进行: 1. 下载OpenCV for Android SDK 在OpenCV官网下载OpenCV for Android SDK,解压后获得一个名为“OpenCV-android-sdk”的文件夹。 2. 创建一个Android项目 在Android Studio创建一个新的Android项目,并在项目添加OpenCV for Android SDK。 在项目的“build.gradle”文件添加以下代码: ```java dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.0.0' compile project(':openCVLibrary2410') } ``` 这里的“openCVLibrary2410”是OpenCV for Android SDK的库文件。 3. 创建一个OpenCVLoader 在项目的Java类创建一个OpenCVLoader,以加载OpenCV for Android SDK: ```java private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { switch (status) { case LoaderCallbackInterface.SUCCESS: // OpenCV加载成功 break; default: super.onManagerConnected(status); break; } } }; @Override public void onResume() { super.onResume(); if (!OpenCVLoader.initDebug()) { // OpenCV加载失败,重新加载 OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_10, this, mLoaderCallback); } else { mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); } } ``` 4. 加载人脸识别器 在Java类加载人脸识别器,并在OpenCVLoader成功加载时进行初始化: ```java CascadeClassifier mCascadeClassifier = null; @Override public void onManagerConnected(int status) { switch (status) { case LoaderCallbackInterface.SUCCESS: InputStream is = getResources().openRawResource(R.raw.lbpcascade_frontalface); File cascadeDir = getDir("cascade", Context.MODE_PRIVATE); File cascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml"); FileOutputStream os = new FileOutputStream(cascadeFile); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1) { os.write(buffer, 0, bytesRead); } is.close(); os.close(); mCascadeClassifier = new CascadeClassifier(cascadeFile.getAbsolutePath()); if (mCascadeClassifier.empty()) { mCascadeClassifier = null; } else { cascadeDir.delete(); } break; default: super.onManagerConnected(status); break; } } ``` 这里使用OpenCV提供的lbpcascade_frontalface人脸识别器。 5. 进行人脸识别 在Java类进行人脸识别,可以使用以下代码: ```java Mat grayMat = new Mat(); Mat rgbaMat = new Mat(); Utils.bitmapToMat(bitmap, rgbaMat); Imgproc.cvtColor(rgbaMat, grayMat, Imgproc.COLOR_RGBA2GRAY); MatOfRect faces = new MatOfRect(); if (mCascadeClassifier != null) { mCascadeClassifier.detectMultiScale(grayMat, faces, 1.1, 2, 2, new Size(100, 100), new Size()); } Rect[] facesArray = faces.toArray(); for (int i = 0; i < facesArray.length; i++) { Imgproc.rectangle(rgbaMat, facesArray[i].tl(), facesArray[i].br(), new Scalar(0, 255, 0, 255), 3); } Utils.matToBitmap(rgbaMat, bitmap); ``` 这里将原始图像转换为灰度图像,并使用人脸识别器检测人脸。如果检测到人脸,则在图像绘制矩形框。最后将结果转换为Bitmap图像。 完成以上步骤后,即可在Android Studio使用OpenCV进行人脸识别

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值