`

java简单图片、验证码识别源码

阅读更多
java简单图片、验证码识别源码
package com.miaocn;
import java.awt.Graphics;  
import java.awt.Image;  
import java.awt.image.BufferedImage;  
import java.io.ByteArrayInputStream;  
import java.io.File;  
import java.io.IOException;
import java.io.InputStream;  
import java.net.MalformedURLException;
import java.net.URL;
 
import javax.imageio.ImageIO;  
import javax.media.jai.JAI;  
import javax.media.jai.RenderedOp;  
 
/** 
* 数字验证码识别器(用于识别xxx系统的图片验证码) 
*  
* 算法如下: 分析验证码图片结构,将其分隔成4个独立的数字图片,把四个独立的数字图片处理成单色位图。  
* 把单色位图转换为0、1数组,然后分别和0-9的字模进行匹配,得到图片上的数字信息。 
*  
* @version 1.0 2009-7-7 
* @author huangyuanmu 
* @since JDK 1.5.0_8 
*/ 
public class NumberVerCodeIdentifier {  
      
    static 
    {  
          System.setProperty("com.sun.media.jai.disableMediaLib", "true");  
    }  
 
//字典
    private static String a0 = "000111100";
    private static String a1 = "001111110";
   
    private static String a2 = "011111110";
    private static String a22 = "011011000";
   
    private static String a3 = "001111100";
    private static String a4 = "000000110";
   
    private static String a5 = "111111111";//前
    private static String a52 = "011111111";//前
    private static String a53 = "001011000";//后
   
    private static String a6 = "000111100000111100";
    private static String a7 = "001100000";
    private static String a8 = "001111100000111100";
    private static String a9 = "001111000";

    public String recognize(BufferedImage image){
  
     String result = "";
    
    
        BufferedImage newim[] = new BufferedImage[4];  
        if(null == image){  
            throw new RuntimeException("iamage为null");  
        }  
        // 将图像分成四块,因为要处理的文件有四个数字。  
        newim[0] = generateSingleColorBitMap(image.getSubimage(7, 5, 8, 11));  
        newim[1] = generateSingleColorBitMap(image.getSubimage(20, 5, 8, 11));  
        newim[2] = generateSingleColorBitMap(image.getSubimage(33, 5, 8, 11));  
        newim[3] = generateSingleColorBitMap(image.getSubimage(46, 5, 8, 11));  
       
       
        for (int k = 0; k < 4; k++) {
            int iw = newim[k].getWidth(null);  
            int ih = newim[k].getHeight(null);  
     
            StringBuffer numstr = new StringBuffer();
            // 因为是二值图像,这里的方法将像素读取出来的同时,转换为0,1的图像数组。  
            for (int i = 0; i < ih; i++) {  
                for (int j = 0; j < iw; j++) { 
                
                 int t = newim[k].getRGB(j, i);
                    if (t == -1)  
                     numstr.append("0");  
                    else 
                     numstr.append("1");;
                
                }  
            }  
            // 得到像匹配的数字串。  
           
           
            String straaa = numstr.toString().substring(0, 9) + numstr.toString().substring(79);
           // System.out.println(numstr.toString());
           
            boolean bye = true;
            if(straaa.equals(a6))
            {
             result = result+6;
             //System.out.println(6);
             bye = false;
            }
            if(straaa.equals(a8))
            {
             result = result+8;
             //System.out.println(8);
             bye = false;
            }
                       
         if(numstr.toString().substring(0,9).equals(a5) || numstr.toString().substring(0,9).equals(a52) || numstr.toString().substring(79).equals(a53)){
          result = result+5;
          //System.out.println(5);
       bye = false;
      }
           
         String aaaaa = numstr.toString().substring(79);
        
            if(bye){
             if(aaaaa.equals(a0)){
              result = result+0;
              //System.out.println(0);
             }
            
             if(aaaaa.equals(a1)){
              result = result+1;//System.out.println(1);
             }
             if(aaaaa.equals(a2) || aaaaa.equals(a22)){
              result = result+2;//System.out.println(2);
             }
             if(aaaaa.equals(a3)){
              result = result+3;//System.out.println(3);
             }
            
             if(aaaaa.equals(a4)){
              result = result+4;// System.out.println(4);
             }           
            
             if(aaaaa.equals(a7)){
              result = result+7;//System.out.println(7);
             }
            
             if(aaaaa.equals(a9)){
              result = result+9;//System.out.println(9);
             }           
            }
         
         
        }  
       // System.out.println(result);
        return result;
       
    }  
 
    /** 
     * 单色位图转换
     * @return 
     */ 
    private static BufferedImage generateSingleColorBitMap(Image colorImage) {  
        BufferedImage image = new BufferedImage(8, 11,  
                BufferedImage.TYPE_BYTE_GRAY);  
        Graphics g = image.getGraphics();  
        g.drawImage(colorImage, 0, 0, null);  
        g.dispose();  
        RenderedOp ro = JAI.create("binarize", image, new Double(100));  
        BufferedImage bi = ro.getAsBufferedImage();  
        return bi;  
    }  
 
    /** 
     * 测试 
     * @author  sunyang
     */ 
    public static void main(String args[]){  
    
     NumberVerCodeIdentifier nvi = new NumberVerCodeIdentifier();
    
     String res="";
  try {
   res = nvi.recognize(ImageIO.read(new File("d:\\111.bmp")));
  
   //res = nvi.recognize(ImageIO.read(new URL("http://******.com/validationCode.jsp")));
  } catch (MalformedURLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }  
        System.out.println(res);  
    }  
}

分享到:
评论

相关推荐

    影刀RPA中级证书-数据处理-列表计算价格

    影刀RPA致力于为各行业客户提供高效、灵活的自动化解决方案。能够实现PC、手机上任何软件的自动化操作,支持Windows、Linux等操作系统,以及桌面软件、Web程序和手机App的自动化。 影刀RPA的核心功能包括数据抓取、解析、校验和自动填表,还支持可视化流程设计器、Python和JavaScript脚本接入,以及流程录制等功能,帮助用户快速搭建自动化流程。影刀RPA结合AI技术,支持机器视觉、自然语言处理等高级功能,进一步提升自动化能力。影刀RPA广泛应用于电商、金融、制造等行业,帮助客户实现订单处理、客户数据录入、财务对账等任务的自动化。影刀实战,影刀证书快速获取,影刀功能定制

    cloud单点登录集成

    cloud单点登录集成

    JAVAFX开发的虚拟桌宠,禁止商用!!!!

    女朋友生日,突发奇想用她喜欢的表情包做了个虚拟桌宠 大家要用只需要替换一下GIF就行

    大学生创新创业大赛项目 - 仿 Envato 的电商项目.zip

    大学生创业项目源码

    open-vm-tools-11.0.5-3.el7-9.9.x64-86.rpm.tar.gz

    1、文件内容:open-vm-tools-11.0.5-3.el7_9.9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf open-vm-tools-11.0.5-3.el7_9.9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    华为网路设备学习-14 (web界面中复原防火墙实验)

    华为网路设备学习-14 (web界面中复原防火墙实验)

    基于springboot框架的Javaweb体育馆管理系统的设计与实现(完整源码+数据库sql文件+项目文档+Java项目编程实战+编程练手好项目).zip

    关键词:海滨体育馆管理,Java技术,MYSQL数据库,Spring Boot框架 1 引言 1 1.1 课题背景 1 1.2 设计原则 1 1.3 论文结构安排 2 2 系统关键技术 3 2.1 JAVA技术 3 2.2 B/S结构 3 2.3 MYSQL数据库 4 2.4 Spring Boot框架 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 经济可行性 5 3.1.3 运行可行性 5 3.1.4 法律可行性 5 3.2 系统性能分析 5 3.3 系统功能分析 6 3.4 系统流程分析 7 3.4.1 注册登录流程 7 3.4.2 添加信息流程 8 3.4.3 删除信息流程 8 4 系统设计 9 4.1 系统概要设计 9 4.2 系统结构设计 9 4.3 系统顺序图设计 10 4.4 数据库设计 10 4.4.1 数据库E-R图设计 10 4.4.2 数据库表设计 12 5 系统的实现 15 5.1 登录模块的实现 15 5.2 注册模块的实现 15 5.3 学生管理模块的实现 16 5.4 系统主界面模块的实现 16 5.5 器材管理模块

    Python实现基于IBES-ELM基于改进的秃鹰搜索优化算法优化极限学习机的数据回归预测 多指标的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文档详细介绍了一个名为《Python实现基于IBES-ELM基于改进的秃鹰搜索优化算法优化极限学习机的数据回归预测》的项目。该项目旨在通过结合改进的秃鹰搜索优化算法(IBES-EO)和极限学习机(ELM),优化ELM模型以提高其预测精度,尤其针对多指标、高维数据以及噪声数据的处理进行了探讨。项目涵盖了从数据预处理到建模预测的一系列完整流程,并提供了代码案例和GUI界面设计思路。文档详细阐述了模型的工作机制、适用场景及其实现细节。 适合人群:对机器学习有兴趣,特别是对ELM、IBES-EO感兴趣的研究人员、开发人员和技术爱好者。 使用场景及目标:适用于各种回归预测问题,包括但不限于金融预测、气象预测、健康数据分析和智能交通系统等。目标在于提供一种高效的解决方案,提高在大规模复杂数据集中进行回归预测的能力,同时也展示了如何将生物启发式的优化算法运用于改进现有的机器学习模型,为实际应用提供更多可能。 阅读建议:文档按照章节顺序编排,从背景介绍到具体实现再到最终总结。初学者可以从头至尾通读,以掌握全流程概念和技能;有一定经验的读者可以直接跳转至自己感兴趣的环节,例如优化算法的具体设计或者代码实现部分。建议边学习边动手实验,以达到最佳的学习效果,并可通过提供的完整示例代码加深理解和记忆。此外,项目中有关于系统架构设计、API接口搭建等内容也可作为实际工程项目参考。

    智能海报设计助手:AI助力简易高效的海报制作解决方案

    内容概要:本文介绍了一款名为智能海报设计助手的应用程序,该应用程序是一款面向大众使用的AI工具,专注于解决普通人在设计高质量海报时遇到的问题。应用程序拥有强大的创意灵感库,可以根据用户提出的特定需求(例如主题、风格偏好等),快速推荐不同类型的海报设计方案,并配备智能化的一键素材筛选系统和自动排版功能,使得整个海报制作流程更为简化、高效,即使是无设计经验的用户也能独立完成高水平的作品。 适合人群:缺乏专业设计能力的广大非专业人士,如商家营销人员、活动策划者、个体创作者。 使用场景及目标:帮助需要短时间内完成海报宣传材料准备的工作人士提高工作效率,减少人力投入的同时获得媲美专业人士水准的成品。 阅读建议:文章旨在强调此智能海报设计器对普通用户的友好性和便捷性的特点,因此重点在于理解它是怎样利用先进技术来满足一般用户的实际应用需求的,而不仅仅关注具体的操作方法。这有助于潜在用户决定是否采用这一工具来进行海报创建工作。

    STL浅谈,从vector到map

    本文为C++ STL入门指南,详解vector、stack、map等核心容器的用法与底层原理,助你高效掌握标准模板库!

    大创项目驱动.zip

    大学生创业项目源码

    西门子S71511PLC实现PID程序控制阀门开度和模拟量转换:博途WinCC画面搭建完整演示,西门子S71511PLC实现PID程序控制阀门开度和模拟量转换:博途WinCC画面搭建完整演示,7自由度

    西门子S71511PLC实现PID程序控制阀门开度和模拟量转换:博途WinCC画面搭建完整演示,西门子S71511PLC实现PID程序控制阀门开度和模拟量转换:博途WinCC画面搭建完整演示,7自由度车辆动力学模型与联合仿真验证 软件使用:Carsim2020.0+Matlab Simulink2018b 适用场景:为了验证7自由度模型的正确性,与Carsim进行联合仿真验证,采用模块化建模方法,搭建了电机模型、参数计算、轮胎模型、7自由度动力学模型。 包含模块:电机模型模块1和2、参数计算模块、轮胎模型、7DOF模型、详细参考文献及说明文档。 包含:Matlab Simulink源码文件,详细建模说明文档,对应参考资料及相关文献, ,7自由度车辆动力学模型;联合仿真验证;Carsim2020.0;Matlab Simulink2018b;模块化建模方法;电机模型;参数计算模块;轮胎模型;详细参考文献;建模说明文档。,7自由度车辆模型联合仿真验证:Carsim2020.0与Matlab Simulink2018b应用实践

    【css酷炫效果】纯CSS实现立体纸张折叠动效

    对应博客地址:https://blog.csdn.net/u011561335/article/details/146313054

    大创项目前端.zip

    大学生创业项目源码

    大创项目_27.zip

    大学生创业项目源码

    【毕业设计】基于微信小程序的社区团购系统+ssm后端【源码+论文+答辩ppt+开题报告+任务书】.zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    iPhone8,1-12.3(16F156)-0002313038C3C3BA(617033133966266).shsh

    iPhone8,1-12.3(16F156)-0002313038C3C3BA(617033133966266).shsh

    org.eclipse.equinox.launcher.win32.win32.x86-64-1.2.700.v20221108-1024

    org.eclipse.equinox.launcher.win32.win32.x86-64-1.2.700.v20221108-1024

    基于在山地隧道采集到的数据情况,对车辆状态未来的碰撞预测【包含数据和代码、cnn-lstm-attention的类别预测】

    本项目的异常状态预测任务聚焦于基于车辆与周围环境的相对数据,预测未来每个网格的异常状态。 预测的目标是基于当前时刻的九宫格风险矩阵状态,预测下一时刻每个网格的风险等级。 九宫格共有9个网格,每个网格可能对应低、中、高不同的异常风险状态,每个时间点的输出是一个包含9个元素的矩阵,其中每个元素表示一个网格的异常状态。 如果某些网格当前没有车辆或没有风险,在输入矩阵中用0表示为无风险的状态。例如,当前时刻的九宫格异常状态为[0, 0, 高风险, 高风险, 0, 0, 0, 0, 0],预测后的下一时刻的九宫格异常状态为[0, 0, 中风险, 中风险, 0, 低风险, 0, 0, 0]。

Global site tag (gtag.js) - Google Analytics