最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot實(shí)現(xiàn)圖片識別文字的四種方式小結(jié)

 更新時間:2024年02月05日 10:38:14   作者:weixin_50117748  
本文主要介紹了SpringBoot實(shí)現(xiàn)圖片識別文字的四種方式,包括Tess4J,百度智能云,阿里云,騰訊云這四種,具有一定的參考價值,感興趣的可以了解一下

SpringBoot 整合 Tess4J 實(shí)現(xiàn)

Tesseract是一個開源的光學(xué)字符識別(OCR)引擎,它可以將圖像中的文字轉(zhuǎn)換為計(jì)算機(jī)可讀的文本。支持多種語言和書面語言,并且可以在命令行中執(zhí)行。它是一個流行的開源OCR工具,可以在許多不同的操作系統(tǒng)上運(yùn)行。

Tess4J是一個基于Tesseract OCR引擎的Java接口,可以用來識別圖像中的文本,說白了,就是封裝了它的API,讓Java可以直接調(diào)用。

1、引入tess4j依賴

<!-- tess4j -->
<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>4.5.4</version>
</dependency>

2、yml配置

把訓(xùn)練數(shù)據(jù)的目錄路徑配置在yml里,后續(xù)可以擴(kuò)展到配置中心。

server:
  port: 8888

# 訓(xùn)練數(shù)據(jù)文件夾的路徑
tess4j:
  datapath: E:/gitee/OCR/tess4j_data

Tesseract OCR庫通過訓(xùn)練數(shù)據(jù)來學(xué)習(xí)不同語言和字體的特征,以便更好地識別圖片中的文字。

在安裝Tesseract OCR庫時,通常會生成一個包含多個子文件夾的訓(xùn)練數(shù)據(jù)文件夾,其中每個子文件夾都包含了特定語言或字體的訓(xùn)練數(shù)據(jù)。

比如我這里是下載后放到了D盤的tessdata目錄下,如圖所示,其實(shí)就是一個.traineddata為后綴的文件,大小約2M多。

訓(xùn)練數(shù)據(jù),官方下載地址:https://digi.bib.uni-mannheim.de/tesseract/

GitHub官網(wǎng)地址:https://github.com/tesseract-o

image20231117115838967.png

3、編寫配置類

@Configuration

public class TesseractOcrConfig {

    @Value("${tess4j.dataPath}")
    private String dataPath;

    @Bean
    public Tesseract tesseract() {

        Tesseract tesseract = new Tesseract();
        // 設(shè)置訓(xùn)練數(shù)據(jù)文件夾路徑
        tesseract.setDatapath(dataPath);
        // 設(shè)置為中文簡體
        tesseract.setLanguage("chi_sim");
        return tesseract;
    }

}

4、編寫業(yè)務(wù)實(shí)現(xiàn)類

@Service
public class OcrServiceImpl implements OcrService {

    private final Tesseract tesseract;

    public OcrServiceImpl(Tesseract tesseract) {
        this.tesseract = tesseract;
    }

    /**
     *
     * @param imageFile 要識別的圖片
     * @return
     */
    @Override
    public String recognizeText(MultipartFile imageFile) throws IOException, TesseractException {
        // 轉(zhuǎn)換
        InputStream sbs = new ByteArrayInputStream(imageFile.getBytes());
        BufferedImage bufferedImage = ImageIO.read(sbs);

        // 對圖片進(jìn)行文字識別
        return tesseract.doOCR(bufferedImage);
    }
}

5、編寫測試接口

@RestController
@RequestMapping("/api")
@Slf4j
public class OcrController {
    private final OcrService ocrService;

    public OcrController(OcrService ocrService) {
        this.ocrService = ocrService;
    }

