关于此项目的需求
经常有这种需求,比如住宾馆、开证明,银行卡提款等 要验证这个人跟身份证是同一个人的需求,我们暂且叫做《人证比对》需求。那么这里一定牵涉到人脸的识别,识别出人脸,然后实时的拿到人脸,再去跟身份证的头像做比对。比对出一个结果值来,如果这个结果值特别像一个人,那么我们就认为它是一个人。(本文用Android 程序实现)实现身份证与人脸实时比对判断是否是一个人的Android Demo.
![5e143ded0ce505b73110cd964df9b60d.png](https://img-blog.csdnimg.cn/img_convert/5e143ded0ce505b73110cd964df9b60d.png)
身份证读卡
第一个就是要读取到身份证信息。拿到照片数据、身份证数据(比如身份证号码、年龄、性别、出生年月等)。这个设备就叫做身份证读卡器(比如 我们这个项目用的是《云从科技》的机器,集成了身份证读卡器,实际上是买的华视读卡器设备(提供了AndroidDemo 我们在这里封装成了 读卡器Libarary也叫 读卡器单独的module 、或者叫sdk)
关于此项目的介绍
实现身份证与人脸实时比对判断是否是一个人的Android Demo
![fae42c569c5e76671076a2e72963e48b.png](https://img-blog.csdnimg.cn/img_convert/fae42c569c5e76671076a2e72963e48b.png)
项目Demo截图
![032546c632456d76117062219c84a42a.png](https://img-blog.csdnimg.cn/img_convert/032546c632456d76117062219c84a42a.png)
![6350b6cb773fbdd0bf920fa7dac68b34.png](https://img-blog.csdnimg.cn/img_convert/6350b6cb773fbdd0bf920fa7dac68b34.png)
可以实现如下效果(实时比对 人脸动态与身份证比对)
![7f2c774307231acd0bb5e9e32f7430fc.png](https://img-blog.csdnimg.cn/img_convert/7f2c774307231acd0bb5e9e32f7430fc.png)
部分代码示意:
比对过程
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