Python3 爬虫学习笔记第十二章 —— 【验证码对抗系列 — 图形验证码】


文章目录

  • 【12.1】关于普通图形验证码
  • 【12.2】tesserocr 库识别验证码
  • 【12.3】pytesseract 库识别验证码
  • 【12.4】验证码处理
  • 【12.5】tesserocr 与 pytesserocr 相关资料

【12.1】关于普通图形验证码

普通图形验证码一般由四位纯数字、纯字母或者字母数字组合构成,是最常见的验证码,也是最简单的验证码,利用 tesserocr 或者 pytesseract 库即可识别此类验证码,前提是已经安装好 Tesseract-OCR 软件

【12.2】tesserocr 库识别验证码

简单示例:

import tesserocr
from PIL import Imageimage = Image.open('code.png')
result = tesserocr.image_to_text(image)
print(result)

新建一个 Image 对象,调用 tesserocr 的 image_to_text() 方法,传入 Image 对象即可完成识别,另一种方法:

import tesserocr
print(tesserocr.file_to_text('code.png'))

【12.3】pytesseract 库识别验证码

简单示例:

import pytesseract
from PIL import Imageimg = Image.open('code.png')
img = img.convert('RGB')
img.show()
print(pytesseract.image_to_string(img))

pytesseract 的各种方法:

  • get_tesseract_version:返回 Tesseract 的版本信息;
  • image_to_string:将图像上的 Tesseract OCR 运行结果返回到字符串;
  • image_to_boxes:返回包含已识别字符及其框边界的结果;
  • image_to_data:返回包含框边界,置信度和其他信息的结果。需要 Tesseract 3.05+;
  • image_to_osd:返回包含有关方向和脚本检测的信息的结果。

有关参数:

image_to_data(image, lang='', config='', nice=0, output_type=Output.STRING)

  • image:图像对象;
  • lang:Tesseract 语言代码字符串;
  • config:任何其他配置为字符串,例如:config=’–psm 6’;
  • nice:修改 Tesseract 运行的处理器优先级。Windows不支持。尼斯调整了类似 unix 的流程的优点;
  • output_type:类属性,指定输出的类型,默认为string。

lang 参数,常见语言代码如下:

  • chi_sim:简体中文
  • chi_tra:繁体中文
  • eng:英文
  • rus:俄罗斯语
  • fra:法语
  • deu:德语
  • jpn:日语

【12.4】验证码处理

利用 Image 对象的 convert() 方法传入不同参数可以对验证码做一些额外的处理,如转灰度、二值化等操作,经过处理过后的验证码会更加容易被识别,识别准确度更高,各种参数及含义:

  • 1:1位像素,黑白,每字节一个像素存储;
  • L:8位像素,黑白;
  • P:8位像素,使用调色板映射到任何其他模式;
  • RGB:3x8位像素,真彩色;
  • RGBA:4x8位像素,带透明度掩模的真彩色;
  • CMYK:4x8位像素,分色;
  • YCbCr:3x8位像素,彩色视频格式;
  • I:32位有符号整数像素;
  • F:32位浮点像素。

示例:

import pytesseract
from PIL import Imageimage = Image.open('code.png')
image = image.convert('L')
image.show()
result = pytesseract.image_to_string(image)
print(result)

Image 对象的 convert() 方法参数传入 L,即可将图片转化为灰度图像,转换前后对比:

import pytesseract
from PIL import Imageimage = Image.open('code.png')
image = image.convert('1')
image.show()
result = pytesseract.image_to_string(image)
print(result)

Image 对象的 convert() 方法参数传入 1,即可将图片进行二值化处理,处理前后对比:

【12.5】tesserocr 与 pytesserocr 相关资料

  • tesserocr GitHub:https://github.com/sirfz/tesserocr

  • tesserocr PyPI:https://pypi.python.org/pypi/tesserocr

  • pytesserocr GitHub:https://github.com/madmaze/pytesseract

  • pytesserocr PyPI:https://pypi.org/project/pytesseract/

  • Tesseract-OCR 下载地址:http://digi.bib.uni-mannheim.de/tesseract

  • tesseract GitHub:https://github.com/tesseract-ocr/tesseract

  • tesseract 语言包:https://github.com/tesseract-ocr/tessdata

  • tesseract 文档:https://github.com/tesseract-ocr/tesseract/wiki/Documentation

