Android进阶之路

人脸识别

2018-07-02  本文已影响128人  android老男孩

商汤人脸识别

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

技术简介

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

技术简介

Demo简介

face_detect

face_track

face_liveness

face_attribute

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

上一篇下一篇

猜你喜欢

热点阅读