百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

java初探Tess4j识别图片文字 java识别图像中的文字

csdh11 2024-12-26 12:26 2 浏览

想学习下识别图片中的文字,找到了Tess4j图文识别的方式,于是就初步探究下,玩下识别验证码。


第一步,下载

1、以3.4.2版本为例,下载Tess4j-3.4.2-src.zip。

2、下载中文字库,chi_sim.traineddata。


下载Tess4j参考:

http://sourceforge.net/projects/tess4j/

字库下载参考:

https://github.com/tesseract-ocr/tessdata/tree/3.04.00

api文档参考:

http://tess4j.sourceforge.net/docs/docs-3.4/


第二步,准备工作

1、解压Tess4J-3.4.2-src.zip。

2、把根目录的lib和dist相关jar拷贝到你的项目lib中。

3、再把tessdata目录拷贝到你的项目根目录中。

4、再把中文字库放入tessdata目录。

5、dll不用理,Tess4j.jar已经包含。

6、如果遇到异常,Error: Invalid memory access,Error opening data file ./tessdata/eng.traineddata说明tessdata路径不对。


压缩包目录:


如果是使用maven:

就在pom.xml加入即可。

<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>3.4.2</version>
</dependency>


我的项目test for java结构:


Tess4j依赖jar参考:

commons-beanutils-1.9.2.jar

commons-io-2.6.jar

commons-logging-1.2.jar

ghost4j-1.0.1.jar

hamcrest-core-1.3.jar

itext-2.1.7.jar

jai-imageio-core-1.3.1.jar

jboss-vfs-3.2.12.Final.jar

jcl-over-slf4j-1.7.25.jar

jna-4.1.0.jar

jul-to-slf4j-1.7.25.jar

junit-4.12.jar

lept4j-1.6.2.jar

log4j-1.2.17.jar

log4j-over-slf4j-1.7.25.jar

logback-classic-1.2.3.jar

logback-core-1.2.3.jar

slf4j-api-1.7.25.jar

xmlgraphics-commons-1.5.jar


第三步,开发测试

官方简单例子:

package net.sourceforge.tess4j.example;
 
import java.io.File;
import net.sourceforge.tess4j.*;
 
public class TesseractExample {
    public static void main(String[] args) {
        File imageFile = new File("eurotext.tif");
        ITesseract instance = new Tesseract();  // JNA Interface Mapping
        // ITesseract instance = new Tesseract1(); // JNA Direct Mapping
 
        try {
            String result = instance.doOCR(imageFile);
            System.out.println(result);
        } catch (TesseractException e) {
            System.err.println(e.getMessage());
        }
    }
}


我的初探例子:

package com.weizhixi;
 
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.util.ImageHelper;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
 
public class Test {
 
    public static void main(String[] args) throws Exception{
        testEn();
        //testZh();
    }


//使用英文字库 - 识别图片

    public static void testEn() throws Exception {
        File imageFile = new File("C:/Users/XQ/Desktop/en.png");
        BufferedImage image = ImageIO.read(imageFile);
        //对图片进行处理
        image = convertImage(image);
        ITesseract instance = new Tesseract();//JNA Interface Mapping
        String result = instance.doOCR(image); //识别
        System.out.println(result);
    }


//使用中文字库 - 识别图片

    public static void testZh() throws Exception {
        File imageFile = new File("C:/Users/XQ/Desktop/zh.png");
        BufferedImage image = ImageIO.read(imageFile);
        //对图片进行处理
        //image = convertImage(image);
        ITesseract instance = new Tesseract();//JNA Interface Mapping
        instance.setLanguage("chi_sim");//使用中文字库
        String result = instance.doOCR(image); //识别
        System.out.println(result);
    }


    //对图片进行处理 - 提高识别度
    public static BufferedImage convertImage(BufferedImage image) throws Exception {
        //按指定宽高创建一个图像副本
        //image = ImageHelper.getSubImage(image, 0, 0, image.getWidth(), image.getHeight());
        //图像转换成灰度的简单方法 - 黑白处理
        image = ImageHelper.convertImageToGrayscale(image);
        //图像缩放 - 放大n倍图像
        image = ImageHelper.getScaledInstance(image, image.getWidth() * 3, image.getHeight() * 3);
        return image;
    }
 
}


处理倾斜图片:

如果图片字体倾斜的,可以用下面代码纠正

BufferedImage bi = ImageIO.read(imageFile);
ImageDeskew id = new ImageDeskew(bi);
double imageSkewAngle = id.getSkewAngle(); //获取倾斜角度
if ((imageSkewAngle > 0.05d || imageSkewAngle < -(0.05d))) {
    bi = ImageHelper.rotateImage(bi, -imageSkewAngle); //纠偏图像
}


测试1:

测试一张英文截图en.png。

未使用图像简单处理,运行读取图片文字:

发现有几次无法准确识别。

使用convertImage方法对图像简单处理,运行读取图片文字:

发现已经完全识别了。


测试2:

测试一张中文图片zh.png

用不用convertImage,测试结果都正常:


测试3:

来点复杂的图片:

来看看识别输出:

1、未使用图像处理

2、使用图像处理

发现识别度提高了很多,但部分还是未能够识别。


测试4:

识别干扰度比较低的简单验证码

识别结果:已经正确识别了。

经测试多张各种验证码,干扰度比较大的,扭曲字体的验证码不能识别。


关于训字库