Python3 爬虫学习笔记 C12【验证码对抗系列 — 图形验证码】相关推荐

  1. Python3 爬虫学习笔记 C14【验证码对抗系列 — 点触验证码】

    Python3 爬虫学习笔记第十四章 -- [验证码对抗系列 - 点触验证码] 文章目录 [14.1]关于点触验证码 [14.2]点触验证码攻克思路 [14.3]模拟登录 12306 - 总体思路 [ ...

  2. Python3 爬虫学习笔记 C13【验证码对抗系列 — 滑动验证码】

    Python3 爬虫学习笔记第十三章 -- [验证码对抗系列 - 滑动验证码] 文章目录 [13.1]关于滑动验证码 [13.2]滑动验证码攻克思路 [13.3]模拟登录 bilibili - 总体思 ...

  3. Python3 爬虫学习笔记 C16【数据储存系列 — Redis】

    Python3 爬虫学习笔记第十六章 -- [数据储存系列 - Redis] 文章目录 [16.1]关于 Redis [16.2]使用 Redis [16.3]Key(键)操作 [16.4]Strin ...

  4. Python3 爬虫学习笔记 C11【数据储存系列 — MongoDB】

    Python3 爬虫学习笔记第十一章 -- [数据储存系列 - MongoDB] 文章目录 [11.1]关于 MongoDB [11.2]MongoDB 基本操作语句 [11.3]连接 MongoDB ...

  5. Python3 爬虫学习笔记 C10【数据储存系列 — MySQL】

    Python3 爬虫学习笔记第十章 -- [数据储存系列 - MySQL] 文章目录 [10.1]MySQL 基本操作语句 数据库操作 表操作 表的结构 表的数据 [10.2]Python 连接 My ...

  6. Python3 爬虫学习笔记 C09【数据储存系列 — 文件储存】

    Python3 爬虫学习笔记第九章 -- [数据储存系列 - 文件储存] 文章目录 [9.1]TXT 文本存储 [9.1.1]基本示例 [9.1.2]打开方式 [9.2]JSON 文件存储 [9.2. ...

  7. Python3 爬虫学习笔记 C18【爬虫框架 pyspider — 深入理解】

    Python3 爬虫学习笔记第十八章 -- [爬虫框架 pyspider - 深入理解] 文章目录 [18.1]启动参数 [18.2]运行单个组件 [18.2.1]运行 Scheduler [18.2 ...

  8. Python3 爬虫学习笔记 C17【爬虫框架 pyspider — 基本使用】

    Python3 爬虫学习笔记第十七章 -- [爬虫框架 pyspider - 基本使用] 文章目录 [17.1]初识 pyspider [17.2]使用 pyspider [17.2.1]主界面 [1 ...

  9. Python3 爬虫学习笔记 C15【代理的基本使用】

    Python3 爬虫学习笔记第十五章 -- [代理的基本使用] 文章目录 [15.1]代理初识 [15.2]urllib 库使用代理 [15.3]requests 库使用代理 [15.4]Seleni ...

最新文章

  1. 数据仓库的未来 MariaDB ColumnStore
  2. 转发:为什么函数式编程至关重要
  3. JVM监控工具有哪些
  4. Redis笔记之基本数据结构 链表
  5. java移动接口发短信_天天都会写接口,但它的用途和好处有多少人能说得清楚?...
  6. c语言指针查找数组一个数_C语言快速入门——指针与数组
  7. BootKit病毒——“异鬼Ⅱ”的前世今生
  8. CSS绝对定位absolute元素的初始包含块不是body元素,也不是html元素
  9. [置顶] Embedded Server:像写main函数一样写Web Server
  10. windows下WDK创建免费的测试证书,并签名windows驱动文件(附带测试效果)
  11. 综述 | 机器视觉表面缺陷检测
  12. div 和table
  13. 合作博弈:联盟、分配和核心core
  14. 好用的网络拓扑绘制软件亿图图示安装以及使用
  15. [Ubuntu] 安装百度网盘客户端
  16. Boost.Asio的使用技巧
  17. mysql多表操作例题_MySQL 单表和多表的基本练习题
  18. Luogu5149会议座位
  19. 【老九学堂】【初识C语言】常用字符串函数
  20. MEM/MBA数学基础(02)实数运算和性质

热门文章

  1. Windows中断那些事儿
  2. sprintf_s与_snprintf与_snprintf_s
  3. 解密多媒体封装解封装框架
  4. 人这辈子没法做太多的事情
  5. 总结DevExpress10个使用技巧
  6. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]41所有的侧信道分析都是能量分析吗
  7. vue devtools面板没有显示_vue 基础入门(四)
  8. java 默认排序方式_Java Collections.sort()实现List排序的默认方法和自定义方法
  9. 嵌入式linux 时间同步,解决嵌入式Linux中的时区问题
  10. js urlencode 20 php,js实现php函数urlencode