2024年Android使用OpenCV实现「人脸检测」和「人脸识别」,2024大厂Android开发面试总结+解答

2024-06-04 9854阅读

写在最后

由于本文罗列的知识点是根据我自身总结出来的,并且由于本人水平有限,无法全部提及,欢迎大神们能补充~

将来我会对上面的知识点一个一个深入学习,也希望有童鞋跟我一起学习,一起进阶。

提升架构认知不是一蹴而就的,它离不开刻意学习和思考。

**这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家,**梳理了多年的架构经验,筹备近1个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

2024年Android使用OpenCV实现「人脸检测」和「人脸识别」,2024大厂Android开发面试总结+解答 第1张

2024年Android使用OpenCV实现「人脸检测」和「人脸识别」,2024大厂Android开发面试总结+解答 第2张

最近还在整理并复习一些Android基础知识点,有问题希望大家够指出,谢谢。

希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!

转发+点赞+关注,第一时间获取最新知识点

Android架构师之路很漫长,一起共勉吧!

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

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

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

  • doc:一些文档

  • samples:示例工程和一些编译好的apk

  • sdk:一些库文件

    当然, 如果你的C/C++足够好,你肯定可以自己编译一个库,直接导入到工程,就不用安装Manager了,可惜了我自己还不行,哈哈……无奈安装Manager把……

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

    人脸检测


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

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

    人脸识别


    人脸识别我这里用到了JavaCV

    2024年Android使用OpenCV实现「人脸检测」和「人脸识别」,2024大厂Android开发面试总结+解答 第3张

    人脸识别逻辑:人脸识别的主要方式就是获取到人脸的特征值,然后将两个特征值做比对,取到一个相似度去做人脸识别,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);
    ### 面试复习笔记:
    这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。
    节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
    **《960页Android开发笔记》**
    ![](https://img-blog.csdnimg.cn/img_convert/477f44bb90bb5967ebc72873c54c29e7.webp?x-oss-process=image/format,png)
    **《1307页Android开发面试宝典》**
    包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。
    ![](https://img-blog.csdnimg.cn/img_convert/b8fb0ff3f23b65db0881d053b48e81d0.webp?x-oss-process=image/format,png)
    **《507页Android开发相关源码解析》**
    只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
    真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
    **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
    **[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**
    **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
    源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
    **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
    **[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**
    **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
    

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]