mac使用Python识别验证码

    技术2022-08-17  87

    安装tesserocr

    brew install tesserocr

    因为pytesseract依赖于tesserocr所以首先需要先安装tesserocr这个软件。接下来就是安装python相关的包Python系列教程,免费获取,遇到bug及时反馈,讨论交流可加扣裙<60 61 15 02 7>

    安装python所需要的包

    pip3 install pytesseract pip3 install pillow

    安装pytesseract是ocr识别图片上的字,因为验证码的识别难度高低不同,所以在这个过程中需要对图片做一定的处理,这就需要使用处理图片的模块pillow。

    一个简单的demo 示例中的图片  

    需要用到的图像知识:

    对于彩色图像,不管其图像格式是PNG,还是BMP,或者JPG,在PIL中,使用Image模块的open()函数打开后,返回的图像对象的模式都是“RGB”。而对于灰度图像,不管其图像格式是PNG,还是BMP,或者JPG,打开后,其模式为“L”也就是我们说的灰度化的一个操作。除此之外,还有其他的模式,不过我们在处理验证码的时候是将其转为灰度模式,所以就不强调其他的模式了。

    模式“L”

    模式“L”为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。在PIL中,从模式“RGB”转换为“L”模式是按照下面的公式转换的:

    L = R * 299/1000 + G * 587/1000+ B * 114/1000

    通过灰度化之后的图片变为  

    灰度化我们还要对其进行二值化操作

    二值化操作

    二值化故名思议,就是整个图像所有像素只有两个值可以选择,一个是黑(灰度为0),一个是白(灰度为255)。二值化的好处就是将图片上的有用信息和无用信息区分开来,比如二值化之后的验证码图片,验证码像素为黑色,背景和干扰点为白色,这样后面对验证码像素处理的时候就会很方便。对于简单的图形验证码,到这里基本上就够了,但是如果有干扰线,还要进行除干扰线的操作。 对应的代码为  

    可以看到图片变得锐化了很多,这个时候再去识别就比较好识别了。

    去干扰线

    常见的4邻域、8邻域算法。所谓的X邻域算法,可以参考手机九宫格输入法,按键5为要判断的像素点,4邻域就是判断上下左右,8邻域就是判断周围8个像素点。如果这4或8个点中255的个数大于某个阈值则判断这个点为噪音,阈值可以根据实际情况修改。

    使用cv2处理

    除此之外还可以使用cv2模块进行处理。 安装

    pip install opencv-python

    代码示例

    Processed: 0.014, SQL: 9