• 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引擎识别测试项目中的验证码,没有识别出来,反正像我们项目中遇到验证码我是找开发要个万能验证码,比较简单粗暴。

  • 相关阅读:
    Java通过socket和DTU,RTU连接工业传感器通信
    没有远程桌面授权服务器可以提供许可证 相关,注册表项获得权限方法
    freertos内存pvPortMalloc 和 malloc 区别 ,以及全局变量占用情况
    自学it吧论坛
    安全学习地址
    服务器zfs文件系统修复过程记录
    第1年10月11日 android canvas
    第1年10月9日 swiftui
    第1年9月28日 Android 4.4以后,浏览器内核采用的chromium,可以支持webrtc
    第1年9月19日 ios librtmp
  • 原文地址:https://www.cnblogs.com/dreamyu/p/6200606.html
Copyright © 2020-2023  润新知