CG008收费软件库Asprise ocr库识别图片验证码

直接上源码,这是一个收费的且不开源的库,测试效果也不太理想 亲测效果:

  1. 对于相同字体。非倾斜的,比如http://dz.bjjtgl.gov.cn/service/checkCode.do,识别率还是挺高的;
  2. 对于斜体或者其他变异的,如下代码识别率就很低了,可能需要调整识别引擎的参数了,大家自己查找测试下。
  3. 这个测试版本的,会有弹出对话框 框框~~
package com.example;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;

import javax.imageio.ImageIO;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.io.IOUtils;
import com.asprise.ocr.Ocr;

public class ReadImg {
    public static void main(String[] args) throws IOException {
        HttpClient httpClient = new HttpClient();
        GetMethod getMethod = new GetMethod("http://dz.bjjtgl.gov.cn/service/checkCode.do");
//      GetMethod getMethod = new GetMethod("https://dynamic.12306.cn/otsweb/passCodeAction.do?rand=sjrand");
        int statusCode = httpClient.executeMethod(getMethod);
        if (statusCode != HttpStatus.SC_OK) {
            System.err.println("Method failed: " + getMethod.getStatusLine());
            return ;
        }
        String picName = "F:\\img\\";
        File filepic=new File(picName);
        if(!filepic.exists())
            filepic.mkdir();
        File filepicF=new File(picName+new Date().getTime() + ".jpg");
        InputStream inputStream = getMethod.getResponseBodyAsStream();
        OutputStream outStream = new FileOutputStream(filepicF);
        IOUtils.copy(inputStream, outStream);
        outStream.close();

        Ocr.setUp(); // one time setup
        Ocr ocr = new Ocr(); // create a new OCR engine
        ocr.startEngine("eng", Ocr.SPEED_FASTEST); // English
        String s = ocr.recognize(new File[] {filepicF},Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        System.out.println("Result: " + s);
        System.out.println("num is:" + s.replace(",", "").replace("i", "1").replace(" ", "").replace("'", "").replace("o", "0").replace("O", "0").replace("g", "6").replace("B", "8").replace("s", "5").replace("z", "2"));
        // ocr more images here ...
        ocr.stopEngine();
    }
}

需要的java包

注意:主要的jar包

  1. aocr.jar -- 去Asprise官网下载最新jar包
  2. commons-codec.jar
  3. commons-httpclient-3.1.jar
  4. commons-io.jar
  5. commons-logging-1.0.4.jar

参考链接

  1. Java 识别图片验证码

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java成神之路

Java企业微信开发_02_通讯录同步

       登录企业微信—>管理工具—>通讯录同步助手—>开启“API接口同步”  ; 开启后,即可看到通讯录密钥,也可设置通讯录API的权限:读取或者编辑通...

7462
来自专栏小筱月

java 开发 face++ 人脸特征识别系统

首先要在 face++ 注册一个账号,并且创建一个应用,拿到 api key 和 api secret;

2881
来自专栏Spark生态圈

[Spark SQL] 源码解析之Optimizer

optimizer 以及之后的模块都只会在触发了action操作后才会执行。优化器是用来将Resolved LogicalPlan转化为optimized Lo...

1022
来自专栏菩提树下的杨过

base64编码在silverlight中的使用

在传统的.net应用中,使用base64编码字符串是一件很轻松的事情,比如下面这段代码演示了如何将本地文件转化为base64字符串,并且将base64字符串又还...

2257
来自专栏技巅

fcm的java发送代码

1413
来自专栏函数式编程语言及工具

Scalaz(39)- Free :a real monadic program

   一直感觉FP比较虚,可能太多学术性的东西,不知道如何把这些由数学理论在背后支持的一套全新数据类型和数据结构在现实开发中加以使用。直到Free Monad,...

2027
来自专栏跟着阿笨一起玩NET

ZPL打印中文信息

  相信各位在实际的项目中,需要开发打条码模块的也会有不少,很多同行肯定也一直觉得斑马打印机很不错,但是ZPL打印中文字符很麻烦。如果购买字体卡,或者通过COD...

4311
来自专栏马洪彪

IniHelper——INI操作辅助类

使用INI配置文件,简单便捷。 该辅助工具类为C#操作INI文件的辅助类,源码在某位师傅的基础上完善的来,因为忘记最初的来源了,因此不能提及引用,在此深感遗憾,...

4107
来自专栏跟着阿笨一起玩NET

C# EPL USB 指令打印

1251
来自专栏Spark学习技巧

Sparkml库标签和索引之间转化

StringIndexer StringIndexer将一串字符串标签编码为一列标签索引。这些索引范围是[0, numLabels)按照标签频率排序,因此最频繁...

2395

扫码关注云+社区

领取腾讯云代金券