开发工具
IDEA
开发环境
JDK1.8
MAVEN 3.6.3
引入依赖
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>3.2.1</version>
</dependency>
将testdata文件夹放在项目的根目录下
关注作者点击下方链接可免费下载tessdata
https://download.csdn.net/download/qq_43066945/15835906
准备工作做完了,可以开始了
我用的是springboot框架,所以有分层
首先创建工具类test4JUtils工具类
package com.dhcc.htp.modular.modle.utils;
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import java.io.File;
import java.io.IOException;
public class Test4JUtils {
public static void test4JPicture(String path){
//获取到我的项目的根目录,为了后面得到tessdata文件
String localPath = "D://javaWorkSpace//java-study//htp";
File file = new File(path);
ITesseract instance = new Tesseract();
File directory = new File(localPath);
String courseFile = null;
try {
courseFile = directory.getCanonicalPath();
}catch (IOException e){
e.printStackTrace();
}
instance.setDatapath(courseFile + "//tessdata");
//chi_sim是识别中文的文件,英文文件是eng,这个文件是可以自己用训练工具编译的,文件在tessdata文件夹中
instance.setLanguage("eng");
String result = null;
try {
long startTime = System.currentTimeMillis();
result = instance.doOCR(file);
long endTime = System.currentTimeMillis();
System.out.println("Time is :" + (endTime - startTime) + "毫秒");
}catch (TesseractException e){
e.printStackTrace();
}
System.out.println("result:");
System.out.println(result);
}
}
创建service层
public DataResponse pictureOCR(Map<String,Object> params){
String path = (String) params.get("path");
Test4JUtils.test4JPicture(path);
//不必拘泥于返回值类型,根据个人所好选择使用返回值类型,我这里使用DataResponse只是方便接口调试
return new DataResponse().defaultOperationResponse(BizSuccessEnum.BUSINESS_OPERATE_SUCCESS.getMessage());
}
创建controller层
@ApiOperation("图片识别")
@PostMapping("/pictureOCR")
public DataResponse pictureOCR(@RequestBody Map<String,Object> params){
DataResponse dataResponse = fileTestService.pictureOCR(params);
return dataResponse;
}
使用swagger调试接口
图片原型:
运行结果:
我们可以看到识别的功能已经实现但是识别的正确率却不尽人意,这是因为字体库的原因,也就是tessdata文件夹里那些东西,这些是可以训练或者网上找到资源好些的tessdata文件,大家也可以学习一下自己训练,就是麻烦一些,后期如果我自己需要训练这些文字的话,会在写一篇训练博客,有问题可以留言哦