训字库能提高中文字库的识别度。

需要下载中文字库:chi_sim.traindata

需要下载tesseract-ocr安装:tesseract-ocr-setup.exe

需要下载jTessBoxEditor用于修改box文件

至于怎么训字库,这里不展开说了。


初探总结

初探了一天,发现初级简单应用Tess4j:

1、只能识别几乎没有干扰,比较清晰的图片。

2、对图片灰度处理和放大处理,能提高识别度,但不是一定能起作用。

3、如果不准确的识别,可能要去训字库了,如测试识别图中的逗号,已经变成偏上的点了。

4、识别度受字体颜色、大小、清晰度、干扰度、扭曲、倾斜等度影响。

5、官方还提供了一些test例子,还有很多操作和应用。

初级应用只是简单的识别,能识别复杂度很大的图片文字,那是要很多牛B技术和逻辑的大神级操作。

如果想识别度很高很高几乎所有都能识别,又要快速集成、建议还是调用第三方识别API了,有些要收费的有些不用收费但有调用频次限制。


Demo下载

由于资源太大,我就不上传到我网站了。

请到我的网盘下载:

链接:https://pan.baidu.com/s/1dHje9pR

密码:z0bi

内含:

1、项目:基于maven_test4j例子项目.zip

2、官方Tess4j:Tess4J-3.4.2-src.zip

3、中文训字库:chi_sim.traineddata


转自:https://www.weizhixi.com/article/59.html

相关推荐

Web前端最强JavaScript Excel处理插件——exceljs

介绍exceljs是一个读取,操作和编写电子表格数据和样式到XLSX和JSON,从Excel电子表格文件逆向工程设计的项目。之所以称它最强,是因为它的功能强大,简直就是专门为Excel打造的前端处理插...

介绍一款国产开源免费的在线文件文档预览的kkFileView

无论是个人或企业,甚至是政府部门,能够在浏览器中直接打开浏览Office等格式文档,也是一个普遍的需求和应用场景。对于企业来说,在线文件文档预览在OA办公系统、在线学习系统及招聘网站等广泛的应用。对于...

如何批量提取文件名到excel表?推荐6个方法

在当今数字信息时代,文件管理面临的挑战日益凸显,尤其在面对海量文件时,高效提取并分类管理文件名称成为提升工作效率的关键环节。精准获取文件名不仅能够有效避免重复性工作,还能快速整理与分析数据,确保信息的...

Vue 前端开发——导入Excel/Csv vue导入excel到后端

项目开发中遇到导入表格常见的就是excel和csv格式,一般情况下我们会前端首先得到这个表格里面的数据,然后再把数据发送给后端,也有的是直接上传文件传给后台后台自己处理,这样就不好控制上传前预览和处...

wps宏js学习-1 wps宏教程

在JS中,万物皆对象。比如JS中的字符串、数组、函数等都是对象。这些对象都有自己的属性与方法,后面在对应的章节中都有讲解。而在WPS表格,也有很多对象,比如WPS表格程序就是最大的对象,再...

文件预览的终级解决方案-kkFileView

kkFileView是使用springboot打造文件文档在线预览项目解决方案,支持doc、docx、ppt、pptx、xls、xlsx、zip、rar、mp4、mp3以及众多类文本如txt、htm...

开源中的精品,具备丰富Excel处理能力的Javascript库——exceljs

介绍exceljs是一个读取,操作和编写电子表格数据和样式到XLSX和JSON,从Excel电子表格文件逆向工程设计的项目。之所以称它最强,是因为它的功能强大,简直就是专门为Excel打造的前端处理插...

8000字 | 详解 Tkinter 的 GUI 界面制作

...

统一操作系统UOS适配NTKO Office控件:浏览器在线编辑文档

近一段时间以来,统信软件旗下的统一操作系统UOS在软硬件适配方面不断拓展,整个生态日渐完善,可以越来越好满足日常办公需求。现在,NTKOOffice文档控件Linux版也完成了与统一操作系统UOS的...

电脑里文件突然打不开时,试试这个简单方法

有时,有的文件就是怎么都打不开,可能是没有设置文件的默认打开方式哦。右击文件,选择“属性”,点击“打开方式”旁边的“更改”,选择可以打开这个文件的程序。例如,今天我的word文件突然打不开了,电脑里...

从中招到妥协——Locky电脑勒索病毒 中毒记录

作者:jelly仔大家好,我是Jelly仔,这次我要晒的是一种电脑病毒——Locky,这应该算是#全站首晒#吧。一、背景3月1日的晚上,我实习下班回到宿舍,浏览了一会张大妈上的原创,正准备打开E...

JS宏之工作簿的新建与保存 工作表宏的使用方法

我们首先录制一个JS宏来看看工作簿新建和保存的代码是什么样子的吧functionMacro1(){Workbooks.Add(undefined);ActiveWorkbook.Custo...

不用任何 js 库,纯前端导出数据到 Excel / CSV 文件就简单几行代码

最近实现的导出数据为表格的需求,不需要工具库,也不要后端实现,mark一下。js导出excel表格...

JS宏之工作簿的打开与保存 宏的工作薄怎么打开

functiontest1(){varcurrentpath=ActiveWorkbook.Path;for(vari=1;i<=4;i++){letwb=Workb...

使用JavaScript实现前端导入和导出excel文件?(H5编辑器实战)

前言最近笔者终于把H5-Dooring...