身份证识别系统搭建 | 学习笔记

简介: 快速学习身份证识别系统搭建

开发者学堂课程【视觉AI应用开发课程身份证识别系统搭建】学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/749/detail/13216


身份证识别系统搭建


内容介绍

一、身份证识别系统

 

一、身份证识别系统

1、系统界面

image.png

这是身份证识别系统的初始界面,需要上传人像面和上传国徽面。选定图片后点击“开始识别”。此时后台会将身份证的识别信息以及上传的身份证照片返回并展示。

image.png

2、项目结构

image.png

打开 src 源码包。这是项目是通过 spring-boot-starter 来创建的一个 spring boot 项目。 Application 是一个启动类, MainController是控制气层,负责模板的渲染以及路由等等, Ocrservice 是负责去调用视觉智能开放平台的 ocr 能力,其通过 SDK 调用。

在 resources 里。 indexd.html 是基于 templates 做的一个前端的一个模板,可以根据数据情况动态的渲染; practice 是包含了若干配置项的一个配置文件。

image.png

关于 pom 依赖。这里依赖了若干个 spring boot 的相关的依赖项,主要在于 spring-boot-starter 和 thymeleaf 的模板的依赖,以及 spring boot 单元测试的依赖。 comment 包用到了一些通用的函数和方法,视觉智能开放平台提供的 ocr 的一个 SDK ,运用 fastjson 是因为项目中用到了 json 的一个处理。

(1)如何获取视觉智能开放平台提供的 SDK

为了找到 ocr 的SDK ,首先进入视觉智能开放平台官网

http://vision.aliyun.com

在已上线的视觉方面的 AI 能力,点击文字识别,身份证识别,查看产品文档,主要来看 SDK 参考的部分。对于 Java 提供了两种 SDK ,第一种是通用的 SDK ,这个 SDK 要求调用 AI 算法时需要提供 OSS 的 URL ,即需要把一些图片上传到 OSS 里,再拿到该图片的 URL ,才能调用 SDK 。

image.png

新版的 Java 的 SDK 支持本地文件上传,在传入参数时不仅可以使用图片的 URL ,还可以使用本地文件,直接使用 ocr 进行各种识别,以调用 AI 能力。

要找到 ocr  的SDK ,如新版本引入的 POM 为<artifactId>ocr</artifactId>。

<dependency>

<groupId>com.aliyun</groupId>

<artifactId>ocr</artifactId>

<version>${aliyun.ocr.version}</version>

</dependency>

说明:可以通过 http://mvnrepository.com/artifact/com.aliyun/SDK 包名称,查看不同服务 SDK 的版本,如 http://mvnrepository.com/artifact/com.aliyun/ocr

image.png

此时的 OCR 产品也通过 SDK 进行了若干次的升级。

image.png

此时的版本为1.0.3,没有坐标,也就是在代码里使用的没有坐标。

(2)如何使用视觉智能开放平台提供的 SDK

image.png

首先是基于 thymeleaf 的一个前端的模板。

最上面为标题,其下是两个提供上传文件的组件,以及一个按钮。

image.png

其次是代码,代码为一个标题,其下是一个表单,表单里有两个文件上传的按钮,分别是并列的上传人相面和上传国徽面。这里借用了 bootstrap 和 jquery 的能力来实现美化界面的作用。 div 里面实际展示了基于 bootstrap 绘制了一个文件上传的一个组件,通过代理了 file 类型的 input 框来实现美化的作用,相当于点击上一层,实际是把文件上传到 input 的组件,然后再把 input 的组件里面的内容传给放入表单,最后提交。下面的文件上传的按钮也是同样的道理。此外限定了若干种图片上传类型, jpg、png 以及 jepg 。

这里隐藏式的页面结构, input 框也有类型,其 display被设置为 now ,相当于这是原生的一个 input 框;上面是基于 bootstrap  绘制的一个 input 框,这是真正展示的一个样式,他有一个 onclick 的事件通过 i-face 的 ID ,通过这个 ID 其实就是找到了 input 框的组件,相当于 onclick 事件点到了 input 组件,也就相当于这是一个 input 组件的一个门面。

下面是一个提交按钮,这是表单的一个提交按钮,注意到这里有一个 alt 的 Message ,其作用在于当提示用户上传图片有问题、报错等,可以将其展示出来,这里用了 thymeleaf 的一些语法,当信息不为空的时候才展示出来,否则是不展示的。

再下面是上传完图片进行身份证识别、拿到真正的识别数据之后,进行的一个展示,可以看到对两张上传的图片进行了展示,使用 img 标签, faceImage 和 backImage 是后端返回的一个图片文件的地址,这里也同样使用了 thymeleaf 的语法,即这个图片不为空的时候才会展示出来。

