人脸识别

商汤人脸识别

github地址 https://github.com/Johncuiqiang/SencetimeFaceDemo

技术简介

通过人脸关键点检测,一般为21点,或106点检测人脸变化,关键点越高,精度越高.
在静止图像或者视频流中,人脸检测技术能快速准确地检测出多张人脸的位置,包含侧脸、半遮挡、模糊人脸
人脸检测技术采用了最新的基于级联回归的算法,结合了深度学习的五官标定初始化,综合多个不同标准的多点数据集知识,使得同一个模型可以应用于不同数量的关键点检测,以保障更低的误差和更好的适应性。

技术简介

  • 检测人脸属性
    年龄、性别、颜值、眼镜、太阳镜、口罩、种族、睁眼、张嘴、胡须、微笑、
    生气、平静、困惑、 厌恶、高兴、难过、害怕、惊讶、斜视、尖叫 21 种人脸属性。
  • 活体检测
    拿一张有人脸的照片放在摄像头前,就可以骗过常规的人脸识别系统。活体检测技术能够判断在一段视频中出现的人脸是活人还是照片,从而避免这种安全漏洞。
  • 人脸验证系统
    人脸验证技术可以实现 1:1 和 1:N 的人脸相似度比对,适用于身份识别及相似脸查询等应用场景。
    该技术采用深度学习方法对大量数据进行特征提取,利用特征匹配程度来区分不同的人脸。
  • 人脸识别
    人脸识别(Face Identification)能够快速且准确的识别出该目标人脸所属的人。该技术能够广泛运用于社交网络、人脸解锁等应用场景中。
  • 人脸验证
    人脸验证(Face Verification)可以计算两张人脸的相似度,从而判断是否为同一个人。
  • 人脸聚类
    对相册等场景提供按人脸聚类的功能,可以把同一个人的照片集中查看和管理。
  • 人脸验证
    人脸库搜索模块可用于在大规模人脸数据库中快速搜索相似的人脸数据,以确定身份,可用于明星搜索、监控追踪罪犯等各个领域。本系统通过预先创建待查人员的面部特征索引,可以在百万级别以上人脸数据库中迅速查找相似人脸。

Demo简介

face_detect

  • 功能:人脸检测:检测出人脸在图片中的位置。
  • 测试方式 :范例在手机中运行后,选择相册中的相片进行测试。
  • 输出:在图片中标记出人脸和关键点的位置。

face_track

  • 功能:对连续视频帧进行实时人脸跟踪和关键点检测。
  • 测试方式 :运行后应用会自动启动摄像头测试。
  • 输出:在视频中标记出人脸和关键点。

face_liveness

  • 功能:对连续视频帧进行实时人脸跟踪、关键点检测和活体检测。
  • 测试方式 :运行后应用会自动启动摄像头测试。
  • 输出:按照提示进行眨眼、张嘴、摇头和点头动作。

face_attribute

  • 功能:进行人脸属性检测,包括性别、年龄、眼镜、墨镜、颜值、微笑等
  • 测试方式 :范例在手机中运行后,选择相册中的相片进行测试。
  • 输出:输出属性检测的结果。
  • 备注:android 测试前需要将 sdk\models 下的 attribute.model 拷贝到
    samples\sample_face_attribute\assets

face_verify

  • 功能:人脸验证:判断两张照片中的人脸是否是同一个人
  • 运行参数 :运行后选择要比对的两张图片。
  • 输出:输出验证得分和验证结果

商汤demo

在类FaceOverlapFragment中,该接口实现了拿到当前人脸btye字节流及相关数据

  this.setPreviewCallback(new PreviewCallback() {
        @Override
        public void onPreviewFrame(byte[] data, Camera camera) {
            synchronized (nv21) {
                System.arraycopy(data, 0, nv21, 0, data.length);
            }
        }

   });

该接口为我做人脸注册,验证相关逻辑的入口函数及相关数据

    /**
     * 如果faceID改变,执行人脸验证
     *
     * @param face     绘制的人脸框,21/106点外面的人脸框
     * @param data     人脸信息的字节流数据
     * @param camera   保存人脸信息需要转为bitmap对象,需要camera类
     * @param rect     绘制的人脸框的相关数值信息,该值是face对象经过算法计算后的
     */
    public void verifyID(CvFace face ,byte[] data, Camera camera,Rect rect) 

转换为bitmap对象,保存本地,完成注册

  /***
     * 把yuv转换成bitmap
     *
     * @param mData     人脸信息字节流
     * @param myCamera  camera对象
     * @return bitmap对象
     */
    public static Bitmap yuvBitmap(byte[] mData, Camera myCamera)

人脸特征对比,接过大于0.9为同一个人

   /**
     * 执行对比逻辑
     * 
     * @param oldFeature 原人脸特征
     * @param newFeature 现人脸特征
     * @return true 同一个人
     */
    private boolean compareTo(byte[] oldFeature, byte[] newFeature) {
        if (newFeature != null && oldFeature != null && newFeature.length > 0 && oldFeature.length > 0) {
            mResults = mCvFaceVerify.compareFeature(newFeature, oldFeature);
            //同一个人
             return mResults > 0.9;
        }
        return false;
    }  

人脸特征点提取

if (face != null) {
       mNewFeature = mCvFaceVerify.getFeature(newBitmap, face);
}

完整sdk的接口说明可查询官方文档FaceSDK_WhitePaper v6.2

    原文作者:android老男孩
    原文地址: https://www.jianshu.com/p/34c8b0e113ba
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