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

本文涉及的产品
票据凭证识别,票据凭证识别 200次/月
小语种识别,小语种识别 200次/月
个人证照识别,个人证照识别 200次/月
简介: 快速学习身份证识别系统搭建

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

相关文章
|
1天前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之通用文字识别的开通流程和注册办理是怎样的
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
1月前
|
文字识别 算法 Java
印刷文字识别产品使用合集之证件规格不统一,可以用全文识别吗
印刷文字识别(Optical Character Recognition, OCR)技术能够将图片、扫描文档或 PDF 中的印刷文字转化为可编辑和可搜索的数据。这项技术广泛应用于多个领域,以提高工作效率、促进信息数字化。以下是一些印刷文字识别产品使用的典型场景合集。
|
1月前
|
JSON 移动开发 自然语言处理
【社区每周】人脸核身方式升级(12月第四期)
【社区每周】人脸核身方式升级(12月第四期)
45 6
|
9月前
|
人工智能 物联网 大数据
智慧班牌全套源代码 智慧班牌人脸识别云平台源码
主页公共信息显示:时间显示、天气状态、图片展示。 7.基本信息显示:学校名称及LOGO显示,年级、班级、学生信息、班级人数。 8.通知公告与发布:发布学校通知及公告、校园新闻、调课信息、寻物启事、班级评比等。 9.课程管理:课表显示、课程科目、任课老师、当前课程、下节课程等。 10.班级风采展示:班级活动、班风班貌、师生风采、班级视频及图片、班级荣誉展示等。 11.触摸互动:班牌具有触摸功能,学生可以对班牌中的内容进行查阅浏览,使学生能及时了解班级及校园情况。
|
人工智能 安全 数据挖掘
智慧校园云平台电子班牌人脸识别系统源码
源码开发环境:Java+springboot+vue+element-ui+mysql 智慧校园系统定位于中小学教育学校,侧重实际应用,讲究实际,突出加强校园安全监管,德育文化建设和家校互联,将信息技术与教育管理实现融合创新,利用智能身份感知、大数据、云服务技术开展对校园管理安全、文化和活动的信息收集、分析、判断,打造安全无缝化、沟通直观化、德育特色化、流程规范化的信息化校园。
智慧校园云平台电子班牌人脸识别系统源码
|
文字识别 搜索推荐 数据挖掘
玩法平台-文字识别OCR-任务组的测评
读光通用文档类OCR识别产品,可将各类常见文档图片或文档扫描件中的文字信息按照文档原有的格式进行文本识别和还原。
玩法平台-文字识别OCR-任务组的测评
|
JSON 文字识别 达摩院
身份证识别系统搭建
身份证识别系统的用途是在用户上传身份证照片正反面的时候,能够通过阿里达摩院视觉识别中的文字识别API来识别出二代身份证关键字段内容,关键字段包括:姓名、性别、民族、身份证号、出生日期、地址信息、有效起始时间、签发机关,同时可输出身份证区域位置和人脸位置信息。
1787 0
身份证识别系统搭建
|
人工智能
阿里云高校计划视觉AI五天训练营教程 Day 2 - 身份证识别系统搭建
实战讲述如何使用阿里云视觉平台API快速开发在线视觉AI平台,主要如何为如何搭建身份证识别系统,进而扩展到其他的识别系统。
阿里云高校计划视觉AI五天训练营教程 Day 2 - 身份证识别系统搭建
|
编解码 文字识别 JavaScript
Day2笔记——身份证识别系统搭建
建立Spring boot框架,通过调用阿里云的SDK接口输出身份证的姓名、性别、民族、身份证号、出生日期、地址信息、有效起始时间、签发机关信息,同时可输出身份证区域位置和人脸位置信息。
Day2笔记——身份证识别系统搭建
|
文字识别 Linux 开发工具
Day2-身份证识别系统的搭建
通过阿里云提供的智能视觉平台中的文字识别的SDK, 我们能够快速的搭建起身份证的识别系统, 并用以生产活动当中.
497 0