selenium使用笔记(二)——Tesseract OCR

      在自动化测试过程中我们经常会遇到需要输入验证码的情况,而现在一般以图片验证码居多。通常我们处理这种情况应该用最简单的方式,让开发给个万能验证码或者直接将验证码这个环节跳过。之前在技术交流群里也跟朋友讨论过,有的人认为这不是在解决问题而是在回避问题。对于这种问题只能仁者见仁智者见智了,其实我是很不理解以这种"完美心态"进行自动化测试的童鞋,要将自动化测试深入到测试骨髓,每个步骤每个验证点都要进行自动化测试,不去考虑这个验证点在整个功能逻辑流程中所处的位置、所占的分量,不去考虑自动化测试投入的成本与效果,为了自动化而进行自动化。。。。好了有点扯远了,这篇主要记录的是如何使用ocr图片识别技术来识别验证码。但同时做个提醒,这个技术的效果没有很明显,可以说它只能识别简单的验证码,像平时遇到的那些识别起来是相当费力的。

      先介绍下Tesseract-OCR

      OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程。

      Tesseract:开源的OCR识别引擎,初期Tesseract引擎由HP实验室研发,后来贡献给了开源软件业,后经由Google进行改进,消除bug,优化,重新发布。我使用的版本为3.02.02

       下载地址:http://download.csdn.net/download/whatday/7740469

       一、 安装方法:

 1.下载完成后点击安装,按照提醒一步步来即可

 2.安装完成,查看安装完成的目录。

         

  3.查看是否安装成功,打开dos,输入tesseract,出现下图的信息则证明安装成功

       

    二、使用方法

 1.在D盘根目录下有个验证码图片,我自己用画图写的一个,存为1.jpg

 

 2.进入dos,进入D盘目录下,输入:tesseract 1.jpg result ,tesseract会识别1.jpg并生成一个result.txt文件存入识别结果

----------------------------------------------------------分割线-------------------------------------------------------------

那么如何用代码来进行识别呢?

//ocr识别
public static void ocrIdentificationCode() throws Exception
{		
	//调用ocr 生成text
	Runtime runtime = Runtime.getRuntime();
	runtime.exec("cmd.exe /C  tesseract.exe D:\\1.jpg  D:\\code -1");
		
}
//读取目标文件
    public static void readCodeText(String filePath)
    {
        InputStreamReader isReader = null;
        String codeStr = null;
        try {
            String econding = "GBK";
            File file = new File(filePath);
            if(file.exists()&&file.isFile())//判断文件存在
            {
                isReader = new InputStreamReader(new FileInputStream(file),econding);
                BufferedReader bfReader = new BufferedReader(isReader);
                String lineText = null;
                while((lineText=bfReader.readLine())!= null)
                {
                   System.out.println(lineText);
                   System.out.println("11111111111111111111");
                }
            }else{
                System.out.println("文件不存在");
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally{
            try {
                isReader.close();
            } catch (Exception e2) {
                // TODO: handle exception
                e2.printStackTrace();
            }
            
        }
    }

 调用两个方法

  

 

 ---------------------------------------总结-----------------------------------------------------

      因为我自己试过使用tesseract-ocr引擎识别测试项目中的验证码,没有识别出来,反正像我们项目中遇到验证码我是找开发要个万能验证码,比较简单粗暴。

 

posted @ 2016-12-19 21:10  不当咸鱼  阅读(1724)  评论(0编辑  收藏  举报