在开发爬虫时,会遇到验证码识别,在网站中加入验证码的目的是加强用户安全性和提高反爬虫机制。
验证码类型:字符验证码,图片验证码,gif动图验证码,极验验证码(拖动滑块完成拼图),手机验证码,视频验证码等。
识别验证码的三种方案:
1,人工识别,但这过分依赖人为控制,难以实现批量爬取
2,python调用OCR引擎识别验证码。但正常情况下,OCR准确率低,需要机器学习不断提高OCR准确率,开发成本相对较高。
3,调用API使用第三方平台识别验证码,但每次需要支付一定费用。

下面将介绍OCR技术
OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题。

在python中,支持OCR的模块有pytesser3和pyocr,通过模块调用OCR引擎识别图片,OCR引擎再将识别结果返回到程序中。
安装方法:

pip install pyocr
pip install Pillow   处理图片的模块

OCR引擎安装:
图像识别主要是OCR引擎完成,pyocr只起到一个调用引擎的作用。
安装教程 如果不是做英文的图文识别,还需要下载其他语言的识别包

代码如下:

from PIL import Image
from pyocr import tesseract
#使用PIL打开图片
im = Image.open("fig5.PNG")
code = tesseract.image_to_string(im,lang = "chi_sim")
print(code)

识别结果为:

tesseract验证码识别 验证码ocr识别_验证码


fig5.PNG如下图:

tesseract验证码识别 验证码ocr识别_OCR技术_02


tesseract验证码识别 验证码ocr识别_OCR技术_03


识别结果为:

tesseract验证码识别 验证码ocr识别_OCR技术_04

tesseract验证码识别 验证码ocr识别_OCR技术_05

tesseract验证码识别 验证码ocr识别_Image_06

tesseract验证码识别 验证码ocr识别_OCR技术_07


tesseract验证码识别 验证码ocr识别_tesseract验证码识别_08

以下两张图片识别不出来

tesseract验证码识别 验证码ocr识别_Image_09

tesseract验证码识别 验证码ocr识别_tesseract验证码识别_10

在实际使用中,验证码可能带有颜色的背景,,这时可以对图片进行简单的处理,去掉干扰因素,

im = im.convert(“L”) #图片转换为灰度图像,形成黑->灰->白 的过渡,如图黑色照片