人脸实时比对与身份证比对判断是否是一个人的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

原文地址:https://www.cnblogs.com/lixiaodaoaaa/p/11421218.html