    @PostMapping(value = "/recognize", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public String recognizeImage(@RequestParam("file") MultipartFile file) throws TesseractException, IOException {

        log.info(ocrService.recognizeText(file));

        // 調(diào)用OcrService中的方法進(jìn)行文字識別
        return ocrService.recognizeText(file);
    }
}

postman配置:

image20231117120601161.png

效果:

image20231117120728923.png

此方法的識別精準(zhǔn)度差,不建議使用。

案例完整代碼:https://github.com/rookiesnewbie/OCR

整合百度智能云實(shí)現(xiàn)

官網(wǎng)文檔:https://ai.baidu.com/ai-doc/OCR/dk3iqnq51

1、根據(jù)官方文檔創(chuàng)建應(yīng)用

2、引入依賴

<!--百度ocr-->
<dependency>
    <groupId>com.baidu.aip</groupId>
    <artifactId>java-sdk</artifactId>
    <version>4.16.10</version>
</dependency>

3、編寫yml配置文件

server:
  port: 8090

baidu:
  APP_ID: #應(yīng)用的appid
  API_KEY: #你的app_key
  SECRET_KEY: #你的secret_key

4、創(chuàng)建一個配置類來初始化百度OCR的客戶端

@Setter
@Configuration
@ConfigurationProperties(prefix = "baidu")
public class baiduOcrConfig {

    private String APP_ID;
    private String API_KEY;
    private String SECRET_KEY;

    @Bean
    public AipOcr aipOcr() {
        return new AipOcr(APP_ID, API_KEY, SECRET_KEY);
    }

}

5、編寫controller

@RestController
@Slf4j
@RequestMapping("/api")
public class BaiduOcrController {


    @Autowired
    private AipOcr aipOcr;

    @PostMapping(value = "/process",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public String processImage(@RequestParam("file") MultipartFile file) {
        HashMap<String, String> options = new HashMap<String, String>();
        options.put("detect_direction", "true");
        options.put("probability", "true");
        try {
            byte[] imageBytes = file.getBytes();
            JSONObject result = aipOcr.basicGeneral(imageBytes, options);

            // 解析百度OCR的識別結(jié)果
            StringBuilder sb = new StringBuilder();
            result.getJSONArray("words_result").forEach(item -> {
                JSONObject word = (JSONObject) item;
                sb.append(word.getString("words")).append("\n");
            });

            return sb.toString();
        } catch (IOException e) {
            e.printStackTrace();
            return "Error processing image";
        }

    }

}

6、使用postm測試

image20231117173334187.png

效果:

image20231117173515001.png

精準(zhǔn)度很高,推薦使用,而且還有很多的精準(zhǔn)度選擇

常用API:

https://ai.baidu.com/ai-doc/OCR/Nkibizxlf

  • 通用文字識別

    官網(wǎng)文檔:https://ai.baidu.com/ai-doc/OCR/Nkibizxlf#%E9%80%9A%E7%94%A8%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB

    • //image為圖片的二進(jìn)制字節(jié)數(shù)組,options為傳入可選參數(shù)調(diào)用接口
      basicGeneral(byte[] image, HashMap<String, String> options) 
      
    • //image為圖片的存放路徑,options為傳入可選參數(shù)調(diào)用接口
      basicGeneral(String image, HashMap<String, String> options)
      
    • //image為圖片的存放在服務(wù)器的路徑,options為傳入可選參數(shù)調(diào)用接口
      basicGeneralUrl(String url, HashMap<String, String> options)
      
  • 通用文字識別(高精度版)

    官網(wǎng)文檔:https://ai.baidu.com/ai-doc/OCR/Nkibizxlf#%E9%80%9A%E7%94%A8%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB%EF%BC%88%E9%AB%98%E7%B2%BE%E5%BA%A6%E7%89%88%EF%BC%89

    • //image為圖片的二進(jìn)制字節(jié)數(shù)組,options為傳入可選參數(shù)調(diào)用接口
      basicAccurateGeneral(byte[] image, HashMap<String, String> options)
      
    • //image為本地圖片的存放路徑,options為傳入可選參數(shù)調(diào)用接口
      basicAccurateGeneral(String image, HashMap<String, String> options)
      
  • 通用文字識別(含位置信息版)

