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打造的前端处理插...
- 统一操作系统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...
- 一周热门
-
-
IDC机房服务器托管可提供的服务
-
新版腾讯QQ更新Windows 9.9.7、Mac 6.9.25、Linux 3.2.5版本
-
一文看懂mysql时间函数now()、current_timestamp() 和sysdate()
-
详解PostgreSQL 如何获取当前日期时间
-
一款全能的看图软件,速度快、功能强、免费用
-
PhotoShop通道
-
Boston Dynamics Founder to Attend the 2024 T-EDGE Conference
-
一文读懂关于MySQL Datetime字段允许插入0000-00-00无效日期
-
Serv-u 提权
-
流星蝴蝶剑:76邵氏精华版,强化了流星,消失了蝴蝶
-
- 最近发表
- 标签列表
-
- huaweiupdateextractor (27)
- thinkphp6下载 (25)
- mysql 时间索引 (31)
- mydisktest_v298 (34)
- sql 日期比较 (26)
- document.appendchild (35)
- 头像打包下载 (61)
- oppoa5专用解锁工具包 (23)
- acmecadconverter_8.52绿色版 (39)
- oracle timestamp比较大小 (28)
- f12019破解 (20)
- unity shader入门精要pdf (22)
- word文档批量处理大师破解版 (36)
- pk10牛牛 (22)
- server2016安装密钥 (33)
- mysql 昨天的日期 (37)
- 加密与解密第四版pdf (30)
- pcm文件下载 (23)
- jemeter官网 (31)
- parsevideo (33)
- 个人网站源码 (37)
- ckeditor4中文文档 (27)
- exe4j_java_home (30)
- centos7.4下载 (33)
- xlsx.full.min.js下载 (32)