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;
}
这是我第一篇博客,哪里写的有问题请各位大神多多谅解!
JAVA使用Tess4j识别图片内容
最新推荐文章于 2024-08-08 08:31:13 发布