zoukankan      html  css  js  c++  java
  • 人脸实时比对与身份证比对判断是否是一个人的Android Demo

    关于此项目的需求

    经常有这种需求,比如住宾馆、开证明,银行卡提款等 要验证这个人跟身份证是同一个人的需求,我们暂且叫做《人证比对》需求。那么这里一定牵涉到人脸的识别,识别出人脸,然后实时的拿到人脸,再去跟身份证的头像做比对。比对出一个结果值来,如果这个结果值特别像一个人,那么我们就认为它是一个人。(本文用Android 程序实现)实现身份证与人脸实时比对判断是否是一个人的Android Demo.

    身份证读卡

    第一个就是要读取到身份证信息。拿到照片数据、身份证数据(比如身份证号码、年龄、性别、出生年月等)。这个设备就叫做身份证读卡器(比如 我们这个项目用的是《云从科技》的机器,集成了身份证读卡器,实际上是买的华视读卡器设备(提供了AndroidDemo 我们在这里封装成了 读卡器Libarary也叫 读卡器单独的module 、或者叫sdk)。

    关于此项目的介绍

    实现身份证与人脸实时比对判断是否是一个人的Android Demo

    部分代码展示


    可以实现如下效果(实时比对 人脸动态与身份证比对)

    部分代码示意:
    比对过程

    
        private void verifyWithIDcard(FaceInfo face) {
            FeatureBean faceFeature = new FeatureBean(localSDK.iFeaLen);
            faceFeature.ret = FaceRecog.getInstance().cwGetFaceFeature(localSDK.iRecogHandle,
                    face.alignedData,
                    face.alignedW,
                    face.alignedH,
                    face.nChannels,
                    faceFeature.btFeature);
            FeatureBean idCardFeature = null;
            try {
                idCardFeature = localSDK.GetFeatureFromImgData(getIDBytes());
                VerifyBean mVerifyBean = localSDK.Verify(faceFeature.btFeature, idCardFeature.btFeature);
                if (mVerifyBean.ret == 0) {
                    Log.e("========", "相似度:" + mVerifyBean.score);
                    boolean isVerifySucess = mVerifyBean.score > AjustPara.JUGE_IS_SAME_PERSON_SCORE;
                    verifyResult = isVerifySucess;
                    if (isVerifySucess) {
                        EventBus.getDefault().post(new VerifyResult(isVerifySucess));
                    }
                } else {
                    Log.e("========", "人脸比对错误:" + mVerifyBean.ret);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    比对结果演示:

    
        @Subscribe
        public void onEventMainThread(VerifyResult verifyResult) {
            if (verifyResult != null && verifyResult.isSamePerson()) {
                //截取当前人脸 开始上传;
                isSamePerson = true;
                //TODO
                SoundTools.playVerifySuccessSound(getContext());
                ivVerifyResult.setImageResource(R.drawable.ic_verify_success);
                ivVerifyResult.setVisibility(View.VISIBLE);
            } else {
                if (isStartMatch) {
                    if (isSamePerson) {
                    } else {
                        isSamePerson = false;
                        ivVerifyResult.setImageResource(R.drawable.ic_verify_error);
                        ivVerifyResult.setVisibility(View.VISIBLE);
                        SoundTools.playVerifyFailSound(getContext());
                    }
                }
            }
            isFaceSameToIdCard = true;
            isStartMatch = false;
            isSamePerson = false;
            ivVerifyResult.setVisibility(View.VISIBLE);
            mHandler.postDelayed(() -> {
                resetVaraAndData();
                ivVerifyResult.setVisibility(View.INVISIBLE);
                PicUploadTask.getInstance().run();
            }, 2 * 1000);
    
        }
    
    *  实现身份证与人脸实时比对判断是否是一个人的Android Demo
    *  实时读取人脸信息。(框出人脸)
    *  放入身份证 立马读出身份证信息(性别、年龄 、身份证号码等)
    *  3秒内判断 身份证与实时当前实时人脸是不是同一个人
    *  可以将身份证信息、比对结果按照要求存储、数据库等。
    *  按照要求定制APP 和机器信息。
    

    需要此项目的sdk 、Demo或者有类似需求的,更多请:v: lixiaodaoaaa

  • 相关阅读:
    4年Java程序员十面阿里终拿下offer,评级P6+年薪30-40w无股票
    真香警告!手绘172张图解HTTP协议+703页TCP/IP协议笔记
    Git官方和创始人都推荐的Git权威指南,广度深度和实战性史无前例
    阿里“教授”总结整理手写大型网站技术架构:核心原理与案例分析
    GitHub上120K Stars国内第一的Java多线程PDF到底有什么魅力?
    霸榜GitHub必读书籍:编写高质量代码改善Java程序员的151个建议
    GitHub上260K Stars的P8架构师纯手写的Java高并发编程详解
    LeetCode每日一题:802 找到最终安全状态
    LeetCode每日一题:662二叉树最大宽度
    Springboot之security框架 登录安全验证授权流程
  • 原文地址:https://www.cnblogs.com/lixiaodaoaaa/p/11421218.html
Copyright © 2011-2022 走看看