文字识别项目讲解及使用说明 | 学习笔记

本文涉及的产品
视觉智能开放平台,图像资源包5000点
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,视频资源包5000点
简介: 快速学习文字识别项目讲解及使用说明

开发者学堂课程【达摩院视觉AI课文字识别项目讲解及使用说明】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/335/detail/3835


文字识别项目讲解及使用说明

借助阿里云视觉智能平台提供的能力,实现简单的身份证识别系统,首先查看系统的功能呈现和界面呈现

41.png

 

身份证识别系统的初始界面,需要上传人像面和国徽面,上传,选定图片后,点击开始识别

42.png

 

后台将身份证识别的信息以及上传的身份证照片返回,是一个简单身份证识别的系统

介绍系统实现的核心逻辑以及如果使用SDK、OCR及其他其他java能力

 

项目的整个结构,打开src java包,项目是通过StringBootStructure创建的一个StringBoot项目,Application是StringBoot的启动类

Control是控制器层,负责模板的渲染、路由等

OcrServive负责调用视觉智能开发平台的ocr能力,通过sdk调用,resources中index基于templates做的前端的模板,可以根据数据情况动态地渲染,properties是一个包含若干配置的配置文件,配置含义稍后会具体介绍

查看pom依赖

依赖若干个stringboot相关的依赖项,主要是string-boot-starter以及thymeleaf的依赖,以及string-boot单元测试的依赖

下面是Apache提供的commons包,用到其中通用的函数、通用的方法


org.apache.commons


 

下面是视觉智能开放平台提供的ocr的sdk

com.aliyun

ocr

1.0.3


 

下面是fastjson,项目中用到了json的处理


com.alibaba

fastjson

1.2.67


 

重点查看视觉智能开放平台提供的sdk如何获取、如何使用

找到ocr的sdk,进入视觉智能开放平台官网,vision.aliyun.com

上新很多视觉智能开放平台的AI能力

找到文字识别、身份证识别,进入,查看产品文档,文档中主要看SDK部分,SDK参考,因为文件对java来说提供两种SDK,第一种是通用的SDK,有一些要求,调用AI算法时,需要提供OSS的URL,先把图片上传到OSS中,拿到图片的URL,才能调用SDK

43.png

 

另外新版的java的SDK,支持本地上传,通过此SDK可以直接将本地的文件交给视觉智能开放平台进行OCR的识别以及人脸识别等调用AI能力

里面有很多产品的SDK,需要找到OCR的SDK调用给出了一个样例,需要ocr的version找到最新版的SDK

com.aliyun

ocr

