当前位置:   article > 正文

简单使用 springboot + Tesseract OCR 图片文字识别_springboot ocr

springboot ocr

Tesseract 是一个 OCR 库,  Tesseract 是目前公认最优秀、最精确的开源 OCR 系统,除了极高的精确度,Tesseract 也具有很高的灵活性。它可以通过训练识别出任何字体,也可以识别出任何 Unicode 字符。

1.安装Tesseract-OCR

        1) 首先根据需求下载需要的Tesseract版本(3.0以上支持中文),本文以 tesseract-ocr-w64-setup-v4.0.0.20181030.exe 为例

        Tesseract下载: ​​​​​​Tesseract各版本下载

                a) 下载完毕后运行 .exe 文件,按提示进行安装 ;假设安装位置为: “C:\Program Files           (x86)\Tesseract-OCR”

                b) 增加系统变量 TESSDATA_PREFIX ,值为Tesseract-OCR 文件中的 tessdata 路                  径;此处为 “C:\Program Files (x86)\Tesseract-OCR\tessdata

                c) 在 cmd 中输入 tesseract -v ,能正常显示版本信息则安装成功

        2) 下载对应版本的字库

        字库地址:各版本字库

        下载简体中文字库 chi_sim.traineddata ,英文字库 eng.traineddata 

        将文件放到 tessdata 文件夹中

2.在springboot中使用

        1)引入依赖

  1. <dependency>
  2. <groupId>net.sourceforge.tess4j</groupId>
  3. <artifactId>tess4j</artifactId>
  4. <version>4.0.0</version>
  5. </dependency>

        2)示例代码

  1. package com.example.demo.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.example.demo.service.TessdataServer;
  4. import net.sourceforge.tess4j.TesseractException;
  5. import org.springframework.web.bind.annotation.*;
  6. import javax.annotation.Resource;
  7. import java.io.IOException;
  8. @RestController
  9. @RequestMapping("/tessdata")
  10. @CrossOrigin(value = "*", maxAge = 3600)
  11. public class TessdataController {
  12. @Resource
  13. private TessdataServer server;
  14. @RequestMapping(method = RequestMethod.POST)
  15. public JSONObject tessdata(@RequestBody JSONObject get) throws TesseractException, IOException {
  16. JSONObject output = new JSONObject();
  17. String fileName = get.getString("fileName");
  18. Boolean flag = server.dosoc(fileName);
  19. if (flag) {
  20. output.put("msg", "succeed");
  21. } else {
  22. output.put("msg", "failed");
  23. }
  24. return output;
  25. }
  26. }
  1. import org.springframework.stereotype.Service;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. @Service
  7. public class TessdataServer {
  8. public boolean dosoc(String fileName) throws TesseractException, IOException {
  9. try {
  10. File file = new File(fileName);
  11. Tesseract tesseract = new Tesseract();
  12. tesseract.setDatapath("E://work//Tesseract-OCR//tessdata");
  13. tesseract.setLanguage("chi_sim");
  14. String result = tesseract.doOCR(file);
  15. writeObj(result);
  16. return true;
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. return false;
  20. }
  21. }
  22. public void writeObj(String result) throws IOException {
  23. String newFileName = "E:/work/test/result.txt";
  24. try {
  25. // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw
  26. /* 写入Txt文件 */
  27. File writename = new File(newFileName);// 相对路径,如果没有则要建立一个新的output。txt文件
  28. writename.createNewFile(); // 创建新文件
  29. BufferedWriter out = new BufferedWriter(new FileWriter(writename, true));
  30. out.write(result);
  31. System.out.println("写入成功!");
  32. out.flush(); // 把缓存区内容压入文件
  33. out.close(); // 最后记得关闭文件
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. }

        3)内容测试

        使用 postman 进行测试

 

3.问题

简单使用已有字库文件进行识别的话,很多情况下识别的准确率会比较低,所以我们需要训练自己的字库文件以提高识别准确率,具体方法可以参考这篇文章 使用tesseract训练自己的字库提高识别率_SeventhBlue的博客-CSDN博客_tesseract训练自己的字库

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/619995
推荐阅读
相关标签
  

闽ICP备14008679号