今天要介绍Java的OCR(图片字符识别)包,由Asprise出品。它甚至可以读条形码。
请从下面的链接下载包含破解的zip文件。
Asprise-OCR-Java-Windows_XP_32bit-4.0.zip
这个包用起来非常简单。
解开上面的zip后,里面有demo-src.jar,把这个jar也解开,打开 com/asprise/util/ocr/demo/Demo.java 看看,就全明白了:
解压后将aspriseOCR.jar 拷贝到工程,将AspriseOCR.dll, DevIL.dll,ILU.dll 复制到jdk/bin目录下就可以使用了,当然这是个商业软件,运行的时候会提示购买,破解版见附件
-
-
-
-
-
package com.asprise.util.ocr.demo;
-
import java.awt.image.BufferedImage;
-
import java.io.File;
-
import java.io.IOException;
-
import javax.imageio.ImageIO;
-
import com.asprise.util.ocr.OCR;
-
public class Demo {
-
public static void main(String[] args) throws IOException {
-
if(("1.4").compareTo(System.getProperty("java.vm.version")) > 0) {
-
System.err.println("Warining: /n/nYou need Java version 1.4 or above for ImageIO to run this demo.");
-
System.err.println("Your current Java version is: " + System.getProperty("java.vm.version"));
-
System.err.println("/nSolutions: /n");
-
System.err.println("(1) Download JRE/JDK version 1.4 or above; OR /n");
-
System.err.println("(2) Run DemoUI, which can run on your current Java virtual machine.");
-
System.err.println(" Double click the 'runDemoUI' to invoke it./n");
-
return;
- }
-
System.out.println("Welcome to Asprise OCR v4.0 Demo!/n");
-
if(args.length < 1) {
-
System.err.println("Usage: java Demo PATH_TO_IMAGE [Description]");
-
return;
- }
-
-
if(args.length >= 2) {
-
System.out.println("-----------------------------------------------------------");
-
for(int i=1; i<args.length; i++)
- System.out.println(args[i]);
-
System.out.println("-----------------------------------------------------------/n");
- }
-
-
File file = new File(args[0]);
-
-
System.out.println("Trying to perform OCR on image: " + file.getAbsolutePath());
-
-
- BufferedImage image =
- ImageIO.read(file);
-
String s = new OCR().recognizeEverything(image);
-
System.out.println("/n---- RESULTS: ------- /n" + s);
- }
-
- }
用ImageIO的read方法从File读入BufferedImage,然后把Image传个OCR类的recognizeEverything方法,这个方法会返回分析出来的字符串(英文和数字)。
当然也可以用httpclient读取byte[] 类型网络图片,
BufferedImage image=null;
try {
image = ImageIO.read(new ByteArrayInputStream(buffer));
} catch (IOException e) {
e.printStackTrace();
}
核心的方法就是这些了,但是用它来处理大多数网站的验证码,都不太好使。
原因很简单,大多数网站的验证码都加入不同程度的噪音,以防止OCR软件的自动分析。
所谓的噪音就是,加入背景颜色,或者加入杂七杂八的点,或者加入横七竖八的线,然后就是扭曲文字等等。
那么怎么才能去掉这些噪音,从而让OCR可读呢?
这里以我以前做开心网外挂时用到的程序片段来做例子,给出点思路。
这个程序现在已经不能用了,因为开心网现在的验证码是由汉字组成的了,Asprise只能识别英文和数字。
- BufferedImage image;
-
image = ImageIO.read(new ByteArrayInputStream(buffer));
-
int width = image.getTileWidth();
-
int height = image.getTileHeight();
首先,看一下上面的代码,其中 buffer是一个 byte[],它可以是用File打开的二进制文件,用InputStream的read方法读出的byte的全部,也可以是给出的网站的图片的URL,用HttpClient或者其他方法读入的图片二进制流。用ByteArrayInputStream转换后,被ImageIO的read方法转成Image。
- Map<Integer, Integer> mapColor = new HashMap<Integer, Integer>();
-
for (int i = 0; i < width; i++)
-
for (int j = 0; j < height; j++) {
-
int color = image.getRGB(i, j);
- Integer count = mapColor.get(color);
-
if (count == null)
-
count = 0;
- count++;
- mapColor.put(color, count);
- }
上面的代码是对Image进行处理。一个二重循环,用image.getRGB方法来取得每个点的颜色,然后对颜色计数,并放到一个HashMap里去。
这是为后面的去噪音做准备。
后面的代码,针对不同的噪音,要用同的方法。这里只是给个思路。
- List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(
- mapColor.entrySet());
-
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
-
@Override
-
public int compare(Entry<Integer, Integer> o1,
- Entry<Integer, Integer> o2) {
-
return o2.getValue() - o1.getValue();
- }
- });
-
list = list.subList(0, 5);
上面是把,已经处理过的HashMap(key是颜色,value该颜色的点的个数)进行排序得到 list。
开心网的验证码是4位,然后每个的颜色不同。那么取list的前5项,必然是背景色和4位验证码的颜色。
list = list.subList(0, 5);
然后再来个二重循环,把不属于这5种颜色的点,全变成背景色,也就是去噪音了。
- int intBack = list.get(0).getKey();
-
Set<Integer> setColor = new HashSet<Integer>();
-
for (Map.Entry<Integer, Integer> entry : list) {
- setColor.add(entry.getKey());
- }
-
for (int i = 0; i < width; i++)
-
for (int j = 0; j < height; j++) {
-
int color = image.getRGB(i, j);
-
if (setColor.contains(color))
-
continue;
- image.setRGB(i, j, intBack);
- }
上面的程序,首先取出list的第一项(背景)的颜色:int intBack = list.get(0).getKey();
循环体中,如果是背景色或者验证码的颜色(if (setColor.contains(color))),那么继续循环;否则,该点为噪音,要设置成背景色(image.setRGB(i, j, intBack))。
最后,当然就是把处理过的Image交个OCR了。
- String strCode = ocr.recognizeEverything(image).trim().toLowerCase()
-
.replaceAll(" ", "");
由于分析的来的字符里出现空格的可能很大,所以要删除。
以上的程序,对加入横七竖八的别的颜色的线的加噪音方法比较有效,加别的颜色的点,也可以处理。
然后对于别的噪音,这里只给点思路,就不给出算法实现了。
比方说,对于那些加入和验证码颜色一致的杂七杂八的点的处理。前面的方法不能去除这种噪音。
我们可以做这么个二重循环,分析每个点,如果这个点颜色的四周(上下左右4个点,或者包括斜角共8个点)的颜色不同,而四周的颜色都一致,那么就判定这个点是噪音点,把它设置成和四周颜色一致。
当然,这个噪音未必是一个点,也许是个块,比方说2*2个点,或者3*3个点。如果这样,处理稍微麻烦点。可以用围棋博弈算法里的分块算法,取得每个小块,那些特别小的就判定为噪音。
然后说说关于扭曲,通常是把字母的上下往左右拉升。如果要其归位,比较难,未必一定可以实现。
可以考虑,用分块算法,取得的每一块,一个一个处理。处理时,把最左上和最左下画连线,算斜率;最右上和最右下也算斜率。取平均值,然后以平均斜率为base进行纠正。
分享到:
相关推荐
上个月传了一个5.01的版本,但只...http://cdn.asprise.com/ocr/files/downloads/15/asprise-ocr-csharp-vb.net-15.3-trail.zip ----------- 另,因为我在项目中只是去进行验证码的识别,其它有什么问题我没做测试。
AspriseOCR 4 完美破解 识别验证码 经过测试可以用 char * OCR ( char* imagePath, int imageFileType)
5. **验证码识别**:在“delphi验证码识别控件【AspriseOCR】.txt”文件中,可能包含了关于如何使用AspriseOCR进行验证码识别的示例和说明。验证码识别是OCR的一个重要应用,常用于网络安全验证,AspriseOCR 4.0能...
很好用的一个工具,本人用C#已经做出自己想用的东西了
2. **导入单元**:在Delphi项目中,导入Asprise OCR的头文件,通常名为`AspriseOcr.pas`或类似的名称。 3. **初始化**:在程序开始时,初始化OCR引擎,设置必要的参数,如字符集、识别语言、是否忽略大小写等。 4....
总结起来,本文介绍了如何在C#环境中使用AspriseOCR.dll库来识别验证码。虽然AspriseOCR的识别效果有限,但对于简单的验证码,仍然能够提供一定程度的解决方案。为了提高验证码识别的效率和准确度,开发者还可以考虑...
例如,一个典型的使用流程可能是:捕获验证码图像、预处理图像以提高识别效果、调用AspriseOCR的识别函数并获取识别结果,最后根据识别出的文本执行相应的操作。 在提供的压缩包文件中,我们看到了三个关键的库文件...
aspriseOCR.jar 识别验证码的jar包
AspriseOCR4.0 DLL破解 支持30种图片格式,识别数字和英文 带有Delphi示例
Asprise OCR Java 15.3.1是一个用于验证码识别的框架,专为Java开发者设计。这个框架的主要功能是处理图像识别,特别是针对验证码的自动识别。OCR(Optical Character Recognition,光学字符识别)技术是一种将扫描...
这个软件功能很强大,能够识别大多数网站的验证码,支持jpg,gif,bmp等多种格式,我们可以利用它实现自动登陆,自动灌水等等。官方网站http://asprise.com/product/ocr/
C#开源图像识别dll win64位15.3版本,可以添加引用使用,可以解析图片并识别文字,用于识别扫描书籍图片、解析验证码等。
AspriseOCR.dll是OCR的主要功能库,而DevIL.dll和ILU.dll可能涉及到图像处理,如加载、解码和操作图像,这些都是OCR识别过程的关键步骤。 7. **文档**:HOW-TO-ORDER-ASPRISE-OCR.htm可能是购买和授权Asprise OCR ...
在本项目中,我们关注的是使用C#编程语言实现的OCR(Optical Character Recognition,光学字符识别)技术来识别验证码。C#是一种广泛应用于Windows平台的面向对象的编程语言,它拥有丰富的类库和强大的.NET ...
验证码识别利器 private const string OCR_DLL_NAME_32 = "aocr.dll"; [DllImport(OCR_DLL_NAME_32, CharSet = CharSet.Ansi)] public static extern int com_asprise_ocr_setup(int queryOnly); [DllImport(OCR...
累死的 几乎包括现在网上的教程例子了,5分绝对不贵,还做了一份26页doc教程 其中有ocr2能识别英文的 ocr3能识别中文,不过中文语言包太大我没上传,要用的童鞋自己下吧,doc里面有链接,里面还有一个AspriseOCR 识别速度...
C#开源图像识别dll15.3版本,可以添加引用使用,可以解析图片并识别文字,用于识别扫描书籍图片、解析验证码等。
压缩包内容 TesseractDotnetExample 已经训练好字体的项目 Tesseract3 用来识别中文 StartProject 启动项目 ...AspriseOCR 速度超快的ocr引擎 识别英文比较好 TesseractOCR Tutorials.dco 详细教程
在Delphi中,可以使用第三方OCR库,如Tesseract或Asprise OCR,通过API接口进行集成,实现对验证码文字的识别。 3. 特征提取:为了区分每个字符,需要从图像中提取特定的特征,如轮廓、边缘、方向直方图等。这些...
3. `AspriseOCR.dll`:这是一个OCR(光学字符识别)库,用于识别和解析验证码图像中的文字。这是自动登录过程中必不可少的组件,负责将图片中的验证码转换为可读文本。 4. `DevIL.dll`、`ILU.dll`:这两个文件是图像...