${aliyun.ocr.versiony


 

可以通过下方说明的连接找到http://mvnrepository.com/artifact/com.aliyun

复制链接打开加上ocr

44.png

 

输入验证码

可以看到ocr产品sdk进行若干次升级,目前代码使用的版本是1.0.3

45.png

 

Main坐标是在代码中使用的坐标

以上是如何获取视觉智能开放平台的SDK方法

整个项目的实现逻辑与需要注意的点或方法

回到代码中,首先查看基于template做的前端模板

模板页面上面是标题,下面是表单,提供两个上传文件的组件,旁边有一个按钮

代码中


VIAPI RecognizeIdentityCard Example

是一个标题

下面是有一个表单

46.png 

 

表单中有两个文件上传的按钮,两个并列的上传人像面和上传国徽面的按钮

借用bootstrap和script能力

http://apps.dbimg.com/libs/jquery/2.1.4/jquery.min.js</a>”>

 

实现美化界面的作用

Div中实际展示了基于bootstrap绘制上传了一个组件,通过代理input框实现美化的作用,相当于点击这一层将文件上传到input组件,将input组件中的内容传给form表单,提交

<div class=”col-sm-4”>

<div class=”input-group”>

<input id=’location’ class=”from-control” onclick=”&(‘#i-face’).click();”>

<label class=”input-group-btn”>

<input type=”button” id=”i-check” value=”上传人像面” class=”btn btn-primary” onclick=”&(‘#i-face’).click();”>

</label>

</div>

</div>

下方文件上传的按钮是同样的操作

47.png

 

以看到文件上传的类型.jpg、.png、.jpeg

Input框是file类型,但是display设置为now,相当于是一个原生的input框,上面基于bootstrap绘制的input框,是真正展示的样式,有一个onclick事件,通过i-face id找到input组件,onclick事件相当于点到input组件,是input组建的们门面

开始识别

 

是一个提交的按钮,能注意到有一个alert的message,相当于作用提示客户上传的有问题,报错之类的,会展示出来,信息不为空会展示,否则不展示

48.png

 

上传完数据、图片进行身份证识别拿到这真正识别数据之后进行的展示

对两张上传数据进行展示,使用img标签,faceiamge与backimage是后端返回的文件,图片返回的地址使用template语法,图片不为空时,展示出来

 

展示身份证识别的文字结果,使用识别结构不为空时展示出来,正面照片有姓名、性别、民族、出生年月、住址、身份证号码,背面有签发机关和有效日期

以上是前端页面的结构和实现的逻辑点

 

介绍控制器层,在maincontroller中用controller以及stringboot提供的加了注解

定义了若干个成员和变量

public class MainController {

private string uploadDirectory;

private OcrService ocrService;

private List facelmages;

private List backImages;

private List> faceResults;

private List> backResults;

 

UploadDirectory定义上传文件,本地保存的地址

ocrService提供调用视觉智能开放平台ocr能力的一层封装

faceImage与backImage缓存之前上传图片的路径地址,faceResults与backResults是缓存之前的识别结果,faceImage、backImage、faceResults与backResults四个变量因为需要使用数据库,在内存中缓存上传图片和识别结果的信息,

public NainController(@value("$(file.upload.path)") String uploadDirectory,ocrService ocrservice) {

this.uploadlDirectory =uploadDirector;

this.ocrServiee = oerservice;

faceImages =new ArrayList<>();

baceImages =new ArrayList<>();

faceResults =new ArrayList<>();

baceResults =new ArrayList<>();

}

是一个构造方法

Upload.path在配置文件中

Spring.servlet.muiltipart.max-file-size=100MB

File.upload.path=/Users/ioffcs/home/code/viapi-demo/target/classes/static/images/

Viapi.accessKeyId=xxx

Viapi.accessKeySecret=xxx

配置文件是本机的一个目录,在实际操作时替换成自己电脑的目录

上传文件地址配置的目录,前面是用户目录,viapi-demo是项目的更目录classes、static下面的images目录,stringboot默认取static目录作为静态文件的一个地址,地址来自于resources目录下的statics目录,将静态文件放在目录下,会根据相对路径取文件的地址

49.png

 

是源码中的目录,编译完成后,变成下方目录

50.png

 

Target、classes、com、static,templates对应上面templates是前端模板文件,static对应上面static,静态文件地址,将文件地址配置到static目录下,stringboot默认取静态文件的地址,没有做静态文件的代理,将文件地址之间配置到static,将文件上传到static目录下,方便文件存储和读取操作,images是相对static自定义的一个目录,对目录下存放图片类的数据,将地址替换为自己本机的就可以

回到controller中

Save方法保存文件

有两个控制方法index与uploadFile

页面初始通过图片方法加载模板

@RequestMapping()

public string index (Model model){

if(faceImages.size() I=backImaes.size()){

faceImages.clear();

backImages.clear();

faceResults.clear();

backResults.clear();

异常情况下两张缓存图片不一样,修改,不断完善

if(!collectionUtils.isEmpty(faceImages)&&faceImages.size()== backImages.size ()){

model.addAttribute( s: "faceImage",faceImages.get(faceImages.size()-1));

model.addAttribute(s: "faceResult", faceResults.get(faceResults.size()- 1))

model,addAttribute( s: "backImage",backImagee.get(backImages.size()- 1));

model.addAttribute( s: "backResult",backResults.get(backResults.size()- 1))1

}

retorn"index";

如果有上传过图片,成功识别后,将前一次上传的结果以及识别的结果加载到首页中,重新刷新页面,之前上传和识别结果不会丢失,展示在页面上

上传文件的控制方法,接收face,类型是multipartFile,正面是人像文件,back是封面的一个文件,参数后面也能使用到

首先查看两张图片是否为空,如果为空,重新上传到首页通过index模板访问进入首页,增加一个message,提醒必须上传文件,否则上传是没有作用的,进入逻辑中,查看上传目录是否存在,存在进行递归,创建目录,如果人像面图片不为空,保存到本地

保存通过stringUtils方法,将文件后缀名解出,生成一个UUID的随机文件名,加上后缀,作用防止上传图片是重复的,文件名会将旧的覆盖,复制将文件保存到本地,并且返回文件名

拿到文件名相当于保存成功,调用ocrService身份证识别方法,将文件的完整路径说明,以及说明是人像面照片,拿到返回的一个识别结果

将已经上传的图片加入到缓存池中,将识别结果加入到缓存池中,加images是因为保存目录有images,stringboot默认的保存地址是在static下,相当于images加上文件名就可以保存文件的地址

if(!faee.isEmpty()){

String filename=saveFile(face);

Map res = ocrService.RecognizeIdcard( filePath: uploadDirectory + filename,side: "face")

faceImges.add( "/Images/" +filename);

faceResults.add (res);

}

If (!back.isEmpty ()){

国徽面照片的处理方式也是类似的,参数和保存的地址可能有区别,参数back

下面有异常处理,如果有异常信息,先打出来,然后捕捉,将errormessage加到message,提新用户出错

会对逻辑中,将图片上传的一些信息、结构渲染到界面上,整体是控制器层的实现逻辑

查看ocrService实现逻辑

ocrService有几个变量,ocrClient调用ocr能力时需要client,runtime参数

AccessKeyId与AccessKeySecret

在开通视觉智能开放平台的能力时,会用到阿里云keyId和keySecret,需要配置到配置文件中

配置到自己的keyId和keySecret

有一个初始化方法用strinboot提供postConstruct实现初始化,初始化实现初始config若干信息,通过config信息初始化ocrClient,初始化一个Runtime,Runtime是一个空的对象,需要命名一个空对象,需要在里面调用

查看调用身份证识别的逻辑

调用的RecognizeIdCard方法,有两个参数,filePath和side,filePath是本地文件路径,side是标识身份证正反面信息,需要new一个request,reguest点进去查看代码

51.png

 

Request有两个参数,一个为imageURLObject,接收inputStream,另外一个是side,接收String,有两个值face、side,在官网可以查看

将两个参数复制,files借助工具类new一个inputStream,通过filePath拿到file,将side参数传给request,通过ocrClient调用身份证识别的方法,将request和runtime传给方法,可以拿到一个response,response返回的数据是data,定义有两个result,一个是frontResult,一个是backResult,

如果是正面的,取正面结果,通过发送json转成哈希map结构,反面同理

If("face ".equals(side)){

return JSON.parseObject (JSON.JSONString(response.data. frontResult),new TypeReference>(){})

}else{

return JSON.parseObject(JSON.toJSONString(response.data.backResult),new TypeReforence>() {});

}

Controller层拿到结果加入到结果中,最后做展示

前端代码用到faceResult.name、gender、nationality、birthDate、address、IDNumber,以及背面issue、startDate、endDate结果,简化流程用哈希map,sdk定义中有自己的结构定义

Response正面结果定义

有name、gender、nationality、birthDate、address、IDNumber,有刚才字段是相同的,将结构返回到前端,可以根据自己喜好做一些属性,ocrService以这种方式给调用。

相关文章
|
6月前
|
文字识别 异构计算 Python
关于Github中开源OCR项目的实验过程与思考
新手尝试Git clone Python OCR项目,遇到各种报错。测试了Paddle OCR、Tesseract OCR和EasyOCR。Paddle OCR因平台限制未能在Notebook部署,Tesseract OCR在Colab成功但无法复现。EasyOCR最终在阿里云天池和Colab部署成功,但天池GPU资源不足。建议使用魔搭社区的实例,阿里云提供免费OCR服务。寻求简单OCR项目推荐。附EasyOCR安装和使用代码。
234 2
|
4月前
|
文字识别 Java Spring
文本,文字识别,SpringBoot服务开发,SpringBoot如何提供上传服务,接口的设计,它做了将Base64重新转为图片,SpringBoot的应用实例,项目基础搭建
文本,文字识别,SpringBoot服务开发,SpringBoot如何提供上传服务,接口的设计,它做了将Base64重新转为图片,SpringBoot的应用实例,项目基础搭建
|
存储 文字识别 算法
基于飞桨实现项目2 中文场景文字识别
基于飞桨实现项目2 中文场景文字识别
264 0
基于飞桨实现项目2 中文场景文字识别
|
文字识别
【OCR学习笔记】9、OCR中文项目综合实践(CTPN+CRNN+CTC Loss原理讲解)(三)
【OCR学习笔记】9、OCR中文项目综合实践(CTPN+CRNN+CTC Loss原理讲解)(三)
226 0
|
机器学习/深度学习 文字识别 算法
【OCR学习笔记】9、OCR中文项目综合实践(CTPN+CRNN+CTC Loss原理讲解)(二)
【OCR学习笔记】9、OCR中文项目综合实践(CTPN+CRNN+CTC Loss原理讲解)(二)
347 0
|
机器学习/深度学习 文字识别 算法
【OCR学习笔记】9、OCR中文项目综合实践(CTPN+CRNN+CTC Loss原理讲解)(一)
【OCR学习笔记】9、OCR中文项目综合实践(CTPN+CRNN+CTC Loss原理讲解)(一)
446 0
|
SQL 机器学习/深度学习 人工智能
王炸:这个GitHub 20000+ Star的OCR项目迎来四大重磅升级
王炸:这个GitHub 20000+ Star的OCR项目迎来四大重磅升级
742 0
|
存储 文字识别 自然语言处理
【Spring Cloud】新闻头条微服务项目:文章内容安全审核(新增DFA+OCR过滤敏感词需求)
对文章审核新增加了需求----敏感词过滤,介绍了基于NFA的文本敏感词过滤及OCR提取图片文字的原理及实现,最后将文章审核代码做了合并。
549 0
【Spring Cloud】新闻头条微服务项目:文章内容安全审核(新增DFA+OCR过滤敏感词需求)
|
人工智能 文字识别 前端开发
第三节课——【文字识别项目讲解及使用说明】(一)|学习笔记
快速学习第三节课——【文字识别项目讲解及使用说明】
129 0
第三节课——【文字识别项目讲解及使用说明】(一)|学习笔记
|
文字识别 Linux
Tesseract OCR开源项目-转载
原文:http://hi.baidu.com/shirdrn/blog/item/8c775488889b5a9da4c27284.html     Tesseract OCR开源项目2009年08月28日 星期五 18:00 最近,项目中需要使用基于图像识别验证码的技术,初步探索尝试了一下开源的Tesseract OCR项目。
1185 0