当前位置: 首页 > news >正文

wordpress整站ssl郑州网站推广公司

wordpress整站ssl,郑州网站推广公司,云主机挂游戏,提升学历机构前言 在测试过程中,有的时候登录需要输入图片验证码。这时候使用Selenium进行自动化测试,怎么做图片验证码识别?本篇内容主要介绍使用Selenium、BufferedImage、Tesseract进行图片 验证码识别。 环境准备 jdk:1.8 tessdata&…

前言

在测试过程中,有的时候登录需要输入图片验证码。这时候使用Selenium进行自动化测试,怎么做图片验证码识别?本篇内容主要介绍使用Selenium、BufferedImage、Tesseract进行图片 验证码识别。

环境准备

jdk:1.8
tessdata:文章末尾附下载地址

安装Tesseract

我本地是ubuntu系统

sudo apt install tesseract-ocr
sudo apt install libtesseract-dev 

在项目中引用

<dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.5.4</version>
</dependency>

实现

在下图中,登录需要使用图片验证码进行验证。我们的图片验证码识别流程是使用Selenium定位到图片验证码元素,将元素截图保。然后将保存的图片验证码使用BufferedImage进行灰度化、二值化处理,处理完成后去除图片上的干扰点。最后使用Tesseract进行图片验证码上的字符识别。
在这里插入图片描述

处理图片

首先使用BufferedImage读取图片验证码图片,然后调整亮度后进行灰度化、二值化处理。处理后的图片去除干扰点。

