2024年最全Android使用OpenCV实现「人脸检测」和「人脸识别」,2024年最新java开发英文面试自我介绍

架构师筑基包括哪些内容

我花了将近半个月时间将:深入 Java 泛型.、注解深入浅出、并发编程.、数据传输与序列化、Java 虚拟机原理、反射与类加载、高效 IO、Kotlin项目实战等等Android架构师筑基必备技能整合成了一套系统知识笔记PDF,相信看完这份文档,你将会对这些Android架构师筑基必备技能有着更深入、更系统的理解。

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容

注:资料与上面思维导图一起看会更容易学习哦!每个点每个细节分支,都有对应的目录内容与知识点!



这份资料就包含了所有Android初级架构师所需的所有知识!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

如何将Demo导入到Eclipse并运行,上面官方的文档已经说的比较清楚了,至于会有什么问题就自行Google吧。

人脸检测


其实人脸检测并不是重点,Demo里已经实现了人脸检测的功能。

主要的实现方式:OpenCV有一个自己的org.opencv.android.JavaCameraView自定义控件,它循环的从摄像头抓取数据,在回调方法中,我们能获取到Mat数据,然后通过调用OpenCV的Native方法,检测当前是否有人脸,我们会获取到一个Rect数组,里面会有人脸数据,最后将人脸画在屏幕上,到此为止,Demo的人脸检测功能,就结束了。

人脸识别


人脸识别我这里用到了JavaCV

P2

人脸识别逻辑:人脸识别的主要方式就是获取到人脸的特征值,然后将两个特征值做比对,取到一个相似度去做人脸识别,OpenCV这里的特征值,其实就是一张图片。

我们的从回调的Mat数据检测到有人脸以后,提取特征值(也就是保存人脸的一张图片到某个路径),然后比较特征值

为了提高识别的准确度,需要在检测到人脸以后,把人脸的部分截取出来,然后置灰(置灰的目的是为了方式色泽和明暗度对识别有影响)。

保存人脸特征值


/**

 * 特征保存

 *

 * @param image    Mat

 * @param rect     人脸信息

 * @param fileName 文件名字

 * @return 保存是否成功

 */

public boolean saveImage(Mat image, Rect rect, String fileName) {

    try {

        String PATH = Environment.getExternalStorageDirectory() + "/FaceDetect/" + fileName + ".jpg";

        // 把检测到的人脸重新定义大小后保存成文件

        Mat sub = image.submat(rect);

        Mat mat = new Mat();

        Size size = new Size(100, 100);

        Imgproc.resize(sub, mat, size);

        Highgui.imwrite(PATH, mat);

        return true;

    } catch (Exception e) {

        e.printStackTrace();

        return false;

    }

}

提取特征值

之前已经说了嘛,人脸特征其实就是一张人脸图片,所以提取人脸特征其实就是获取一张人脸图片


/**

 * 提取特征

 *

 * @param fileName 文件名

 * @return 特征图片

 */

public Bitmap getImage(String fileName) {

    try {

        return BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + "/FaceDetect/" + fileName + ".jpg");

    } catch (Exception e) {

        e.printStackTrace();

        return null;

    }

}

人脸识别

这里主要使用了JavaCV的方法


/**

 * 特征对比

 *

 * @param file1 人脸特征

 * @param file2 人脸特征

 * @return 相似度

 */

public double CmpPic(String file1, String file2) {

    int l_bins = 20;

    int hist_size[] = {l_bins};



    float v_ranges[] = {0, 100};

    float ranges[][] = {v_ranges};



    opencv_core.IplImage Image1 = cvLoadImage(Environment.getExternalStorageDirectory() + "/FaceDetect/" + file1 + ".jpg", CV_LOAD_IMAGE_GRAYSCALE);

    opencv_core.IplImage Image2 = cvLoadImage(Environment.getExternalStorageDirectory() + "/FaceDetect/" + file2 + ".jpg", CV_LOAD_IMAGE_GRAYSCALE);



    opencv_core.IplImage imageArr1[] = {Image1};

    opencv_core.IplImage imageArr2[] = {Image2};



    opencv_imgproc.CvHistogram Histogram1 = opencv_imgproc.CvHistogram.create(1, hist_size, CV_HIST_ARRAY, ranges, 1);

    opencv_imgproc.CvHistogram Histogram2 = opencv_imgproc.CvHistogram.create(1, hist_size, CV_HIST_ARRAY, ranges, 1);



    cvCalcHist(imageArr1, Histogram1, 0, null);

    cvCalcHist(imageArr2, Histogram2, 0, null);



    cvNormalizeHist(Histogram1, 100.0);

    cvNormalizeHist(Histogram2, 100.0);



    return cvCompareHist(Histogram1, Histogram2, CV_COMP_CORREL);


### 文末

**当你打算跳槽的时候,应该把“跳槽成功后,我能学到什么东西?对我的未来发展有什么好处”放在第一位。这些东西才是真正引导你的关键。在跳槽之前尽量“物尽其用”,把手头上的工作做好,最好是完成了某个项目或是得到提升之后再走。跳槽不是目的,而是为了达到最终职业目标的手段**

最后祝大家工作升职加薪,面试拿到心仪Offer

![](https://img-blog.csdnimg.cn/img_convert/8e8c18e1d01621944489f4ee704972d0.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/7f1514650aa4538ef75e0874a6f63268.webp?x-oss-process=image/format,png)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

81)]




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java使用OpenCV实现人脸识别,需要以下几个步骤: 1.下载安装OpenCV库 首先需要下载并安装OpenCV库,可以到官方网站https://opencv.org/releases/下载适合自己环境的版本,然后按照安装指南进行安装。 2.导入OpenCV库 在Java项目中,需要使用OpenCV库的功能,需要将OpenCV库导入到项目中。具体导入方式可以查看OpenCV官方文档https://docs.opencv.org/3.4/d9/df8/tutorial_root.html。 3.载入训练好的人脸分类器 OpenCV提供了一些训练好的人脸分类器,可以用来检测人脸。可以在OpenCV库中找到这些分类器文件,然后使用Java代码将其载入。 4.读取图片或视频流 使用Java代码读取图片或视频流,可以使用OpenCV中提供的Imgcodecs类进行图片读取,也可以使用VideoCapture类进行视频流读取。 5.使用人脸分类器检测人脸 使用OpenCV中提供的CascadeClassifier类,将训练好的人脸分类器载入,并使用detectMultiScale方法在图片或视频流中检测人脸。 6.标记人脸并显示 使用Java代码标记出检测到的人脸位置,并将结果显示在图片或视频流中。 下面是一个简单的Java代码示例: ``` import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.objdetect.CascadeClassifier; public class FaceDetection { public static void main(String[] args) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // 载入人脸分类器 CascadeClassifier faceDetector = new CascadeClassifier("haarcascade_frontalface_alt.xml"); // 读取图片 Mat image = Imgcodecs.imread("test.jpg"); // 检测人脸 MatOfRect faceDetections = new MatOfRect(); faceDetector.detectMultiScale(image, faceDetections); // 标记人脸并显示 for (Rect rect : faceDetections.toArray()) { Imgproc.rectangle(image, rect.tl(), rect.br(), new Scalar(0, 255, 0), 3); } Imgcodecs.imwrite("result.jpg", image); } } ``` 在这个示例中,我们载入了一个人脸分类器文件"haarcascade_frontalface_alt.xml",然后读取了一张图片"test.jpg",使用人脸分类器检测人脸,并标记人脸位置,并将结果保存在"result.jpg"中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值