Day 02
作者:第五组 邓佳阳
打卡截图
学习笔记
身份证识别系统搭建
项目简介
(不废话,先看东西...)
用户上传身份证人像面和国徽面之后,点击开始识别,就可以得到身份证正反面的内容了。
如何获取视觉智能开放平台提供的 SDK ?
(进视觉智能开放平台找Java-OCR就对了)
Gradle和MAVEN都提供了,Aliyun做的是真滴全而省心。
项目实现逻辑
前端
喜闻乐见的HTML,具体实现基于 thymeleaf 做的一个模版。
上传方面,对input控件进行一定限制,有一个格式的规定,并且还写了一个alert,给用户的误操作提供了一个警示报错。
正确上传后的大致逻辑为两部分:一是展示上传的图片,二是对 OCR 识别出的信息进行展示,包括姓名、性别、民族、出生日期等信息。
控制层
(个人Java比较菜,年纪轻轻就上了C++的贼船)
控制层主要包括如下几部分:
● 定义的若干个私有成员;
● MainController;
● saveFile;
● index;
● uploadFile。
私有成员
私有成员变量包括上传图片文件本地保存地址(uploadDirectory)、调用视觉智能开放平台能力的封装(ocrService)、上传图片的缓存路径地址
(faceImage、backImage)、识别结果的缓存(faceResults、backResults)。
MainController
MainController 构造方法的代码如下图所示,其中 file.upload.path 变量是在配置文件中的,是本机的一个上传文件的目录地址,大家可以在实践的时候根据自己的情况进行设置。这里有个小技巧,这里配置的目录地址其实是项目 target 目录下的一个子目录,这是因为 springboot 会默认取 target 下的 static 目录作为静态文件的地址,如果我们这么设置的话,上传和读取文件对应的是同一目录,可以更方便的进行文件的读取和存储操作。
saveFile
saveFile 是一个私有方法,用来保存文件,其代码如下图所示。
index
index 是一个控制方法,是一开始进入页面时候用来加载模版的。首先是判断
faceImage 和 backImage 缓存是否一样,如果不一样,就全部清除掉;其次就是将已经上传的结果进行展示,起到一个重新刷新页面也不会丢失识别结果的作用。
uploadFile
uploadFile 也是一个控制方法,有三个参数,一个正面的人像面的文件,一个背面的国徽面的文件,还有一个用来重定向的参数。首先,判断两张图片是否是空的,如果是空的,将会重定向到 index,相当于重新进入首页,并且会有一个 message来提示用户必须要上传一个文件,否则是无效的;接下来判断上传目录是否存在,如果不存在就递归的进行创建;然后如果人像面的文件不为空,将其保存到本地,紧接着调用视觉智能开放平台的能力去进行识别,在拿到结果之后将上传的图片和识别结果加入到缓存池中,国徽面的处理方式也类似;最后几行代码是异常的处理,并且会告知用户是哪种报错。
OcrService
CcrService 的 实 现 代 码 如 下 所 示。 首 先, 是 4 个 私 有 变 量,ocrClient、runtime、accessKeyId 和 accessKeySecret, 其 中 accessKeyId 和 accessKeySecret 要在配置文件中进行配置;其次是一个初始化方法,初始化 Client 和runtime;接下来是真正调用视觉智能开放平台身份证识别的方法,具体来说,在设置好 request 之后,我们将 request 和 runtime 作为参数传递给 ocrClient 来调用身份证识别的方法,之后我们得到相应的 response,也就是识别的结果,之后我们将结果处理成哈希 Map 返回给控制层。
控制层拿到返回的结果之后,结合前端的优化进行结果的展示,至此,我们便完成了一个身份证识别系统的构建。
总结
自从转了C++和Python后,在这一块的具体应用方面再度看到官方文档出现Java,真的唏嘘不已。果然还是得两手抓,以及在Web方面Java还是老大哥。牛!