背景:
大家在做爬虫或web端的UI自动化时会经常遇到的就是验证码,那怎么识别这验证码也是我们目前遇到的难题。(在这里咱们先不讨论:1.点击类的验证 2.滑动类的验证 3.中文类的验证)
简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。计算机涉及到的几何图形处理一般有 2维到n维图形处理,边界区分,面积计算,体积计算,扭曲变形校正。对于颜色则有色彩空间的计算与转换,图形上色,阴影,色差处理等等。

环境:
Python3.7
PIL
pytesseract

1、安装Python3.7
2、安装PIL库
3、安装pytesseract库

思路:
1、图片降噪

2、图片切割

3、图像文本输出

3.1 图片降噪

所谓降噪就是把不需要的信息通通去除,比如背景,干扰线,干扰像素等等,只剩下需要识别的文字,让图片变成2进制点阵最好。

对于彩色背景的验证码:每个像素都可以放在一个5维的空间里,这5个维度分别是,X,Y,R,G,B,也就是像素的坐标和颜色,在计算机图形学中,有很多种色彩空间,最常用的比如RGB,印刷用的CYMK,还有比较少见的HSL或者HSV,每种色彩空间的维度都不一样,但是可以通过公式互相转换。在RGB空间中不好区分颜色,可以把色彩空间转换为HSV或HSL。色彩空间参见:http://baike.baidu.com/view/3427413.htm

识别验证码图片如下:

代码:

1、打开图片转化成灰度

import pytesseract
from PIL import Image #1、导入Image包,打开图片
im = Image.open('1.jpg') #2、把彩色图像转化为灰度图像。RBG转化到HSI彩色空间,采用L分量:
imgry = im.convert('L')
imgry.show()

转化成灰度效果如下:(还是比较模糊不能很好的被识别)

2、二值化处理

二值化是图像分割的一种常用方法。在二值化图象的时候把大于某个临界灰度值的像素灰度设为灰度极大值,把小于这个值的像素灰度设为灰度极小值,
从而实现二值化(一般设置为0-1)。根据阈值选取的不同,二值化的算法分为固定阈值和自适应阈值,这里选用比较简单的固定阈值。
把像素点大于阈值的设置,1,小于阈值的设置为0。生成一张查找表,再调用point()进行映射。

threshold = 140
table = [] for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
out = imgry.point(table, '1')
out.show()

二值化处理后的效果如图:

解决问题:

第一个错误:

1.FileNotFoundError:[WinError 2] 系统找不到指定的文件The system cannot find the file specified:

解决方案:

方案1:将tesseract.exe添加到系统的环境变量path中

方案2:修改pytesseract.py文件,指定tesseract.exe安装路径打开pytesseract的安装目录(这是我的目录:C:\Users\Administrator\venv\Lib\site-packages\pytesseract)找到并打开: pytesseract.py文件

注释掉原本的:

#tesseract_cmd=‘tesseract’

新增tesseract_cmd 为tesseract.exe的安装路径

tesseract_cmd= ‘D:\Program Files\Tesseract-OCR\tesseract.exe’

这样系统找不到指定的文件这个错误就可以解决了。

第二个错误:

2.解决上面的问题后运行代码又出错:

pytesseract.pytesseract.TesseractError: (1, 'Error opening data file C:\\Program Files (x86)\\Tesseract-OCR\\tessdata/eng.traineddata Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory. Failed loading language \'eng\' Tesseract couldn\'t load any languages! Could not initialize tesseract.')

解决方案:

在代码中添加:

pytesseract.pytesseract.tesseract_cmd = 'c://Program Files (x86)//Tesseract-OCR//tesseract.exe'

tessdata_dir_config = '--tessdata-dir "c://Program Files (x86)//Tesseract-OCR//tessdata"'

然后在指定的image_to_string配置下

image_to_string(image, lang = 'eng', config=tessdata_dir_config)

识别成功