image.png

这是展示身份证识别的文字结构,识别结果不为空才展示。正面照片有性别、姓名、性别、民族、出生日期、住址、身份证号码,背面主要信息有签发机关有效日期。

(3)控制气层

进入 MainController

image.png

用 Controller 以及 RequestMapping , spring boot 提供的education来给 MainController 加注解,另外这里面定义了若干个私有成员、私有变量。 uploadDirectory 定义了上传图片文件本已保存的地址, ocrService 提供了一层调用识别智能开放平台 ocr 能力的一层封装, faceImages 和 backImages 缓存了之前上传图片的一个路径地址, faceResults 和 backResults 是缓存之前的识别结果。这四个变量因为没有用到数据库,所以其实是在内存里面缓存了上传图片和识别结果的信息,这是一个构造方法。 

image.png

saveFile 用于保存文件。

image.png

两个控制方法:一个是 index ,一个是 uploadFile 。

image.png

upload.path 在配置文件里面,这个配置文件在实际操作的时候可以设置成自己电脑上的一个目录。关于上传文件地址,地址配置的目录中,除了用户目录, viapi-demo 是项目的根目录, target、classes、static、images 是已给的,这样配的原因是因为 spring boot 会默认取 static 目录作为静态文件的地址,现在文件地址来自于 resources 目录下的 static 目录,如果把静态文件放在 static 目录下,就会根据这个相对路径去取该文件的地址,这是源码里面的目录,编译完成之后,它的目录结构是 target、classes、com、templates , com下面是代码的编译完成的 classes 文件, templates 是前端的模板文件, static 目录对应了 resources 的 static 目录,也就是静态文件地址。把这个文件地址配置到 classes 的原因是 spring boot 会默认来这里取静态文件的地址啊,因为这里没有做静态文件的代理,所以把文件的上传地址直接配置到这里,也就是上传文件也上传到 static 目录下,取这个文件的时候也从这里取,这样就方便进行文件的存储和读取的操作, images 是相对 static 的一个自定义的目录,这个目录下存放了图片类的数据。

Index 相当于页面初始进来的时候会通过这个方法来加载模板,前面的一段逻辑指在异常情况下这两个缓存的图片的数量不一样,可以把它都清除掉;下面的一段逻辑指如果之前有上传过图片并且成功识别了,那么把这些前一次上传以及识别的结果加载到首页,相当于刷新页面,之前上传以及识别的不会丢失,还会展示在页面上。

image.png

上传文件的控制方法:两个参数:一个是 face ,其类型是 MultipartFile ,也就是正面人像面的文件, back 是国徽面的文件,这个参数也是重定向的参数,如果这两张图片是空的,可直接重定向到首页,再通过 index 模板进入首页。此外添加 Message 提醒必须要上传一个文件,否则上传是没有作用的。

image.png

主要的逻辑:首先看上传目录是否存在,如果不存在的话,需要创建目录,如果人像面的图片不为空,那么把它保存到本地,保存图片的逻辑是通过 StringUtils 的公用方法来将文件的后缀名解出来,并生成一个 UUID 的随机的文件名,并且加上后缀,以防止上传图片时重复的文件名会将旧文件覆盖掉,再用 File copy 来将文件保存到本地,并且返回其文件名。

保存成功后调用 ocrSevise 的身份证识别的方法,输入文件的完整路径,并且确定是人像面的照片,这样就可以得到返回的识别结果,将已经上传的图片和识别的结果加入到缓存池里,这里加 images 是因为保存目录中有 images , spring boot  默认的访问地址是在 static 下,相当于 images 加上文件名就可以访问文件地址。

国徽面的处理大同小异,只是参数、保存的地方略有不同。其参数为 back 。

对于异常处理,如果有异常信息,首先打出来通过 errorMessage 进行捕捉,再将 errorMessage 加入到 Message 中,提醒用户出错以及错误原因,最后再回到首页,这样就把 faceImages 和 faceResults 以及 back 的相关的上传图片的信息以及结果都会渲染到这个页面上。

image.png

ocrSevise 的实现逻辑: ocrClient 是调用 ocr 能力的时候需通过需要一个 client 、一个 runtime 的参数, accessKeyID 和 accessKeySecret 是在开通视觉智能开放平台的视觉能力时,会用到自己阿里云账户的 KeyID 和 KeySecret ,需要把其配置到配置文件里。

ocrSevise 的初始化的方法是利用 spring boot 提供的 PostConstruct 标注来实现初始化,这里需要初始化若干个 Config 信息,通过该信息来初始化 ocrClient 和 runtime , runtime 是一个空对象,该对象在下面调用。

