赞
踩
Tesseract 是一个 OCR 库, Tesseract 是目前公认最优秀、最精确的开源 OCR 系统,除了极高的精确度,Tesseract 也具有很高的灵活性。它可以通过训练识别出任何字体,也可以识别出任何 Unicode 字符。
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 文件夹中
1)引入依赖
- <dependency>
- <groupId>net.sourceforge.tess4j</groupId>
- <artifactId>tess4j</artifactId>
- <version>4.0.0</version>
- </dependency>
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)内容测试
使用 postman 进行测试
简单使用已有字库文件进行识别的话,很多情况下识别的准确率会比较低,所以我们需要训练自己的字库文件以提高识别准确率,具体方法可以参考这篇文章 使用tesseract训练自己的字库提高识别率_SeventhBlue的博客-CSDN博客_tesseract训练自己的字库
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。