JAVA使用Tess4j识别图片内容

2017年5月29日 使用Tess4j识别图片内容
最近由于需要简单的识别图片的数字和字母内容,在网上找了不少最终决定使用tess4j,理由是写法很简单你仅需要几行代码就能实现。
首先你需要去下载Tess4j,下载地址为https://sourceforge.net/projects/tess4j/
下载解压完之后根目录有以下文件或文件夹
目录
其中lib存放的是jar文件,lib里面的jar包根据各自的项目酌情添加,就行了;src里面存放的是Tess4j的源码,目前Tess4j下载下来的就是源码并没有提供jar包,因而可考虑是否打成jar包或者直接把src的内容直接拷贝到项目中,tessdata也需要放在项目的src中,我是放在src的一级子目录,还有就是lib里面有提供2个文件夹分别是win32-x86这个是win32位系统使用的dll,win32-x86-64这是win64位系统使用的dll,至于linux使用的so文件,官网并没有给出,我是在下载模块那边找到的,附上资源链接:http://download.csdn.net/detail/ljhleering/9740687
在win环境上win32-x86或者win32-x86-64文件夹是需要放在项目中的,tess4j会从项目中自动检索,而linux环境上需要将下载的so资源内的liblept.so.5文件和libtesseract.so放在java的java.library.path目录中才能使用,在linux使用过程中,可能会提醒加载不了Libjpeg.so.62文件或者libpng.so.12.0文件,一下是处理方式:
若提醒的是libjpeg.so.62文件无法加载:方法一,去该链接下载 https://pkgs.org/download/libjpeg.so.62;方法二,直接使用yum安装,安装命令为:yum -y install libjpeg-turbo
若提醒的是libpng.so.12文件无法加载,可去https://pkgs.org/download/libpng12.so.0 根据自己的linux版本下载或者使用yum安装,安装命令:yum -y install libpng12
做完这些我们就可以直接使用Tess4j进行图片识别了,目前我只试过字母和数字的,中文的会有乱码暂时没处理,以下是我写的一个例子,有点渣,请诸位大神不要吐槽,是直接传入图片url地址解析的:
public static String imageToTel(String imgUrl) {
ITesseract instance = new Tesseract();
try {
URL url = new URL(imgUrl);
BufferedInputStream bis = new BufferedInputStream(url.openStream());
String realpath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
if(System.getProperty("os.name").toLowerCase().startsWith("win")) {
realpath = realpath.substring(1);
}
instance.setDatapath(realpath + "tessdata");
String result = instance.doOCR(ImageIO.read(bis));
if(StringUtils.isNotBlank(result))
return result.replaceAll("[ \n]", "");
} catch (Exception e) {
System.err.println("图片识别失败");
}
return null;
}

这是我第一篇博客,哪里写的有问题请各位大神多多谅解!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Tess4J 是一个基于 Tesseract OCR 引擎的 Java 包装器,用于识别文本。在使用 Tess4J 时,可能会遇到以下问题: 1. 找不到 JNI 库 如果在使用 Tess4J 时出现 "java.lang.UnsatisfiedLinkError" 异常,这可能是因为 JVM 找不到 JNI 库的原因。解决方法是将 Tesseract 的 JNI 库添加到 Java 库路径中。可以在代码中使用以下语句添加: ```java System.setProperty("jna.library.path", "path/to/tesseract/lib"); ``` 其中 "path/to/tesseract/lib" 是 JNI 库所在的路径。 2. Tessdata 目录设置错误 Tess4J 需要 Tesseract 引擎的训练数据(tessdata)目录来进行 OCR。如果没有正确设置该目录,可能会出现 "java.lang.IllegalArgumentException: Invalid memory access" 异常。解决方法是在代码中使用以下语句设置该目录: ```java File tessDataFolder = LoadLibs.extractTessResources("tessdata"); ``` 其中 "tessdata" 是训练数据目录的名称,可以根据实际情况修改。 3. 字符集不匹配 如果 OCR 结果包含了乱码或者无法识别的字符,可能是因为字符集不匹配的原因。可以在代码中使用以下语句设置字符集: ```java tesseract.setTessVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); ``` 其中 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 是要识别的字符集,可以根据实际需求修改。 4. Tesseract 引擎版本不匹配 如果在使用 Tess4J 时出现 "java.lang.UnsatisfiedLinkError" 或者其他异常,可能是因为 Tesseract 引擎的版本不匹配。建议使用Tess4J 版本匹配的 Tesseract 引擎版本。 以上是一些常见的 Tess4J 使用问题及其解决方法,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值