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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM