前言:

首先呢,最近再公司的项目当中遇到这样的一个问题,就是需要识别图片,提取图片当中的关键语句,而且识别的语句当然是人家手写体识别,翻来覆去一想,最终还是决定使用百度的OCR帮助我解决这一项需求

话不多说,我们直接开始

先去官网一探究竟

https://cloud.baidu.com/product/ocr

这里我们看到有很多相关的产品,大致都是图片文字识别,大致都相同

我们在这里选择自定义模板识别,这样跟符合我们逻辑业务的需求,让用户去手填一个单子,肯定会有一定的模板信息,这样识别的精度和准确性相比通用识别的话,会好很多/

点击立即使用,进入到模板添加页面,我们需要添加要给自定义模板,为了方便测试,这里提供一个我自己测试用的模板图片方便大家测试

这里是一个公司经常都会用到的一个费用报销清单,很适合我们这次的模板识别;

点击添加模板,上传这张图作为文件

新建识别字段

框选识别区新建

这里需要新建四个识别字段,我们这里就建立这样四个就好。识别字段就是在你上传图片后 它会按照这个去作为参考,然后去识别对应的识别区;

小试牛刀

这里新建完成后,保存,然后找一张手写的图片,进行一个测试,这里我提供一张图片作为参考:

随便写了几个名字,手写的还行 !哈哈

测试,进行识别操作

进行了一波识别,效果还是不错的,识别效果特别好,然后就可以接入项目当中了,这里我们当然选择Springboot 现在主流的框架,有什么理由不用呢?

发布成功后,记住模板ID,还有去创建一个App,这里百度有详细的介绍,我这里就不过多介绍了,我们直接开始新建要给Springboot项目,参考文档,引入POM依赖,直接开干

<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.8.0</version>
</dependency>

百度这里最新的版本号是:4.8.0,引入即可

新建AipOcr

AipOcr是Optical Character Recognition的Java客户端,为使用Optical Character Recognition的开发人员提供了一系列的交互方法。

用户可以参考如下代码新建一个AipOcr,初始化完成后建议单例使用,避免重复获取access_token:

这里我们直接使用SpringBoot的Bean注入的方式使用:

/**
* 百度云token
*/
@Configuration
public class Sample { //设置APPID/AK/SK
@Value("${api.baidu.com.appid}")
private String APP_ID;
@Value("${api.baidu.com.appkey}")
private String API_KEY;
@Value("${api.baidu.com.appsecret}")
private String SECRET_KEY; @Bean
public AipOcr createAipOcr(){ AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY); //建立连接的超时时间(单位:毫秒)
client.setConnectionTimeoutInMillis(2000);
//通过打开的连接传输数据的超时时间(单位:毫秒)
client.setSocketTimeoutInMillis(60000); return client;
} }

这样用起来多方便,Springboot 大爱,太好用了,全局只需要初始化一个对象,全局调用,不用反复考虑Token的问题;

这里用一下官方的代码,说明一下直接调用AipOcr多爽,识别后,返回Json格式字符串,判断美哟错误的话,直接解析Json字符串即可

public void sample(AipOcr client) {
// 传入可选参数调用接口
HashMap<String, String> options = new HashMap<String, String>();
options.put("templateSign", "Nsdax2424asaAS791823112");
options.put("classifierId", "31232"); // 参数为本地路径
String image = "test.jpg";
JSONObject res = client.custom(image, options);
System.out.println(res.toString(2)); // 参数为二进制数组
byte[] file = readFile("test.jpg");
res = client.custom(file, options);
System.out.println(res.toString(2));
}

Demo演示:

参考:

http://ai.baidu.com/docs#/OCR-Java-SDK/aadf7467

https://cloud.baidu.com/doc/OCR/s/0jwvy03go/

https://cloud.baidu.com/doc/OCR/OCR-API.html#.E6.9B.B4.E6.96.B0.E8.AE.B0.E5.BD.95

Demo分享:如果觉得文章有帮到你的地方 不妨给个Star吧!

码云:https://gitee.com/mrc1999/baiduOcr

