使用Test4J实现图像识别文字

开发工具

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文件,大家也可以学习一下自己训练,就是麻烦一些,后期如果我自己需要训练这些文字的话,会在写一篇训练博客,有问题可以留言哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值