image.png

调用身份证识别的逻辑: RecognizeIDCard 有两个参数,String  filePath 和 String side , filePath 是本地的文件路径, side 是标识身份证正反面的信息。

Request 的代码: Request 是在 Maven 包下,这里有很多的 ocr 的能力,这里只用到了身份证识别。 Request 有两个参数,一个叫 imageURLObject ,他接受的是 InputStream ;另外一个是 Side ,他接受的是 Stream ,他有两个值,一个叫 face 一个叫 bank ,这个可以在 vision 的官网看到。把两个参数分别复制,借助工具类直接去 new 一个 InputStream ,然后通过 filePath拿到 file ,把 side 参数传给 request ,通过 ocrClient 来调用身份证识别的方法,把 request 和 runtime 传给这个方法,就可以拿到一个 response 。  response 返回的数据叫 date ,他有两个 Result , 一个叫 frontResult ,一个叫 backResult ,也就是正反面的结果。如果是正面,就取正面结果,通过 JSON 返成 MAP 的结果,反面同理。将其返回给控制层,将结果加入其中进行展示。展示时,前端的代码有正反面信息的结果,为了简化这个流程用到了 Map 的结构进行返回,原本的 SDK 定义也有其自己的结构定义,其 Response 返回的信息与上述一致,分别为正面信息和反面信息,用到的字段也一致

相关文章
|
JavaScript 前端开发 Java
SpringBoot+Vue打造资产出入库管理系统(二)
SpringBoot+Vue打造资产出入库管理系统
826 2
|
安全 Python Windows
python - http请求带Authorization
# 背景 接入公司的一个数据统计平台,该平台的接口是带上了Authorization验证方式来保证验签计算安全   # 方法 其实很简单,就是在header中加入key=Authorization,value是协商好的协议即可; 如,我们这边是base64.
5271 0
|
7月前
|
机器学习/深度学习 人工智能 运维
AI加持的系统性能优化:别让你的服务器“累趴下”
AI加持的系统性能优化:别让你的服务器“累趴下”
396 12
|
11月前
|
机器学习/深度学习
 GHSL: 全球1975 年到 2030 年以 5 年间隔建成面积的分布情况(100m)
全球人类住区图层(GHSL)项目提供了1975年至2030年建成面积的分布数据,以每100米网格单元为单位,涵盖建筑总面积及非住宅用途面积。该数据集由欧盟委员会联合研究中心(EC JRC)提供,时间间隔为5年,支持时空分析与预测。详情参见[GHSL 数据包 2023](https://ghsl.jrc.ec.europa.eu/documents/GHSL_Data_Package_2023.pdf?t=1683540422)。
356 7
|
机器学习/深度学习 人工智能 数据可视化
首篇虚拟现实+人工智能综述!浙大、港中深等发布AI医疗最新报告
【9月更文挑战第21天】近年来,AI驱动的虚拟现实(VR)技术革新了医疗领域,浙江大学等发布的报告系统性审视了这一融合趋势。报告提出三大应用分类——可视化增强、医疗数据处理与VR辅助干预,助力精准诊疗。然而,技术成熟度、数据安全及伦理问题仍待解决。这一跨学科研究为未来医疗科技奠定了基础。报告详情参见:&lt;https://www.ijcai.org/proceedings/2024/920&gt;。
365 4
|
存储 SQL 分布式计算
Hadoop生态系统概述:构建大数据处理与分析的基石
【8月更文挑战第25天】Hadoop生态系统为大数据处理和分析提供了强大的基础设施和工具集。通过不断扩展和优化其组件和功能,Hadoop将继续在大数据时代发挥重要作用。
|
机器学习/深度学习 人工智能 文字识别
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
|
机器学习/深度学习 人工智能 Python
性能调优:提升AI模型准确率的策略
【7月更文第17天】在人工智能的世界里,打造一个预测精准、表现优异的模型就像是烹饪一道美味佳肴,不仅要选对食材(特征),还得掌握火候(超参数调整)和调味技巧(正则化)。今天,我们就来聊聊如何通过《性能调优:提升AI模型准确率的策略》,让我们的AI模型变得更加聪明伶俐。
1336 0
|
监控 数据可视化 前端开发
高效设计企业营销系统的3种方案实践复盘
高效设计企业营销系统的3种方案实践复盘
395 2
|
JavaScript Java 测试技术
基于小程序的社区互助养老+springboot+vue.js附带文章和源代码设计说明文档ppt
基于小程序的社区互助养老+springboot+vue.js附带文章和源代码设计说明文档ppt
170 0