`

java下OCR的实现[j4l简单使用]

阅读更多

昨天在做一些验证码识别,因为主要用的语言是java,所以也是用java来做了。

 

刚开始自然是思路全无,后来在网上找到了J4L 这个工具jar

 

网站:http://www.java4less.com/ocrtools/ocrtools.php?info=guide

 

使用起来也是很简单:

这边先下载他的jar包:

http://www.java4less.com/ocrtools/ocrtools.php?info=download

 

下载后解压 得到一堆文件:



 运行一下那三个bat文件就可以看到效果:



 

如果你是64位的机器 请把bits64里的dll复制到这个目录并且覆盖掉 不然会有平台不支持的错误

 

在代码里使用也很简单 把lib下的jar包导入到build path

并且把tess3WrapperDLL.dll  leptonlibd.dll  放到path下(%java_home%/bin啊之类的 就是环境变量里设置的path)

 

接下去就可以简单使用了:

我这边的代码为了处理一下验证码 直接拿来用基本上用不了 所以用了http://ykf.iteye.com/blog/212431 里面图像的处理类

代码很简单 如下:

	public static String getVerifyText(InputStream ins) throws MalformedURLException,
			IOException {
		OCRFacade facade = new OCRFacade();

		BufferedImage bi = ImageIO.read(ins);

		ImageFilter ifter = new ImageFilter(bi); 

		bi = ifter.changeGrey(); //这里只用了一个二值化 可以再多加几个

		ByteArrayOutputStream bao = new ByteArrayOutputStream();
		ImageIO.write(bi, "png", bao);

		String text = facade.recognizeImage(bao.toByteArray(), "png", "eng");

		System.out.println("Text in the image is: ");
		System.out.println(text);
		return text;
	}

 结果:



 

试了一下 这类简单的识别 正确率虽然不是特别高 但是差不多足够用了

 

 

不过由于用到了外部的dll 实际使用中如果使用多线程(就算是单线程也一样) 识别的图片一多(单线程下 几百个) 虚拟机就会崩溃...不适合进行批量工作  不过这是找到最好的了...

  • 大小: 68.6 KB
  • 大小: 86.9 KB
  • 大小: 10.1 KB
0
0
分享到:
评论
5 楼 Ryan1Zheng 2016-10-08  
tess3Wrapper
4 楼 fair_jm 2015-11-14  
fair_jm 写道
lishankang 写道
楼主没有遇到这个问题吗?

Exception in thread "main" java.lang.UnsatisfiedLinkError: no TessWrapperDLL in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at com.java4less.ocr.tess.Wrapper.<clinit>(Unknown Source)
at com.java4less.ocr.tess.OCRFacade.recognizeFile(Unknown Source)
at testOrc.TestORC.main(TestORC.java:18)


文章里说了 把这个bin复制到path下

把这个dll。。。说错了
你可以直接复制到java的bin下面去
3 楼 fair_jm 2015-11-14  
lishankang 写道
楼主没有遇到这个问题吗?

Exception in thread "main" java.lang.UnsatisfiedLinkError: no TessWrapperDLL in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at com.java4less.ocr.tess.Wrapper.<clinit>(Unknown Source)
at com.java4less.ocr.tess.OCRFacade.recognizeFile(Unknown Source)
at testOrc.TestORC.main(TestORC.java:18)


文章里说了 把这个bin复制到path下
2 楼 lishankang 2015-11-03  
楼主没有遇到这个问题吗?

Exception in thread "main" java.lang.UnsatisfiedLinkError: no TessWrapperDLL in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at com.java4less.ocr.tess.Wrapper.<clinit>(Unknown Source)
at com.java4less.ocr.tess.OCRFacade.recognizeFile(Unknown Source)
at testOrc.TestORC.main(TestORC.java:18)
1 楼 topcat 2013-07-28  
不错呀!留下,以后可能用的到。

相关推荐

Global site tag (gtag.js) - Google Analytics