简单的验证码识别(PIL+pytesseract+request)
最近打算学django框架,一些好玩的东西就放在周末玩玩。所以更这种小工具之类的好玩的东西就延后点啦(つ´ω`)つ。最近尝试做了一个超级简单的验证码识别。
首先呢,要安装一个很重要的工具,tesseract(安装过程),然后安装pytesseract库,在cmd中输入pip install pytesseract
即可,不建议安装tesserocr库,windows系统不太兼容,本人之前安装过一次tesserocr库,不仅有点小麻烦(其实也不是多麻烦,只是无法直接pip install tesserocr
安装该库,要去官网下载whl文件,然后再在cmd中安装),主要是只要import后运行就报错UnicodeError
(╯‵□′)╯︵┻━┻,在网上也没找到什么解决方法,这里就放弃使用tesserocr库了。
在安装pytesseract之后,我们就可以开始尝试啦。
之前登陆学校教务系统的时候就觉得学校的验证码简单,应该很容易识别。于是打算用教务系统练练手(´・ω・`)
不多说,上代码…
纳尼,我代码呢?(*´・д・)?
代码,,,代码被我删了(因为是几天做的,当时没有写博客。)
真是个坏习惯。(๑´ㅁ`)ゞ
这里简单的说下思路吧。
敲重点了!
自己找个网站,按F12查看验证码的src="xxxx"中的内容,复制后加在网站的后面,为了便于查看每次识别的二维码图片和识别结果是否相同,下载图片。(纳尼,你不会下载图片?那我就勉为其难的告诉你下载图片吧),使用pytesseract.image_to_string(image)方法,直接将图片的下载路径传到image中。最后直接print就可以啦
这是之前做完代码后的结果:
正确率 还可以?????(可以尼玛,识别都能识别歪来,不是len啊(╬゚ ◣ ゚),本来就是一个库?哦,那没事了。)
想提高识别率嘛?(`・ω・´)
最简单的方法嘛,用PIL或者opencv库对图片进行去噪,灰度和二值化处理后,会增加识别率,尤其是那种比较难的验证码,噪点比较多,颜色也多,容易对识别结果造成影响。
其他的方法就是对这个库进行训练,可以提高识别率,不过具体的训练方法本人还在摸索。