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

本文涉及的产品
企业资质识别,企业资质识别 200次/月
OCR统一识别,每月200次
票证核验,票证核验 50次/账号
简介: 快速学习身份证识别系统搭建

开发者学堂课程【视觉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 返回的信息与上述一致,分别为正面信息和反面信息,用到的字段也一致

相关文章
|
人工智能 物联网 大数据
智慧班牌全套源代码 智慧班牌人脸识别云平台源码
主页公共信息显示:时间显示、天气状态、图片展示。 7.基本信息显示:学校名称及LOGO显示,年级、班级、学生信息、班级人数。 8.通知公告与发布:发布学校通知及公告、校园新闻、调课信息、寻物启事、班级评比等。 9.课程管理:课表显示、课程科目、任课老师、当前课程、下节课程等。 10.班级风采展示:班级活动、班风班貌、师生风采、班级视频及图片、班级荣誉展示等。 11.触摸互动:班牌具有触摸功能,学生可以对班牌中的内容进行查阅浏览,使学生能及时了解班级及校园情况。
|
人工智能 安全 小程序
|
消息中间件 缓存 运维
云HIS系统源码
SaaS运维平台+多医院入驻+强大的电子病历模板 JAVA语言开发,前后端分离 Java+Spring,SpringBoot,SpringMVC,SpringSecurity,MyBatisPlus,等
327 0
云HIS系统源码
|
人工智能 安全 数据挖掘
智慧校园云平台电子班牌人脸识别系统源码
源码开发环境:Java+springboot+vue+element-ui+mysql 智慧校园系统定位于中小学教育学校,侧重实际应用,讲究实际,突出加强校园安全监管,德育文化建设和家校互联,将信息技术与教育管理实现融合创新,利用智能身份感知、大数据、云服务技术开展对校园管理安全、文化和活动的信息收集、分析、判断,打造安全无缝化、沟通直观化、德育特色化、流程规范化的信息化校园。
172 0
智慧校园云平台电子班牌人脸识别系统源码
|
缓存 前端开发 NoSQL
人脸识别技术实现快递代取管理系统
人脸识别技术实现快递代取管理系统
165 0
人脸识别技术实现快递代取管理系统
|
JSON 文字识别 达摩院
身份证识别系统搭建
身份证识别系统的用途是在用户上传身份证照片正反面的时候,能够通过阿里达摩院视觉识别中的文字识别API来识别出二代身份证关键字段内容,关键字段包括:姓名、性别、民族、身份证号、出生日期、地址信息、有效起始时间、签发机关,同时可输出身份证区域位置和人脸位置信息。
1819 0
身份证识别系统搭建
|
编解码 文字识别 JavaScript
Day2笔记——身份证识别系统搭建
建立Spring boot框架,通过调用阿里云的SDK接口输出身份证的姓名、性别、民族、身份证号、出生日期、地址信息、有效起始时间、签发机关信息,同时可输出身份证区域位置和人脸位置信息。
Day2笔记——身份证识别系统搭建
|
人工智能
阿里云高校计划视觉AI五天训练营教程 Day 2 - 身份证识别系统搭建
实战讲述如何使用阿里云视觉平台API快速开发在线视觉AI平台,主要如何为如何搭建身份证识别系统,进而扩展到其他的识别系统。
阿里云高校计划视觉AI五天训练营教程 Day 2 - 身份证识别系统搭建
|
文字识别 Linux 开发工具
Day2-身份证识别系统的搭建
通过阿里云提供的智能视觉平台中的文字识别的SDK, 我们能够快速的搭建起身份证的识别系统, 并用以生产活动当中.
524 0
|
缓存 文字识别 前端开发
视觉训练营day2——身份证识别系统
视觉训练营day2——身份证识别系统 课堂笔记
视觉训练营day2——身份证识别系统