Android实现人脸识别(人脸检测)初识

时间:2024-03-25 16:16:08

title: Android实现人脸识别(人脸检测)初识
categories:

  • Android
    tags:
  • 人脸识别
  • 人脸检测
  • 相机处理
    date: 2020-05-21 11:35:51

介绍

本篇文章主要介绍一下移动端Android的人脸识别大致逻辑,后续文章会陆续放出干货,首先我们要明确两个名词

  1. 人脸检测,即从一张照片中或者一个相机中,检测有没有人脸的出现,
  2. 人脸识别,相对人脸检测来说可以识别出照片或者视频中的人脸位置,人脸特征,即常用的识别例如,门禁人脸识别对比,年龄识别,性别识别,活体检测,

可以说在现在计算机视觉应用中,人脸识别尤为关键,我们可以想象到常见的美颜相机,就是人脸识别为基础,以及人脸特效啥的(某音常见的)

那么我们Android怎么实现自己的人脸识别呢

目前有几个比较成熟的技术,

  1. camera原生api(已过时不推荐)
  2. camera2 + FaceDetector(后面会详细说)
  3. opencv(笔主采用的4.3.0版本)
  4. ARCore(Google service)

关键知识点

若要知道人脸识别,图像的处理是必不可少的,那么相机等格式也是需要了解,其中有几个关键点的知识需要有所了解

  1. nv21,YUV420这些原始数据格式(大致了解会用即可)
  2. Bitmap(bitmap type 格式RGB 565,RGB4444等,大致了解即可)
  3. 灰度化,二值化
    图像的二值化是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。
    将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,
    首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。
     所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域
    而人脸的特征,大家都懂,一个鼻子两个眼,一张嘴2个耳朵,这些都是不同技术共同点,都是靠特征点去比对,然后检测人脸
    (感兴趣的可以继续了解图像二值化后,图像加减法,色彩调节等,迷宫算法,等还挺有意思的)

关于这些知识点,Android老鸟基本都了解,那么对后面的操作就比较简单了,

-----知道这些那么针对你的需求可以继续了

技术对比

如果你需要的是只需要测出人脸,屏幕中出现人脸的个数等,而不需要关注人脸的其余信息,只需要知道人脸出现在了镜头中,ok
那么你就可以方法二,faceDetector,该技术的特征模型,是检测眼睛,双目间距,眉眼特征来的,理论来讲只需要知道双眼坐标,
就可以知道,你相对镜头的角度,人脸的大致位置,眉心中心点,等,(这种方法的好处是,比如说现在疫情,戴口罩,ok,没问题,你带口罩我也能认出你来)

如果说你需要做比较详细的人脸信息,可以采用opencv来比较灵活,图像处理后,可以配合多种算法,各种成熟的模型,来做人脸识别,说白了就是对图像处理后,拿到数据,爱用什么算法算就用什么算,
爱用什么模型匹配,用什么模型匹配,对接起来比较简单,要精确可以简单的提升精确度,当然,模型不同原理也不同比较常用就haar lbp等分类器
Android实现人脸识别(人脸检测)初识

当然项目的体积也会增加较多
好了,这篇文章先写这么多,后续补充,
后面陆续补全,方法二和方法三的具体实现,
至于方法四,后面也会有demo和解读,,,比较厉害的一个东西

博客Android实现人脸识别(人脸检测)初识