前言:

首先呢,最近再公司的项目当中遇到这样的一个问题,就是需要识别图片,提取图片当中的关键语句,而且识别的语句当然是人家手写体识别,翻来覆去一想,最终还是决定使用百度的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. (二)Cisco dhcp snooping配置解释

    #配置dhcp snooping相关命令 Switch(config)#ip dhcp snooping  //打开DHCP Snooping功能Switch(config)#ip dhcp snoo ...

  2. 刷题记录:Shrine

    目录 刷题记录:Shrine 刷题记录:Shrine 题目复现链接:https://buuoj.cn/challenges 参考链接:Shrine 解此题总结一下flask的SSTI:CTF SSTI ...

  3. SSM项目实战 之 Shiro

    目录 Shiro 概述 shiro核心概念 核心类 整体类图 主要概念 Shiro架构 认证 什么是认证 关键对象 使用ini完成认证 认证流程 自定义realm 散列密码 授权 什么是授权 使用in ...

  4. python opencv PyQt5

    import cv2 import numpy as np import sys from PyQt5.QtGui import * from PyQt5.QtCore import * from P ...

  5. m4a 转MP3

    import os for filename in os.listdir(r'.'): print filename os.rename(filename,filename.replace(' ',' ...

  6. 堆排序Heapsort的Java和C代码

    Heapsort排序思路 将整个数组看作一个二叉树heap, 下标0为堆顶层, 下标1, 2为次顶层, 然后每层就是"3,4,5,6", "7, 8, 9, 10, 11 ...

  7. postgresql中pg_walfile_name()

    pg_walfile_name(lsn pg_lsn):将wal位置转换成文件名 pg_lsn数据类型可以用于存储LSN数据,LSN是指向WAL中某个位置的指针.pg_lsn用XLogRecPtr的形 ...

  8. Sword 计算机内存对齐

    内存对齐理论 a.数据的对齐(alignment) 指数据的地址和由硬件条件决定的内存块大小之间的关系.一个变量的地址是它大小的倍数的时候,这就叫做自然对齐(naturally aligned). 例 ...

  9. tomcat乱码解决

    一.修改Tomcat的conf的server.xml文件加上 URIEncoding="UTF-8" 二.在tomcat的bin 目录下的catalina.bat 配置文件中,添加 ...

  10. Base64(2)

    import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.UnsupportedEncoding ...