    官網(wǎng)文檔:https://ai.baidu.com/ai-doc/OCR/Nkibizxlf#%E9%80%9A%E7%94%A8%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB%EF%BC%88%E5%90%AB%E4%BD%8D%E7%BD%AE%E4%BF%A1%E6%81%AF%E7%89%88%EF%BC%89

    • //image為圖片的二進(jìn)制字節(jié)數(shù)組,options為傳入可選參數(shù)調(diào)用接口
      general(byte[] image, HashMap<String, String> options)
      
    • //image為圖片的存放路徑,options為傳入可選參數(shù)調(diào)用接口
      general(String image, HashMap<String, String> options)
      
    • //image為圖片的存放在服務(wù)器的路徑,options為傳入可選參數(shù)調(diào)用接口
      generalUrl(String url, HashMap<String, String> options)
      
  • 通用文字識別(含位置高精度版)

    官網(wǎng)文檔:https://ai.baidu.com/ai-doc/OCR/Nkibizxlf#%E9%80%9A%E7%94%A8%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB%EF%BC%88%E5%90%AB%E4%BD%8D%E7%BD%AE%E9%AB%98%E7%B2%BE%E5%BA%A6%E7%89%88%EF%BC%89

    • //image為圖片的二進(jìn)制字節(jié)數(shù)組,options為傳入可選參數(shù)調(diào)用接口
      accurateGeneral(byte[] image, HashMap<String, String> options)
      
    • //image為圖片的存放路徑,options為傳入可選參數(shù)調(diào)用接口
      accurateGeneral(String image, HashMap<String, String> options)
      
  • 通用文字識別(含生僻字版)

    官網(wǎng)文檔:https://ai.baidu.com/ai-doc/OCR/Nkibizxlf#%E9%80%9A%E7%94%A8%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB%EF%BC%88%E5%90%AB%E7%94%9F%E5%83%BB%E5%AD%97%E7%89%88%EF%BC%89

    • enhancedGeneral(byte[] image, HashMap<String, String> options)
      
    • enhancedGeneral(String image, HashMap<String, String> options)
      
    • enhancedGeneralUrl(String url, HashMap<String, String> options)
      

整合阿里云

官方文檔:https://next.api.aliyun.com/api-tools/sdk/ocr-api?spm=a2c4g.442247.0.0.40933e8eQ3GZIX&version=2021-07-07&language=java-tea&tab=primer-doc

https://next.api.aliyun.com/api/ocr-api/2021-07-07/RecognizeAdvanced?spm=api-workbench.SDK%20Document.0.0.2e7652e95jnhKE&tab=DOC&sdkStyle=dara&lang=JAVA

1、引入依賴

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>ocr_api20210707</artifactId>
  <version>1.2.0</version>
</dependency>

2、編寫yml配置文件

server:
  port: 8099

aliyun:
  KeyId: #你的KeyId
  KeySecret: #你的KeySecret
  endpoint: ocr-api.cn-hangzhou.aliyuncs.com

3、編寫配置類

@Setter
@Component
@ConfigurationProperties(prefix = "aliyun")
public class AliyunOcrConfig {
    private String KeyId;
    private String KeySecret;
    private String endpoint;