Springboot 结合百度IORC实现自定义模板图片识别的更多相关文章

  1. SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后端篇(五): 数据表设计、使用 jwt、redis、sms 工具类完善注册登录逻辑

    (1) 相关博文地址: SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境:https://www.cnblogs.com/l-y-h/p ...

  2. 百度小程序自定义通用toast组件

    百度小程序Toast组件 author: @TiffanysBear 百度小程序自定义通用toast组件 BdToast百度小程序自定义通用组件-github地址 需求 手百小程序的toast仅支持在 ...

  3. WPF Step By Step 自定义模板

    WPF Step By Step 自定义模板 回顾 上一篇,我们简单介绍了几个基本的控件,本节我们将讲解每个控件的样式的自定义和数据模板的自定义,我们会结合项目中的具体的要求和场景来分析,给出我们实现 ...

  4. SublimeText插件Emmet的自定义模板

    在前端界,作为快速生成代码的Emmet插件相当给力.最近在学bootstrap,需要频繁生成html头文件,我就想着自定义模板.国内只有基础教程,只好自己读英文文档了. Emmet国内基础教程地址: ...

  5. 如何在网中使用百度地图API自定义个性化地图

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. SpringBoot常用Starter介绍和整合模板引擎Freemaker、thymeleaf 4节课

    1.SpringBoot Starter讲解 简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-boot/doc ...

  7. JavaScript中作用域回顾(避免使用全局变量)(瀑布流的实现)(scroll事件)以及Django自定义模板函数回顾

    页面显示照片样式为瀑布流: 上面的div个数可以按照自己安排进行划分.img的分布可以使用模板标签以及自定义模板函数进行排布: 自定义模板函数实现可以看,最后几列:python---django中模板 ...

  8. springboot + 拦截器 + 注解 实现自定义权限验证

    springboot + 拦截器 + 注解 实现自定义权限验证最近用到一种前端模板技术:jtwig,在权限控制上没有用springSecurity.因此用拦截器和注解结合实现了权限控制. 1.1 定义 ...

  9. 数字IC设计入门必备——VIM自定义模板调用与VCS基本仿真操作示例

    一.前言 毕业论文答辩结束,闲下来写篇文章.芯片研发人员都在Linux系统下借助各种EDA工具和代码语言完成工作,因此提高代码开发效率,熟练运用开发工具是十分必要的.本文讲述VIM编辑神器的veril ...

随机推荐

  1. go的接口内部实现

    1 前言 1.1 Go汇编 Go语言被定义为一门系统编程语言,与C语言一样通过编译器生成可直接运行的二进制文件.这一点与Java,PHP,Python等编程语言存在很大的不同,这些语言都是运行在基于C ...

  2. PHP base_convert() 函数

    16进制转8进制 <?php $hex = "E196"; echo base_convert($hex,,); ?> 8进制数转换为10进制数 <?php $o ...

  3. mysql 转大写

    当前表: mysql> select * from table1; +----------+------------+-----+ | name_new | transactor | pid | ...

  4. 使用docker 基于centos7制作mysql镜像

    说明:由于业务需要使用centos7.6+mysql5.7+jdk8以及其他的java程序,本想在网上找一个现成的,发现镜像都不适合我. 一.yum方式安装mysql 1.编写dockerfile文件 ...

  5. Linux crontab命令:循环执行定时任务(详解版)

    前面学习了 at 命令,此命令在指定的时间仅能执行一次任务,但在实际工作中,系统的定时任务一般是需要重复执行的.而 at 命令显然无法满足需求,这是就需要使用 crontab 命令来执行循环定时任务. ...

  6. LOL佐伊官方手办

      花199元在某宝上买的官方正版佐伊手办终于到了,话不多说直接上图!   虽然脸有点不切实际的大,但还是很可爱~

  7. Oracle系列六 分组函数

    分组函数作用于一组数据,并对一组数据返回一个值. 组函数类型 AVG COUNT MAX MIN STDDEV SUM 组函数语法 SELECT [column,] group_function(co ...

  8. Python3基础 yield 在无返回值的函数中的简单示例

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  9. Python分词工具——jieba

    jieba简介 python在数据挖掘领域的使用越来越广泛.想要使用python做文本分析,分词是必不可少的一个环节在python的第三方包里,jieba应该算得上是分词领域的佼佼者. GitHub地 ...

  10. LODOP中无规律无法还原偶尔出现问题排查

    一些问题无法还原且偶尔出现,没法通过做例子来展示问题,为了找到问题在哪里,就需要排查定位问题 .由于这些问题偶尔出现,且无规律,出现频率低,所以只能不断通过各种对比测试,定位排查到问题和什么有关.如果 ...