Java使用Tess4J 进行图片文字识别
来源:互联网 发布:淘宝平台技术费 编辑:程序博客网 时间:2024/06/05 11:34
http://blog.csdn.net/top_code/article/details/39667299
最近突然对手机上的OCR功能比较感兴趣,于是乎研究了一下Java OCR技术,在Google上找到了tesseract-ocr,最后找到了其对应的Java API版本 Tess4J,中间调试过程异常曲折,最后花了半天时间终于把它给调试成功了,跟大家分享一下!
一 下载相关的jar包
1.下载Tess4J jar,网址:http://sourceforge.net/projects/tess4j/
2.如果你使用的JVM 64位的,还需要下载 liblept168.dll、libtesseract302.dll的64位文件,下载地址:https://github.com/charlesw/tesseract/tree/master/src/lib/TesseractOcr/x64
二 项目整合
先看看最后整合成功的目录结构,开发环境:Win8.1 64位 + Eclipse 4.2 + JDK 7 64位,工程目录结构如下:
src目录下是 Tess4J的源码目录,test目录 是Tess4J官方提供的demo目录,并将 liblept168.dll、libtesseract302.dll,gsdll64.dll(pdf转换需要用到此文件) 三个文件拷贝到 src根目录下。
三 测试代码
Demo下载地址:http://download.csdn.net/detail/fx_sky/7988469
---------------------------------------------------------------------------
http://blog.csdn.net/qq_31863683/article/details/51864739
Java使用Tess4J 进行图片文字识别 笔记
- 博客分类:
- J2SE
- File imageFile = new File("eurotext.tif");
- Tesseract instance = Tesseract.getInstance(); // JNA Interface Mapping
- String result = instance.doOCR(imageFile);
- // 这里对图片黑白处理,增强识别率.这里先通过截图,截取图片中需要识别的部分
- BufferedImage textImage = ImageHelper.convertImageToGrayscale(ImageHelper.getSubImage(panel.image, startX, startY, endX, endY));
- // 图片锐化,自己使用中影响识别率的主要因素是针式打印机字迹不连贯,所以锐化反而降低识别率
- // textImage = ImageHelper.convertImageToBinary(textImage);
- // 图片放大5倍,增强识别率(很多图片本身无法识别,放大5倍时就可以轻易识,但是考滤到客户电脑配置低,针式打印机打印不连贯的问题,这里就放大5倍)
- textImage = ImageHelper.getScaledInstance(textImage, endX * 5, endY * 5);
- private static void loadDLL(String libFullName) {
- try {
- String nativeTempDir = System.getProperty("java.io.tmpdir");
- InputStream in = null;
- FileOutputStream writer = null;
- BufferedInputStream reader = null;
- File extractedLibFile = new File(nativeTempDir + File.separator + libFullName);
- if (!extractedLibFile.exists()) {
- try {
- in = Tesseract.class.getResourceAsStream("/" + libFullName);
- Tesseract.class.getResource(libFullName);
- reader = new BufferedInputStream(in);
- writer = new FileOutputStream(extractedLibFile);
- byte[] buffer = new byte[1024];
- while (reader.read(buffer) > 0) {
- writer.write(buffer);
- buffer = new byte[1024];
- }
- in.close();
- writer.close();
- System.load(extractedLibFile.toString());
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (in != null) {
- in.close();
- }
- if (writer != null) {
- writer.close();
- }
- }
- } else {
- System.load(extractedLibFile.toString());
- }
- } catch (IOException e) {
- logger.error("初始化 " + libFullName + " DLL错误", e);
- }
- }
- 错误信息:null
- 错误详细堆栈信息:java.util.NoSuchElementException: null
- at: javax.imageio.spi.FilterIterator.next(ServiceRegistry.java:808)
- // FUCK,客户端加载jar的方式很特殊,所以第三方包注册的serve 无法生效,这里就行动注册了,事儿真多
- IIORegistry registry = IIORegistry.getDefaultInstance();
- // registry.registerServiceProvider(new ImageReadWriteSpi(), OperationRegistrySpi.class);//这个,注册不了
- registry.registerServiceProvider(new ChannelImageInputStreamSpi(), ImageInputStreamSpi.class);
- registry.registerServiceProvider(new ChannelImageOutputStreamSpi(), ImageOutputStreamSpi.class);
- // ---------
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReaderSpi(), ImageReaderSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.png.CLibPNGImageReaderSpi(), ImageReaderSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageReaderSpi(), ImageReaderSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageReaderCodecLibSpi(), ImageReaderSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.wbmp.WBMPImageReaderSpi(), ImageReaderSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.bmp.BMPImageReaderSpi(), ImageReaderSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.pnm.PNMImageReaderSpi(), ImageReaderSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.raw.RawImageReaderSpi(), ImageReaderSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.tiff.TIFFImageReaderSpi(), ImageReaderSpi.class);
- //
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageWriterSpi(), ImageWriterSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageWriterSpi(), ImageWriterSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.png.CLibPNGImageWriterSpi(), ImageWriterSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageWriterSpi(), ImageWriterSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageWriterCodecLibSpi(), ImageWriterSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.wbmp.WBMPImageWriterSpi(), ImageWriterSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.bmp.BMPImageWriterSpi(), ImageWriterSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.gif.GIFImageWriterSpi(), ImageWriterSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.pnm.PNMImageWriterSpi(), ImageWriterSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.raw.RawImageWriterSpi(), ImageWriterSpi.class);
- registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriterSpi(), ImageWriterSpi.class);
- Java使用Tess4J 进行图片文字识别
- Java使用Tess4J 进行图片文字识别
- java使用Tess4j 识别图片文字
- Java中使用tess4J进行图片文字识别(支持中文)
- linux系统如何使用tess4j(java)进行ocr图片文字识别
- Tess4J图片文字识别
- tess4j识别图片中的文字
- JAVA使用Tess4j识别图片内容
- Java OCR文字识别(Tess4J)
- Java OCR tess4j 图片识别技术(三)
- Java OCR(使用Tess4J)
- Java 图片文字识别
- java图片识别文字
- Tess4j的使用(识别中文)
- java图片文字识别技术
- OCR图像识别技术的JAVA实现(二)之Tess4J的使用
- 使用DELPHI对图片中的文字进行识别的过程(最简单实现)
- 使用tesseract进行中文文字识别
- 查询某门学科的及格率
- yii2.0 使用分页封装类 分页
- 欢迎使用CSDN-markdown编辑器
- Rails Web App Learning in action (1)--the basic version of students selective courses
- 世界末日,期待春暖花开
- Java使用Tess4J 进行图片文字识别
- QQ音乐/酷狗音乐锁屏控制实现原理
- 输出0-n中对应二进制数中1的个数
- UML建模工具ArgoUML概述
- tc 网络流量控制
- UVa227
- Object c的NSString的使用,创建,拼接和分隔,子string,substring
- Unable to set localhost. This prevents creation of a GUID. Cause was: cloud: cloud java.net.UnknownH
- 进程与线程的关系和区别 CPU调度简介