    @Bean
    public Client ocrClient(){
        try {

            Client client = new Client(new Config().setAccessKeyId(KeyId).setAccessKeySecret(KeySecret).setEndpoint(endpoint));
            return client;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

4、編寫測試接口

@RestController
@RequestMapping("/api")
@Slf4j
public class AliyunOcrController {

    @Resource
    private Client client;

    @PostMapping(value = "ocr",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public String OcrTest(@RequestParam("file")MultipartFile file) throws IOException {
        RecognizeGeneralRequest request = new RecognizeGeneralRequest();
        request.setBody(file.getInputStream());
        try {
            RecognizeGeneralResponse response = client.recognizeGeneral(request);
            String json = new Gson().toJson(response.getBody());
            String[] split = json.split(",");
            return split[1].split(":")[1].replace("\\","");

//            return json;
        } catch (TeaException error) {
            Common.assertAsString(error.message);
        } catch (Exception e) {
            TeaException error = new TeaException(e.getMessage(), e);
            // 如有需要,請打印 error
            Common.assertAsString(error.message);
        }
        return null;
    }

}

5、使用postman測試

image20231118172215893.png

整合騰訊云實(shí)現(xiàn)

官網(wǎng)文檔:https://cloud.tencent.com/document/product/866

官網(wǎng)API:https://cloud.tencent.com/document/api/866/33515

官網(wǎng)參數(shù)說明與在線調(diào)試:https://console.cloud.tencent.com/api/explorer?Product=ocr&Version=2018-11-19&Action=GeneralHandwritingOCR

1、獲取密鑰:

https://console.cloud.tencent.com/cam/capi

2、引入依賴

<dependency>
    <groupId>com.tencentcloudapi</groupId>
    <artifactId>tencentcloud-sdk-java</artifactId>
    <version>3.1.909</version>
</dependency>

3、編寫yml配置文件

server:
  port: 9090

tencent:
  SecretId: #你的SecretId
  SecretKey: #你的SecretKey

4、編寫配置類

@Setter
@Configuration
@ConfigurationProperties(prefix = "tencent")
public class TencentOcrConfig {

    private String SecretId;
    private String SecretKey;

    @Bean
    public Credential credential(){
        return new Credential(SecretId,SecretKey);
    }

}

5、編寫將文件轉(zhuǎn)換成Base64編碼的工具類

由于騰訊云OCR的API接收的參數(shù)如下圖,所以要編寫將文件轉(zhuǎn)碼成Base64的工具類:

image20231118140704897.png

public class ByteToBase64Converter {

    public static String encodeBytesToBase64(byte[] bytes) {
        return Base64.getEncoder().encodeToString(bytes);
    }

}

6、編寫接口測試

@RestController
@RequestMapping("/api")
@Slf4j
public class TencentOcrController {
    @Resource
    private Credential credential;


    @PostMapping(value = "/tencent",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public String TencentOCR(@RequestParam("file")MultipartFile file) throws TencentCloudSDKException, IOException {

        // 實(shí)例化一個http選項(xiàng),可選的,沒有特殊需求可以跳過
        HttpProfile httpProfile = new HttpProfile();
        httpProfile.setEndpoint("ocr.tencentcloudapi.com");

        // 實(shí)例化一個client選項(xiàng),可選的,沒有特殊需求可以跳過
        ClientProfile clientProfile = new ClientProfile();
        clientProfile.setHttpProfile(httpProfile);

        // 實(shí)例化要請求產(chǎn)品的client對象,clientProfile是可選的
        OcrClient client = new OcrClient(credential, "ap-guangzhou", clientProfile);

        //將上傳的文件轉(zhuǎn)換成base64編碼
        String encodeBytesToBase64 = ByteToBase64Converter.encodeBytesToBase64(file.getBytes());


        // 實(shí)例化一個請求對象,每個接口都會對應(yīng)一個request對象
        GeneralBasicOCRRequest req = new GeneralBasicOCRRequest();
        req.setImageBase64(encodeBytesToBase64);

       // req.setImageUrl("https://ltmyblog.oss-cn-shenzhen.aliyuncs.com/myBlog/article/image-20230924213423855.png");

        // 返回的resp是一個GeneralBasicOCRResponse的實(shí)例,與請求對象對應(yīng)
        GeneralBasicOCRResponse resp = client.GeneralBasicOCR(req);


        GeneralBasicOCRResponse.toJsonString(resp);
        // 輸出json格式的字符串回包
        System.out.println(GeneralBasicOCRResponse.toJsonString(resp));
        return GeneralBasicOCRResponse.toJsonString(resp);
    }

}

7、使用postman測試

image20231118155218507.png

本文的全部案例:https://github.com/rookiesnewbie/OCR

到此這篇關(guān)于SpringBoot實(shí)現(xiàn)圖片識別文字的四種方式小結(jié)的文章就介紹到這了,更多相關(guān)SpringBoot 圖片識別文字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot集成RocketMQ的使用示例

    SpringBoot集成RocketMQ的使用示例

    RocketMQ是阿里巴巴開源的一款消息中間件,性能優(yōu)秀,功能齊全,被廣泛應(yīng)用在各種業(yè)務(wù)場景,本文就來介紹一下SpringBoot集成RocketMQ的使用示例,感興趣的可以了解一下
    2023-11-11
  • Java中詳細(xì)解析Map接口

    Java中詳細(xì)解析Map接口

    這篇文章主要介紹了Java8 中 Map 接口的新方法,本文通過代碼實(shí)例給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Python安裝Jupyter Notebook配置使用教程詳解

    Python安裝Jupyter Notebook配置使用教程詳解

    這篇文章主要介紹了Python安裝Jupyter Notebook配置使用教程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 微服務(wù)框架FEIGN使用常見問題分析

    微服務(wù)框架FEIGN使用常見問題分析

    這篇文章主要為大家介紹了微服務(wù)框架FEIGN常見問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • java獲取redis日志信息與動態(tài)監(jiān)控信息的方法

    java獲取redis日志信息與動態(tài)監(jiān)控信息的方法

    這篇文章主要給大家介紹了關(guān)于java如何獲取redis日志信息與動態(tài)監(jiān)控信息的方法,文中介紹的非常詳細(xì),對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • java開發(fā)非公平鎖不可打斷源碼示例解析

    java開發(fā)非公平鎖不可打斷源碼示例解析

    這篇文章主要為大家介紹了java開發(fā)非公平鎖不可打斷源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java中如何避免sql注入實(shí)例詳解

    Java中如何避免sql注入實(shí)例詳解

    SQL注入是最常見的攻擊方式之一,它不是利用操作系統(tǒng)或其它系統(tǒng)的漏洞來實(shí)現(xiàn)攻擊的,而是程序員因?yàn)闆]有做好判斷,被不法用戶鉆了SQL的空子,下面這篇文章主要給大家介紹了關(guān)于Java中如何避免sql注入的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Spring Boot靜態(tài)資源路徑的配置與修改詳解

    Spring Boot靜態(tài)資源路徑的配置與修改詳解

    最近在做SpringBoot項(xiàng)目的時候遇到了“白頁”問題,通過查資料對SpringBoot訪問靜態(tài)資源做了總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • Java鎖擦除與鎖粗化概念和使用詳解

    Java鎖擦除與鎖粗化概念和使用詳解

    這篇文章主要介紹了Java鎖擦除與鎖粗化概念和使用,鎖擦除的主要判定依據(jù)來源于逃逸分析的數(shù)據(jù)支持,如果判斷在一段代碼中,堆上的所有數(shù)據(jù)都不會逃逸出去從而被其他線程訪問到,那就可以把它們當(dāng)做棧上數(shù)據(jù)對待,認(rèn)為它們是線程私有的,同步加鎖自然就無須進(jìn)行
    2023-02-02
  • SpringBoot整合RabbitMQ實(shí)現(xiàn)消息確認(rèn)機(jī)制

    SpringBoot整合RabbitMQ實(shí)現(xiàn)消息確認(rèn)機(jī)制

    這篇文章主要介紹了SpringBoot整合RabbitMQ實(shí)現(xiàn)消息確認(rèn)機(jī)制,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08

最新評論

平南县| 淮南市| 高台县| 镇赉县| 瑞金市| 商丘市| 竹山县| 四会市| 吉安市| 固镇县| 汕头市| 吴旗县| 游戏| 鄄城县| 冕宁县| 宁河县| 凤庆县| 平顺县| 永靖县| 寿宁县| 丁青县| 岳普湖县| 即墨市| 乐东| 鱼台县| 确山县| 偏关县| 青铜峡市| 遂平县| 五峰| 张家港市| 虞城县| 宜良县| 兴安盟| 汤阴县| 宾川县| 阿拉善左旗| 会理县| 枞阳县| 浦县| 五大连池市|