java图片文字识别_java初探Tess4j识别图片文字
想学习下识别图片中的文字,找到了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加入即可。
net.sourceforge.tess4j
tess4j
3.4.2
我的项目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
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
java图片文字识别_java初探Tess4j识别图片文字相关推荐
- java tess4j mave_java初探Tess4j识别图片文字
想学习下识别图片中的文字,找到了Tess4j图文识别的方式,于是就初步探究下,玩下识别验证码. 第一步,下载 1.以3.4.2版本为例,下载Tess4j-3.4.2-src.zip. 2.下载中文字库 ...
- java 爬中 验证码识别_JAVA爬虫---验证码识别技术(一)
Python中有专门的图像处理技术比如说PIL,可以对验证码一类的图片进行二值化处理,然后对图片进行分割,进行像素点比较得到图片中的数字.这种方案对验证码的处理相对较少,运用相对普遍,很多验证码图片可 ...
- java base64转图片并保存_java将base64解析图片保存到本地。
将base64解析图片保存到本地的两个方法 /** * base64转图片 * @param base64str base64码 * @param savePath 图片路径 * @return */ ...
- java ocr数字识别_Java OCR tesseract 图像智能文字字符识别技术实例代码
接着上一篇OCR所说的,上一篇给大家介绍了tesseract 在命令行的简单用法,当然了要继承到我们的程序中,还是需要代码实现的,下面给大家分享下Java实现的例子. 拿代码扫描上面的图片,然后输出结 ...
- java soap协议头_java – 服务器无法识别HTTP标头“SOAPAction”的值
当我向服务器发送SOAP请求时,它返回以下错误,尽管我使用SoapUI发送类似请求并且可以正常工作.我似乎需要将我的SOAP请求更改为我使用SoapUI发送的请求. WSDL是here. [ trun ...
- java udp 工具类_java基于UDP实现图片群发功能
UDP协议(用户数据报协议)是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但是这两个Socket之间并没有虚拟链路,这两个Socket只是发送,接收数据报的对象. UDP的优缺点: ...
- java url类下载_Java根据url下载图片或文件的工具类-Fun言
package cn.funyan.utils; import java.io.FileOutputStream; import java.io.IOException; import java.io ...
- java读取bmp图像_JAVA实现对BMP图片的读取
BMP图片格式,是windows自带的一个图片格式,(*bmp),在windows的系统下都支持这种格式,bmp格式与设备无关的位图(DIB)格式,BMP简称位图,BMP的原始数据是没有经过压缩处理的 ...
- java上传网络图片_java网络编程之图片上传
输入输出流核心代码 所有的文件传输都是靠流,其中文件复制最具代表性.输入流和输出流,从输入流中读取数据写入到输出流中. InputStream in =输入源; OutputStream os=输出目 ...
- JAVA软件图片浏览下载_java模拟浏览器下载图片
/** * 抓取网上的图片 * @param imgSrc * @param filePath */ public static void downloadImgByNet(String imgSrc ...
最新文章
- java学习总结:3
- ios: coreData的NSManagedObject setvalue为null
- python语言中文社区-python numpy看这一篇就够了-Go语言中文社区
- 动态加载javascript
- ROS初学笔记 - C++11与PCL库冲突问题
- VMware workstation 网络设置详解
- 【飞秋教程】文件断点续传
- [Ansys Workbench] 模型网格划分练习
- 在另一台服务器上还原被误删的 MySQL 数据
- 网站压力测试工具webbench使用说明
- 服务器响应401,如果服务器返回401响应,则重定向到登录页面(Redirect to login page if server returns 401 response)...
- HDU 2504 又见GCD(最大公约数与最小公倍数变形题)
- gis连接表格到数据库失败_ArcGIS添加Excel数据的新老问题(连接数据库失败)
- 遗传算法应用--基于遗传算法的神经网络结构改进
- ps中ppt的尺寸设置
- 利用微信电脑最新版 反编译微信小程序
- LTE学习笔记之接口协议
- 2.2.9 12306火车订票验证码处理
- 快手分享显示服务器找不到了,快手没有网络怎么回事
- 港股常见的宽基指数:恒生指数、H股指数和香港中小指数
热门文章
- 静态网站生成器(开源项目)
- [乐意黎原创]云南省红河州泸西县各乡镇及村委会区划代码和城乡划分代码
- 【C/C++】__stdcall、__cdcel和__fastcall定义与区别
- 褚霸:阿里云数据库要放大招!
- 嵌入式软件工程师工作经验分享
- 运行 Visual Studio 2019当前页面的脚本发生错误解决方法
- ⭐App爬虫系列⭐:获取王者荣耀全英雄的名称、类型、热度、胜率、登场率、Ban率
- 学习笔记16-HC05
- Android 11.0 app添加校验锁(输入密码才能进入app)
- 适合计算机中职生见到打拼音的软件,中职计算机基础教案设计(18页)-原创力文档...