- 浏览: 167939 次
- 来自: ...
文章分类
最新评论
-
hellostory:
不知所云………………
如何使用反射访问类的private域和方法 -
xusong_zidingyi:
如果在linux下面的话就没有办法运行了,因为linux没有办 ...
使用tesseract破解checkCode -
javajava22:
Errors accessing files. There m ...
使用tesseract破解checkCode -
suncathay:
<div class="quote_title ...
使用tesseract破解checkCode -
zuoxu128:
TIFFImageWriteParam ,这个类是哪个包的啊
使用tesseract破解checkCode
tesseract是一个非常强大的图片识别工具,有较大的几率将图片中的字符抓取出来,在对付验证码上,有较好的效果。使用批处理命令结合这个工具,我们就可以再程序中破解得到我们想要的图片了。
import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Locale; import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; import javax.imageio.metadata.IIOMetadata; import javax.imageio.stream.ImageInputStream; import javax.imageio.stream.ImageOutputStream; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.sun.media.imageio.plugins.tiff.TIFFImageWriteParam; public class OCRUtil { private static final Log logger = LogFactory.getLog(OCRUtil.class); private static final String LANG_OPTION = "-l"; private static final String EOL = File.separator; private static final String IMAGE_FORMAT = "jpg"; public static String recognizeValidation(InputStream in) throws Exception { File tmpFile = File.createTempFile("img", "." + IMAGE_FORMAT); OutputStream out = new FileOutputStream(tmpFile); IOUtils.copy(in, out); IOUtils.closeQuietly(out); return format(recognizeText(tmpFile, IMAGE_FORMAT)); } private static String format(String str) { if (StringUtils.isBlank(str)) { return null; } StringBuffer sb = new StringBuffer(str.length()); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (Character.isDigit(c) || Character.isLetter(c)) { sb.append(c); } } return sb.toString(); } public static String recognizeText(File imageFile, String imageFormat) throws Exception { File tempImage = createImage(imageFile, imageFormat); File outputFile = new File(imageFile.getParentFile(), "output"); StringBuffer strB = new StringBuffer(); List<String> cmd = new ArrayList<String>(); cmd.add(SystemUtil.getUserDir() + "tesseract/tesseract.exe"); cmd.add(""); cmd.add(outputFile.getName()); cmd.add(LANG_OPTION); cmd.add("eng"); ProcessBuilder pb = new ProcessBuilder(); pb.directory(imageFile.getParentFile()); cmd.set(1, tempImage.getName()); pb.command(cmd); pb.redirectErrorStream(true); Process process = pb.start(); int w = process.waitFor(); // delete temp working files tempImage.delete(); if (w == 0) { BufferedReader in = new BufferedReader(new InputStreamReader( new FileInputStream(outputFile.getAbsolutePath() + ".txt"), "UTF-8")); String str; while ((str = in.readLine()) != null) { strB.append(str).append(EOL); } in.close(); } else { String msg; switch (w) { case 1: msg = "Errors accessing files. There may be spaces in your image's filename."; break; case 29: msg = "Cannot recognize the image or its selected region."; break; case 31: msg = "Unsupported image format."; break; default: msg = "Errors occurred."; } tempImage.delete(); throw new RuntimeException(msg); } new File(outputFile.getAbsolutePath() + ".txt").delete(); // logger.info("图像识别结果:" + strB); return strB.toString(); } public static File createImage(File imageFile, String imageFormat) { File tempFile = null; try { Iterator<ImageReader> readers = ImageIO .getImageReadersByFormatName(imageFormat); ImageReader reader = readers.next(); ImageInputStream iis = ImageIO.createImageInputStream(imageFile); reader.setInput(iis); // Read the stream metadata IIOMetadata streamMetadata = reader.getStreamMetadata(); // Set up the writeParam TIFFImageWriteParam tiffWriteParam = new TIFFImageWriteParam( Locale.US); tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED); // Get tif writer and set output to file Iterator<ImageWriter> writers = ImageIO .getImageWritersByFormatName("tiff"); ImageWriter writer = writers.next(); BufferedImage bi = reader.read(0); // bi = new ImageFilter(bi).changeGrey(); IIOImage image = new IIOImage(bi, null, reader.getImageMetadata(0)); tempFile = tempImageFile(imageFile); ImageOutputStream ios = ImageIO.createImageOutputStream(tempFile); writer.setOutput(ios); writer.write(streamMetadata, image, tiffWriteParam); ios.close(); writer.dispose(); reader.dispose(); } catch (Exception exc) { logger.error("异常:", exc); } return tempFile; } private static File tempImageFile(File imageFile) { String path = imageFile.getPath(); StringBuffer strB = new StringBuffer(path); strB.insert(path.lastIndexOf('.'), 0); return new File(strB.toString().replaceFirst("(?<=\\.)(\\w+)$", "tif")); } public static void main(String[] args) throws Exception { String maybe = recognizeValidation(new URL("http://passport.360buy.com/ImageVerifier.axd?uid=c360a45f-02b2-4255-8f2e-61191bfc3866").openStream()); String maybe2 = new OCRUtil().recognizeText(new File("c:/1.jpg"), "jpg"); System.out.println(maybe2); } }
工具见附件。
- tesseract.rar (1.3 MB)
- 下载次数: 842
评论
9 楼
xusong_zidingyi
2012-08-21
如果在linux下面的话就没有办法运行了,因为linux没有办法运行.exe文件
8 楼
javajava22
2011-09-10
Errors accessing files. There may be spaces in your image's filename
老是抛这个错误
老是抛这个错误
7 楼
suncathay
2011-06-23
qljobs 写道
cmd.add("E:/Workspaces/MyEclipse/web_ocr/tesseract/tesseract.exe");我直接 写的绝对路径,咋个都还报错呢,谢谢!java.lang.RuntimeException: Errors accessing files. There may be spaces in your image's filename.
我也报这个错误
6 楼
zuoxu128
2011-03-02
TIFFImageWriteParam ,这个类是哪个包的啊
5 楼
qljobs
2010-12-02
cmd.add("E:/Workspaces/MyEclipse/web_ocr/tesseract/tesseract.exe");我直接 写的绝对路径,咋个都还报错呢,谢谢!java.lang.RuntimeException: Errors accessing files. There may be spaces in your image's filename.
4 楼
herryhaixiao
2010-06-17
com.sun.media.imageio.plugins.tiff.TIFFImageWriteParam
这个包能提供下么?
这个包能提供下么?
3 楼
dengminhui
2010-01-28
你好,这段代码本身依赖到另外一个类SystemUtil,是我的疏忽
cmd.add(SystemUtil.getUserDir() + "tesseract/tesseract.exe");
这句代码只是要找到这个exe执行文件的位置,其中SystemUtil.getUserDir()就是返回的目录,很容易的,如果我把SystemUtil贴出来就又要依赖别的类了,同学你试的时候按照本地的目录写死即可
cmd.add(SystemUtil.getUserDir() + "tesseract/tesseract.exe");
这句代码只是要找到这个exe执行文件的位置,其中SystemUtil.getUserDir()就是返回的目录,很容易的,如果我把SystemUtil贴出来就又要依赖别的类了,同学你试的时候按照本地的目录写死即可
2 楼
362217990
2010-01-27
SystemUtil.getUserDir() 这个方法不存在
1 楼
362217990
2010-01-27
严重: 异常:
java.lang.NullPointerException
at com.sun.imageio.plugins.jpeg.JPEGImageReader.checkTablesOnly(JPEGImageReader.java:309)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.getStreamMetadata(JPEGImageReader.java:886)
at OCRUtil.createImage(OCRUtil.java:133)
at OCRUtil.recognizeText(OCRUtil.java:62)
at OCRUtil.main(OCRUtil.java:172)
java.lang.NullPointerException
at OCRUtil.recognizeText(OCRUtil.java:78)
at OCRUtil.main(OCRUtil.java:172)
怎么回事
java.lang.NullPointerException
at com.sun.imageio.plugins.jpeg.JPEGImageReader.checkTablesOnly(JPEGImageReader.java:309)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.getStreamMetadata(JPEGImageReader.java:886)
at OCRUtil.createImage(OCRUtil.java:133)
at OCRUtil.recognizeText(OCRUtil.java:62)
at OCRUtil.main(OCRUtil.java:172)
java.lang.NullPointerException
at OCRUtil.recognizeText(OCRUtil.java:78)
at OCRUtil.main(OCRUtil.java:172)
怎么回事
发表评论
-
一些随想
2012-06-01 22:05 0需求 idea 方案 执 ... -
Redis的安装与使用
2011-10-24 20:04 1292今天看了下redis相关的东东,做个备忘。 Re ... -
Redis的安装与使用
2011-10-24 20:00 0Redis 服务端: http://cocos.iteye. ... -
GenericDAO
2011-07-31 14:49 0GenericDAO -
loadfromproperties
2011-07-31 14:48 0loadfromproperties -
resultcode
2011-07-31 14:47 0resultcode -
berkeleydb的使用
2011-10-24 20:05 1883在napoli的代码中发现这个berkeleydb,版本为3. ... -
几种简单的Load Balance方法
2011-07-31 13:44 0以下代码出自napoli (1)定义Selec ... -
参数断言工具
2011-07-31 12:58 952见代码: public final class Argume ... -
如何检测线上代码的运行情况---BTrace使用分享
2011-04-10 17:36 2087(1)你是否有时发现线上的代码运行效率不高,但却无法定位到底具 ... -
napoli和JMS,mq的一些知识
2010-11-26 21:01 01 jms和mq (1)jms activeMQ 应用 h ... -
Taglib基础知识
2010-11-26 12:41 0浅论taglib设计 : http://wenku.bai ... -
java编码问题的一些文章
2010-11-11 17:30 0http://www.iteye.com/topic/8047 ... -
URL在转码的过程中数据丢失
2010-10-25 14:52 0示例代码 import java.io.Unsuppo ... -
遍历大容量map的正确方法
2010-10-08 13:20 11192首先,遍历map有以下方法: import java.uti ... -
B2B-Code Review规范
2010-08-31 10:15 01.目标 凡事知其然还要知其所以然,我们首先需要知道什么 ... -
多线程书写及code review规范
2010-08-31 10:09 14501. 不允许将Calendar用于类的静态成员 ... -
域名白名单检查
2010-08-24 21:05 0首先准备一份白名单名为safe-domain.xml ,如下: ... -
如何使用反射访问类的private域和方法
2010-08-17 21:44 5132如何使用反射访问类的private域和方法?非常简单,由 ... -
FindBugs插件的安装与使用
2010-04-21 10:54 19141 什么是FindBugs FindBugs 是一个静态分析 ...
相关推荐
在VC++2010环境下使用Tesseract OCR(光学字符识别)引擎时,开发者需要确保正确地集成和配置了相关的动态链接库(DLL)。Tesseract是一个开源的OCR引擎,最初由HP开发,后来由Google维护,它能识别图像中的文本并将...
下面将详细介绍如何使用 OpenCV、Tesseract 和 Qt 实践篇实现文本识别。 一、配置环境 在开始之前,需要配置好环境。环境配置包括安装 OpenCV、Tesseract 和 Qt。安装完成后,需要将环境变量添加到系统中。 二、...
java文件使用:使用Tesseract方法可通过pom方式和jar包方式; 注意:使用前先查看“训练步骤”的那个文档,里面有详细说明,一定要查看;重要!!! 注意:使用前先查看“训练步骤”的那个文档,里面有详细说明,...
使用tesseract-ocr破解验证码详解.rar
在这个实例中,你将学习如何在C#环境中集成和使用Tesseract进行文字识别。 验证码识别是网络安全中的一个重要环节,用于防止自动化的机器人程序。Tesseract虽然主要设计为识别印刷文本,但也可以用于验证码识别,...
在本教程中,我们将详细介绍如何在Windows环境下安装和使用Tesseract OCR来破解验证码。 首先,我们需要下载并安装Tesseract OCR。你可以访问官方网站或者通过第三方资源获取安装包。这里我们以`tesseract-ocr-...
首先,要使用Tesseract OCR,你需要在你的项目中引入Tesseract库。在.NET环境中,这通常通过NuGet包管理器完成,安装“Tesseract OCR”或者“Tesseract”包。确保你的项目支持.NET Framework 4.5或更高版本,因为这...
训练数据的使用方法通常是将这些数据文件放置在Tesseract OCR的data目录下,或者通过环境变量指定路径。当Tesseract运行时,它会自动加载对应的语言数据进行识别。用户可以通过设置`--tessdata-dir`参数来指定训练...
**C#组件图像识别Tesseract组件源码及使用教程** Tesseract是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,最初由HP开发,后来由Google维护并持续升级。在C#环境中,我们可以利用Tesseract...
4. **命令行使用**:在命令行界面,可以使用`tesseract`命令配合`-l`选项指定语言来识别中文文本。例如,如果要识别一个名为"image.jpg"的图像中的中文,命令将是`tesseract image.jpg output -l chi_sim`,这会将...
本教程将详细讲解如何使用C#语言结合Tesseract OCR库来实现这一功能,特别是在二值化图片处理方面,以提高识别效果。 Tesseract OCR是一个开源的OCR引擎,最初由HP开发,后来被Google维护。它具有强大的文字识别...
5. **执行识别**:使用Tesseract的API来识别图像中的文本,如`tesseract.Process(image)`,然后获取识别结果。 6. **处理结果**:识别后的文本通常会包含一些噪声,如额外的空格、错误的字符等,你可能需要进行后...
首先,我们需要引入Tesseract OCR的C#接口,通常我们会使用一个名为`Tesseract`的NuGet包,它是Tesseract OCR的.NET包装器。安装这个包后,我们可以在项目中导入`Tesseract`命名空间。 在`Program.cs`或`OCRTest01....
2. **命令行使用**:在命令行中,你可以使用`tesseract`命令配合参数进行识别,例如`tesseract image.png output.txt`将图片`image.png`的文字识别到`output.txt`中。 3. **图形界面工具**:对于不熟悉命令行的用户...
“chi_sim”代表“Chinese Simplified”,即简体中文,而“.traineddata”是Tesseract使用的特定格式的数据文件,它包含了字符的形状、结构和上下文信息,这些信息是通过机器学习算法训练得到的,用于提高识别准确率...
在本文中,我们将深入探讨如何在Windows 10操作系统中,使用Visual Studio 2015(VS2015)编译Tesseract 4.0 OCR引擎的Debug和Release版本。Tesseract是一个开源的OCR(光学字符识别)工具,能够识别图像中的文本并...
**Tesseract图片识别工具及其使用说明** Tesseract是一款开源的OCR(Optical Character Recognition,光学字符识别)引擎,由HP公司开发,后被Google维护。它能够从图像中识别出文本,广泛应用于文档扫描、自动数据...
在本包中,包含了中英文的训练数据,这意味着用户可以直接使用Tesseract来识别这两种语言的文本。训练数据文件通常以`.traineddata`为扩展名,每个文件对应一种语言或特定的字符集。例如,中文可能有`chi_sim....
4. **自定义训练**:如果需要识别特殊字体或提高特定领域的识别效果,可以使用Tesseract的训练工具创建自己的数据集和语言模型。 **与其他版本的区别** Tesseract 3.04.00相较于更早的版本,主要改进了识别性能,...