Springboot 结合百度IORC实现自定义模板图片识别

前言:

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

原文地址:https://www.cnblogs.com/ChromeT/p/11372874.html

时间: 2024-10-05 22:11:46

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

python-使用百度AipOcr实现表格文字图片识别

注:本博客中的代码实现来自百度问答:https://jingyan.baidu.com/article/c1a3101ef9131c9e646deb5c.html 代码运行环境:win10  python3.7 需要aip库,使用pip install baidu-aip即可 (1)目的 通过百度AipOcr库,来实现识别图片中的表格,并输出问表格文件. (2)实现 仿照百度问答:https://jingyan.baidu.com/article/c1a3101ef9131c9e646deb5c

百度地图上自定义图片覆盖物上加点击事件

在百度地图上加自定义图片覆盖物之后,在这个覆盖物上加点击手势,发现并不识别.原因不太清楚.不过可以通过别的方法来实现这个功能. 需要用到BMKMapViewDelegate中的方法: - (void)mapView:(BMKMapView *)mapView onClickedMapBlank:(CLLocationCoordinate2D)coordinate 然后判断所点击的坐标是否在指定区域内,在指定区域内之后,调用自己写的相应地方法即可. 百度地图上自定义图片覆盖物上加点击事件,布布扣,

百度分享怎么 自定义图片分享 【原创】

我们在应用百度分享插件的时候, 默认如果开启图片分享的话,连很多小图标也分享了,实在恼火! 去掉图片分享吧,分享效果又不好... 如何做到自定义图片分享呢? 就是预先定义tag标签 例如:  "tag": "sharePhoto", 然后在img标签里 加上 data-tag="sharePhoto" ======================= 完整代码送看官 html里: <img data-tag="sharePhoto&

WPF Step By Step 自定义模板

WPF Step By Step 自定义模板 回顾 上一篇,我们简单介绍了几个基本的控件,本节我们将讲解每个控件的样式的自定义和数据模板的自定义,我们会结合项目中的具体的要求和场景来分析,给出我们实现的方案和最终的运行效果. 本文大纲 1.控件模板及数据模板 2.ListBox深度定制模板. 3.TreeView高级模板使用实例. 控件模板及数据模板 控件模板 什么是控件模板,指定可以在控件的多个实例之间共享 Control 的可视结构和性能方面的方面.控件模板其实就是我们在可视方面的自定义模板

jquery-qrcode客户端二维码生成类库扩展--融入自定义Logo图片

年后换了部门,现在主要的职责就是在网上卖精油,似乎这个就是传说中的网络营销. 跟着公司的MM们也了解不了少关于网络营销的知识,间接的了解到马云和刘强东都是些怎样龌龊的人,尽管之前也这样认为. 淘宝就不多说了,全球最大的中文假货销售平台(尽管淘宝没有打出全球中文等字样,可是其必须当之无愧).百度,当当等厚颜无耻之徒的明智之举就在于此,老外做的再大也很少会有直接支持中文的,因此他们都会在其名称前增加:“全球最大的中文”等字样,为自己镶金. 之前还一直比较力挺京东的,认为其根本自营根本不会销售假货,所

SublimeText插件Emmet的自定义模板

在前端界,作为快速生成代码的Emmet插件相当给力.最近在学bootstrap,需要频繁生成html头文件,我就想着自定义模板.国内只有基础教程,只好自己读英文文档了. Emmet国内基础教程地址: http://www.w3cplus.com/tools/emmet-cheat-sheet.html http://blog.wpjam.com/m/emmet/ 读了一些发现一个解决方案,原文是自定义emmet模板. 工具栏打开Preferences -> Package Settings ->

百度分享新浪微博无法分享图片的解决方法

偶然发现,文章分享到sina weibo竟然不能将附带的图片.后来查了一下,发现,不只我遇到了这个问题. 经过查看百度分享官方的帮助文档,发现帮助文档是依照旧版的分享代码指导自定义使用的.而首页获取到的代码是最新版的分享代码, 最新版分享代码虽然支持微信.但是在分享到新浪微博的时候有个问题,就是文章内容中的图片不能随之分享到微博中.不清楚这算不算插件的bug.发现好多大网站也用了百度分享,也存在这个问题. 网上查了一下解决方法,无果,发现不只是我一个人遇到这种问题.于是自己折腾找了个折衷的解决方

WPF 自定义模板

回顾 上一篇,我们简单介绍了几个基本的控件,本节我们将讲解每个控件的样式的自定义和数据模板的自定义,我们会结合项目中的具体的要求和场景来分析,给出我们实现的方案和最终的运行效果. 本文大纲 1.控件模板及数据模板 2.ListBox深度定制模板. 3.TreeView高级模板使用实例. 控件模板及数据模板 控件模板 什么是控件模板,指定可以在控件的多个实例之间共享 Control 的可视结构和性能方面的方面.控件模板其实就是我们在可视方面的自定义模板,ControlTemplate 允许您指定控

RazorEngine在非MVC下的使用,以及使用自定义模板

---恢复内容开始--- RazorEngine模板引擎大大的帮助了我们简化字符串的拼接与方法的调用,开源之后,现在在简单的web程序,winform程序,甚至控制台程序都可以利用它来完成. 但如何在使用中调用方法和使用自定义模板呢?来看这样一个例子 1 string str="hello @Model.Name"; 2 string parse=Razor.Prase(str,new {Name="Tom"}); 3 Console.WriteLine(parse