想学习下识别图片中的文字,找到了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识别图片文字相关推荐

  1. java tess4j mave_java初探Tess4j识别图片文字

    想学习下识别图片中的文字,找到了Tess4j图文识别的方式,于是就初步探究下,玩下识别验证码. 第一步,下载 1.以3.4.2版本为例,下载Tess4j-3.4.2-src.zip. 2.下载中文字库 ...

  2. java 爬中 验证码识别_JAVA爬虫---验证码识别技术(一)

    Python中有专门的图像处理技术比如说PIL,可以对验证码一类的图片进行二值化处理,然后对图片进行分割,进行像素点比较得到图片中的数字.这种方案对验证码的处理相对较少,运用相对普遍,很多验证码图片可 ...

  3. java base64转图片并保存_java将base64解析图片保存到本地。

    将base64解析图片保存到本地的两个方法 /** * base64转图片 * @param base64str base64码 * @param savePath 图片路径 * @return */ ...

  4. java ocr数字识别_Java OCR tesseract 图像智能文字字符识别技术实例代码

    接着上一篇OCR所说的,上一篇给大家介绍了tesseract 在命令行的简单用法,当然了要继承到我们的程序中,还是需要代码实现的,下面给大家分享下Java实现的例子. 拿代码扫描上面的图片,然后输出结 ...

  5. java soap协议头_java – 服务器无法识别HTTP标头“SOAPAction”的值

    当我向服务器发送SOAP请求时,它返回以下错误,尽管我使用SoapUI发送类似请求并且可以正常工作.我似乎需要将我的SOAP请求更改为我使用SoapUI发送的请求. WSDL是here. [ trun ...

  6. java udp 工具类_java基于UDP实现图片群发功能

    UDP协议(用户数据报协议)是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但是这两个Socket之间并没有虚拟链路,这两个Socket只是发送,接收数据报的对象. UDP的优缺点: ...

  7. java url类下载_Java根据url下载图片或文件的工具类-Fun言

    package cn.funyan.utils; import java.io.FileOutputStream; import java.io.IOException; import java.io ...

  8. java读取bmp图像_JAVA实现对BMP图片的读取

    BMP图片格式,是windows自带的一个图片格式,(*bmp),在windows的系统下都支持这种格式,bmp格式与设备无关的位图(DIB)格式,BMP简称位图,BMP的原始数据是没有经过压缩处理的 ...

  9. java上传网络图片_java网络编程之图片上传

    输入输出流核心代码 所有的文件传输都是靠流,其中文件复制最具代表性.输入流和输出流,从输入流中读取数据写入到输出流中. InputStream in =输入源; OutputStream os=输出目 ...

  10. JAVA软件图片浏览下载_java模拟浏览器下载图片

    /** * 抓取网上的图片 * @param imgSrc * @param filePath */ public static void downloadImgByNet(String imgSrc ...

最新文章

  1. java学习总结:3
  2. ios: coreData的NSManagedObject setvalue为null
  3. python语言中文社区-python numpy看这一篇就够了-Go语言中文社区
  4. 动态加载javascript
  5. ROS初学笔记 - C++11与PCL库冲突问题
  6. VMware workstation 网络设置详解
  7. 【飞秋教程】文件断点续传
  8. [Ansys Workbench] 模型网格划分练习
  9. 在另一台服务器上还原被误删的 MySQL 数据
  10. 网站压力测试工具webbench使用说明
  11. 服务器响应401,如果服务器返回401响应,则重定向到登录页面(Redirect to login page if server returns 401 response)...
  12. HDU 2504 又见GCD(最大公约数与最小公倍数变形题)
  13. gis连接表格到数据库失败_ArcGIS添加Excel数据的新老问题(连接数据库失败)
  14. 遗传算法应用--基于遗传算法的神经网络结构改进
  15. ps中ppt的尺寸设置
  16. 利用微信电脑最新版 反编译微信小程序
  17. LTE学习笔记之接口协议
  18. 2.2.9 12306火车订票验证码处理
  19. 快手分享显示服务器找不到了,快手没有网络怎么回事
  20. 港股常见的宽基指数:恒生指数、H股指数和香港中小指数

热门文章

  1. 静态网站生成器(开源项目)
  2. [乐意黎原创]云南省红河州泸西县各乡镇及村委会区划代码和城乡划分代码
  3. 【C/C++】__stdcall、__cdcel和__fastcall定义与区别
  4. 褚霸:阿里云数据库要放大招!
  5. 嵌入式软件工程师工作经验分享
  6. 运行 Visual Studio 2019当前页面的脚本发生错误解决方法
  7. ⭐App爬虫系列⭐:获取王者荣耀全英雄的名称、类型、热度、胜率、登场率、Ban率
  8. 学习笔记16-HC05
  9. Android 11.0 app添加校验锁(输入密码才能进入app)
  10. 适合计算机中职生见到打拼音的软件,中职计算机基础教案设计(18页)-原创力文档...