在Python中使用tesseract识别验证码

"\u003Cdiv\u003E\u003Ch1\u003E\u003Cstrong\u003E前言\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp class=\"ql-align-justify\"\u003E在对网站数据进行爬取的过程中,由于访问过于频繁或是其他的原因,经常会出现输入验证码进行验证的情况,面对这种验证码验证的问题,一般有三种解决方法:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E第一种,最简单也是最费时的,手动输入验证码;\u003C\u002Fli\u003E\u003Cli class=\"ql-align-justify\"\u003E第二种,使用一些公司的API接口对验证码进行判别和输入;\u003C\u002Fli\u003E\u003Cli\u003E\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cli class=\"ql-align-justify\"\u003E第三种,使用tessract对验证码进行识别;\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp class=\"ql-align-justify\"\u003E在这里,我们使用tessract对验证码进行识别。\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cstrong\u003ETesseract简介\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp class=\"ql-align-justify\"\u003Etesseract是谷歌开源的一个ORC组件,并支持语言的训练,支持中文的识别(需要下载语言包)\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cstrong\u003EPython中使用Tesseract\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp class=\"ql-align-justify\"\u003E在Python中安装Tesseract一共分为三步:\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E1、pip安装pytesseract及其他依赖库\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Epip pytesseract\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp class=\"ql-align-justify\"\u003E在使用pytesseract中需要读取图像,所以还需要安装Pillow\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E2、安装tesseract\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E下载并安装:https:\u002F\u002Ftesseract-ocr.googlecode.com\u002Ffiles\u002Ftesseract-ocr-setup-3.02.02.exe\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E3、修改tesseract.py文件\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E防止提示没有匹配的文件\u003C\u002Fp\u003E\u003Cpre\u003E# tesseract_cmd = 'tesseract'\u003Cbr\u003Etesseract_cmd = \"C:\u002FProgram Files (x86)\u002FTesseract-OCR\u002Ftesseract.exe\" # tesseract的安装目录\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp class=\"ql-align-justify\"\u003E防止提示Unicode编码错误\u003C\u002Fp\u003E\u003Cpre\u003E# f = open(output_file_name)\u003Cbr\u003Ef = open(output_file_name,encoding='utf-8')\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp class=\"ql-align-justify\"\u003E做完这三步,就可以使用tesseract基本的功能了。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E下面来看看在实际的代码中如何利用tesseract进行验证码识别:\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E原始的验证码图像为:\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002Fa6b7ea6449444a81b11f383c14b64c62\" img_width=\"500\" img_height=\"291\" alt=\"在Python中使用tesseract识别验证码\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E示例验证码为:\u003C\u002Fp\u003E\u003Cpre\u003E#coding:utf-8\u003Cbr\u003E'''\u003Cbr\u003E 验证码识别\u003Cbr\u003E'''\u003Cbr\u003Efrom PIL import Image,ImageFilter,ImageEnhance\u003Cbr\u003Eimport pytesseract\u003Cbr\u003E# 二值化\u003Cbr\u003Ethreshold = 140\u003Cbr\u003Etable = []\u003Cbr\u003Efor i in range(256):\u003Cbr\u003E if i < threshold:\u003Cbr\u003E table.append(0)\u003Cbr\u003E else:\u003Cbr\u003E table.append(1)\u003Cbr\u003E# 识别验证码\u003Cbr\u003Edef get_vcode():\u003Cbr\u003E # 打开原始图像\u003Cbr\u003E image = Image.open(\"getimgbysig.jpg\")\u003Cbr\u003E # image = Image.open(\"e:\u002Fa.jpg\")\u003Cbr\u003E # 将图像转为灰度,并另存为\u003Cbr\u003E bimage = image.convert('L')\u003Cbr\u003E bimage.save('g'+\"getimgbysig.jpg\")\u003Cbr\u003E # 进行二值化处理,并另存为\u003Cbr\u003E out = bimage.point(table,'1')\u003Cbr\u003E out.save('b'+\"getimgbysig.jpg\")\u003Cbr\u003E icode = pytesseract.image_to_string(image)\u003Cbr\u003E bcode = pytesseract.image_to_string(bimage)\u003Cbr\u003E vcode = pytesseract.image_to_string(out)\u003Cbr\u003E print(icode,bcode,vcode)\u003Cbr\u003Eif __name__ == '__main__':\u003Cbr\u003E get_vcode()\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp class=\"ql-align-justify\"\u003E结果输出为:7364,说明识别成功了。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E对于简单、清晰的数字,没有经过任何训练的Tesseract还是能够很精确地识别出来。而对于那些模糊、变形的数字、字母或是中文,就需要先对Tesseract进行训练了,暂且不表。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E觉得文章不错或者对你有用,可以关注小编,后面持续更新更多精彩内容哟~\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002F15a1f6248e754d62ac3514cdd50e829b\" img_width=\"533\" img_height=\"300\" alt=\"在Python中使用tesseract识别验证码\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E"
发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();