public static void cleanLinesInImage(File sfile, String destDir)  throws IOException{File destF =new File(destDir);if (!destF.exists()){destF.mkdirs();}BufferedImage bufferedImage = ImageIO.read(sfile);int h = bufferedImage.getHeight();int w = bufferedImage.getWidth();// 灰度化int[][] gray = new int[w][h];for (int x = 0; x < w; x++){for (int y = 0; y < h; y++){int argb = bufferedImage.getRGB(x, y);// 图像加亮(调整亮度识别率非常高)int r = (int) (((argb >> 16) & 0xFF) * 1.1 + 30);int g = (int) (((argb >> 8) & 0xFF) * 1.1 + 30);int b = (int) (((argb >> 0) & 0xFF) * 1.1 + 30);//                int r = (int) (((argb >> 16) & 0xFF) * 0.1 + 30);//                int g = (int) (((argb >> 8) & 0xFF) * 0.1 + 30);//                int b = (int) (((argb >> 0) & 0xFF) * 0.1 + 30);if (r >= 255){r = 255;}if (g >= 255){g = 255;}if (b >= 255){b = 255;}gray[x][y] = (int) Math.pow((Math.pow(r, 2.2) * 0.2973 + Math.pow(g, 2.2)* 0.6274 + Math.pow(b, 2.2) * 0.0753), 1 / 2.2);}}ImageIO.write(bufferedImage, "jpg", new File(destDir, sfile.getName()));// 二值化int threshold = ostu(gray, w, h);BufferedImage binaryBufferedImage = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_BINARY);for (int x = 0; x < w; x++){for (int y = 0; y < h; y++){if (gray[x][y] > threshold){gray[x][y] |= 0x00FFFF;} else{gray[x][y] &= 0xFF0000;}binaryBufferedImage.setRGB(x, y, gray[x][y]);}}ImageIO.write(binaryBufferedImage, "jpg", new File(destDir, sfile.getName()));//        去除干扰线条for(int y = 1; y < h-1; y++){for(int x = 1; x < w-1; x++){boolean flag = false ;if(isBlack(binaryBufferedImage.getRGB(x, y))){//左右均为空时,去掉此点if(isWhite(binaryBufferedImage.getRGB(x-1, y)) && isWhite(binaryBufferedImage.getRGB(x+1, y))){flag = true;}//上下均为空时,去掉此点if(isWhite(binaryBufferedImage.getRGB(x, y+1)) && isWhite(binaryBufferedImage.getRGB(x, y-1))){flag = true;}//斜上下为空时,去掉此点if(isWhite(binaryBufferedImage.getRGB(x-1, y+1)) && isWhite(binaryBufferedImage.getRGB(x+1, y-1))){flag = true;}if(isWhite(binaryBufferedImage.getRGB(x+1, y+1)) && isWhite(binaryBufferedImage.getRGB(x-1, y-1))){flag = true;}if(flag){binaryBufferedImage.setRGB(x,y,-1);}}}}// 矩阵打印//        for (int y = 0; y < h; y++)//        {//            for (int x = 0; x < w; x++)//            {//                if (isBlack(binaryBufferedImage.getRGB(x, y)))//                {//                    System.out.print("*");//                } else//                {//                    System.out.print(" ");//                }//            }//            System.out.println();//        }ImageIO.write(binaryBufferedImage, "jpg", new File(destDir, sfile.getName()));}

OCR识别

setDataPath方法,传入你下载的

public static String executeTess4J(String imgUrl){String ocrResult = "";try{ITesseract instance = new Tesseract();instance.setDatapath("your tessdata path");instance.setLanguage("eng");instance.setOcrEngineMode(0);instance.setTessVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890");File imgDir = new File(imgUrl);//long startTime = System.currentTimeMillis();ocrResult = instance.doOCR(imgDir);}catch (TesseractException e){e.printStackTrace();}return ocrResult;
}

验证

编写Selenium脚本

public static void main(String[] args) throws IOException {System.setProperty("webdriver.chrome.driver", "/home/zhangkexin/chromedriver");WebDriver driver = new ChromeDriver();driver.manage().window().maximize();driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);driver.get("https://xkczb.jtw.beijing.gov.cn/#");WebElement element = driver.findElement(By.xpath("//*[@id=\"getValidCode\"]/img"));File img = element.getScreenshotAs(OutputType.FILE);String path = System.getProperty("user.dir");cleanLinesInImage(img, path);String imgFile = path  + "/" + img.getName();Path source = Paths.get(imgFile);Path dest =  Paths.get("/home/zhangkexin/ui-test/autoTest/img.jpg");Files.copy(source, dest, StandardCopyOption.REPLACE_EXISTING);String code = executeTess4J("/home/zhangkexin/ui-test/autoTest/img.jpg");System.out.println(code);driver.quit();
}

看一下经过处理后的图片验证码
在这里插入图片描述
最后实际识别出来的结果。
在这里插入图片描述
testdata:
链接:https://pan.baidu.com/s/1uJE9wl1oa2WAsBTsydUlmg?pwd=m576 
提取码:m576

http://www.ds6.com.cn/news/111150.html

相关文章:

  • 建网站 端口百度人工电话
  • 网站做3年百度搜索引擎api
  • 老太太做受网站app推广代理平台
  • 如何安装网站程序百度用户服务中心电话
  • 学院网站建设报价湛江今日头条新闻
  • 做搜索引擎优化对网站有哪些好处镇江网页设计
  • 网站制作 福宁网络有限公司谷歌google play官网下载
  • 有做h的小说网站运营培训班学费大概多少
  • wordpress菜单产品目录网站优化方案范文
  • wordpress图片css北京优化seo
  • 网站seo设置搜索关键词排名优化服务
  • 电子商务网站建设技术爱上链外链购买平台
  • 娄底建网站怎么营销推广
  • 营口建网站企业网站营销的优缺点及案例
  • 漳州网站建设优化临沂百度推广的电话
  • 国家允许哪几个网站做顺风车抖音seo点击软件排名
  • 旅游地网站制作站长工具seo查询软件
  • 开设网站维护公司长春seo网站管理
  • 网站建设刂搜金手指下拉贰肆哪些平台可以免费发布产品
  • 网站建设 独立ip百度账号官网
  • 网站后台表格推特是谁的公司
  • crm系统排名aso搜索优化
  • 长沙营销网站建设公司优化师和运营区别
  • wordpress老提示更新win10优化大师怎么样
  • 一元购网站建设多少钱小吃培训
  • 承德网站制作打开全网搜索
  • 商城网站建设需要注意什么网站优化人员通常会将目标关键词放在网站首页中的
  • 站群推广有哪些方式太原网络营销公司
  • 网站建设公司怎么运营最新疫情19个城市封城
  • 内江网站建设2023新闻摘抄十条