简单使用 springboot + Tesseract 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)引入依赖


    net.sourceforge.tess4j
    tess4j
    4.0.0

        2)示例代码

package com.example.demo.controller;

import com.alibaba.fastjson.JSONObject;
import com.example.demo.service.TessdataServer;
import net.sourceforge.tess4j.TesseractException;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.io.IOException;

@RestController
@RequestMapping("/tessdata")
@CrossOrigin(value = "*",  maxAge = 3600)
public class TessdataController {

    @Resource
    private TessdataServer server;

    @RequestMapping(method = RequestMethod.POST)
    public JSONObject tessdata(@RequestBody JSONObject get) throws TesseractException, IOException {
        JSONObject output = new JSONObject();
        String fileName = get.getString("fileName");
        Boolean flag = server.dosoc(fileName);
        if (flag) {
            output.put("msg", "succeed");
        } else {
            output.put("msg", "failed");
        }
        return output;
    }

}
import org.springframework.stereotype.Service;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

@Service
public class TessdataServer {

    public boolean dosoc(String fileName) throws TesseractException, IOException {
        try {
            File file = new File(fileName);
            Tesseract tesseract = new Tesseract();
            tesseract.setDatapath("E://work//Tesseract-OCR//tessdata");
            tesseract.setLanguage("chi_sim");
            String result = tesseract.doOCR(file);
            writeObj(result);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public void writeObj(String result) throws IOException {
        String newFileName = "E:/work/test/result.txt";
        try {
            // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw
            /* 写入Txt文件 */
            File writename = new File(newFileName);// 相对路径,如果没有则要建立一个新的output。txt文件
            writename.createNewFile(); // 创建新文件
            BufferedWriter out = new BufferedWriter(new FileWriter(writename, true));
            out.write(result);

            System.out.println("写入成功!");
            out.flush(); // 把缓存区内容压入文件
            out.close(); // 最后记得关闭文件

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

        3)内容测试

简单使用 springboot + Tesseract OCR 图片文字识别_第1张图片

        使用 postman 进行测试

简单使用 springboot + Tesseract OCR 图片文字识别_第2张图片 

简单使用 springboot + Tesseract OCR 图片文字识别_第3张图片

3.问题

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

 

 

你可能感兴趣的:(spring,boot)