java下OCR的实现[j4l简单使用]
程序员文章站
2022-06-05 15:07:28
...
昨天在做一些验证码识别,因为主要用的语言是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 实际使用中如果使用多线程(就算是单线程也一样) 识别的图片一多(单线程下 几百个) 虚拟机就会崩溃...不适合进行批量工作 不过这是找到最好的了...
推荐阅读
-
window下使用MyCat实现简单的读写分离
-
Java实现拖拽文件上传dropzone.js的简单使用示例代码
-
啰嗦的 java,简洁的 lombok —— lombok 的使用及简单实现单例模式注解
-
沁园下的一缕残云 留——痕 通过java反射实现简单的关于MongoDB的对象关系映射(ORM).
-
沁园下的一缕残云 留——痕 通过java反射实现简单的关于MongoDB的对象关系映射(ORM).
-
window下使用MyCat实现简单的读写分离
-
超级玛丽 Super Mario java基础小游戏:基于JAVA面向对象实现的超级马里奥(Super Mario)游戏(简单小游戏,仅仅使用Java面向对象基础实现(附上源码))
-
吐槽net下没有靠谱的FastDFS的sdk之使用thrift实现JAVA和C#互通
-
java下OCR的实现[j4l简单使用]
-
JSON学习(二)—— 简单实战篇(使用Jackson实现Java对象、数组与JSON的互相转换)