爬虫、Selenium、webUI自动化使用PIL+pytesseract识别验证码以及识别错误解决方案的更多相关文章

  1. python pytesseract——3步识别验证码的识别入门

    验证码识别是个大工程,但入门开始只要3步.需要用到的库PIL.pytesserac,没有的话pip安装.还有一个是tesseract-ocr 下载地址:https://sourceforge.net/ ...

  2. Selenium+Java自动化之如何优雅绕过验证码

    前言: 验证码问题对于每个ui自动化的同学而言,相信都是个蛋疼的问题,对于验证码的处理我个人不提倡破解,不要去想破解方法,这个验证码本来就是为了防止别人自动化登录的.如果你们公司的验证码很容易被你破解 ...

  3. Selenium+Python自动化之如何绕过登录验证码

    一.使用Fiddler抓包 1.一般登陆网站成功后,会生成一个已登录状态的cookie,那么只需要直接把这个值拿到,用selenium进行addCookie操作即可. 2.可以先手动登录一次,然后抓取 ...

  4. Python之selenium+pytesseract 实现识别验证码自动化登录脚本

    今天写自己的爆破靶场WP时候,遇到有验证码的网站除了使用pkav的工具我们同样可以通过py强大的第三方库来实现识别验证码+后台登录爆破,这里做个笔记~~~ 0x01关于selenium seleniu ...

  5. e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (二) 图片验证码的识别

    上一篇文章讲了“e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step 一 京东 商品搜索 ...

  6. python识别验证码——PIL,pytesser,pytesseract的安装

    1.使用Python识别验证码需要安装Python的图像处理模块(PIL.pytesser.pytesseract) (安装过程需要pip,在我的Python中已经安装pip了,pip的安装就不在赘述 ...

  7. Python Selenium、PIL、pytesser 识别验证码

    思路: 使用Selenium库把带有验证码的页面截取下来 利用验证码的xpath截取该页面的验证码 对验证码图片进行降噪.二值化.灰度化处理后再使用pytesser识别 使用固定的账户密码对比验证码正 ...

  8. selenium自动化 | 借助百度AI开放平台识别验证码登录职教云

    #通过借助百度AI开放平台识别验证码登录职教云 from PIL import Image from aip import AipOcr import unittest # driver.get(zj ...

  9. 使用selesium和pytesseract识别验证码,达到登录网页目的

    关于验证码问题,大多可以在网上了解到目前有四种解决方案:1.开发注释验证码2.开发开一个“后门”,设置一个万能码,输入万能码则通过3.通过cookies绕过验证码4.图形识别技术 前三种是比较快速也是 ...

  10. python爬虫--selenium模块.上来自己动!

    selenium 基本操作 from selenium import webdriver from time import sleep #实例化一个浏览器对象 bro = webdriver.Chro ...

随机推荐

  1. 实时计算 Flink 版总体介绍

    简介: 实时计算 Flink 版(Alibaba Cloud Realtime Compute for Apache Flink,Powered by Ververica)是阿里云基于 Apache ...

  2. [GPT] js 外部参数怎么传给 setTimeout 的匿名函数 ?

    你可以将外部参数作为 setTimeout() 函数的第三个参数传递,然后在匿名函数中使用这个参数.例如: var myParam = "Hello, world!"; setTi ...

  3. 2019-10-31-WPF-设置纯软件渲染

    title author date CreateTime categories WPF 设置纯软件渲染 lindexi 2019-10-31 8:59:2 +0800 2018-04-20 16:36 ...

  4. Apache Pulsar 桌面端图形化管理工具

    Apache Pulsar 桌面端图形化管理工具 Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息.存储.轻量化函数式计算为一体,采用计算与存储 ...

  5. 开发日志:企业微信实现扫码登录(WEB)

    一:获取扫码登陆所需的参数:appid,secret,agentid 登录企业微信:https://work.weixin.qq.com/ 扫码登录文档:https://work.weixin.qq. ...

  6. C# 采集知网

    采集知网 WebClient /// <summary> /// 支持 Session 和 Cookie 的 WebClient. /// </summary> public ...

  7. 9.按需创建PV和PVC并使用

    官方文档:https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-persistent-volume-stor ...

  8. QT Creator 远程调试 QT 程序

    一.测试环境 QT Creator 版本:5.12.9 开发板:rv1126 开发环境:ubuntu20.04 开发板内核:4.19 二.配置 ARM 交叉编译器 ARM 交叉编译工具,购买开发板时, ...

  9. Listener监听器,实现一个显示在线用户人数

    Listener监听器,实现一个显示在线用户人数 每博一文案 关于后半身,脾气越温,福报越深. 师傅说:惜命最好的方式不是养生,而是管好自己的情绪. 坏毛病都是惯出来的,但好脾气都是磨出来的,与人生气 ...

  10. Mybatis学习一(介绍/举例/优化)

    MyBatis介绍: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...