首页 > 编程语言 >Python 自动识别验证码的详细指南

Python 自动识别验证码的详细指南

时间:2025-01-17 19:34:11浏览次数:1  
标签:自动识别 OCR Python image 验证码 识别 图像 Tesseract

验证码(CAPTCHA)广泛应用于在线表单和注册页面,旨在防止自动化攻击。尽管验证码设计旨在增加机器识别的难度,但借助光学字符识别(OCR)技术,我们仍然可以实现自动化的验证码识别。在本教程中,我们将使用 Python 编写一个简单的验证码识别程序,利用 Tesseract OCR 引擎结合图像预处理技术提高识别准确度。

  1. 环境配置
    安装 Python 和所需库
    确保你已安装 Python,如果尚未安装,请访问 Python 官方网站下载并安装。

接下来,我们需要安装一些必备的 Python 库:

pytesseract:一个 Python 包,可以调用 Tesseract OCR 引擎。
Pillow:用于图像处理的 Python 库。
opencv-python:用于图像的读取、预处理和分析。
可以使用 pip 来安装这些库:

bash
更多内容访问ttocr.com或联系1436423940
pip install pytesseract pillow opencv-python
安装 Tesseract OCR 引擎
Tesseract 是一个强大的开源 OCR 引擎,能够识别图像中的文本。在使用前需要安装它:

Linux:运行以下命令安装 Tesseract:
bash

sudo apt-get install tesseract-ocr
macOS:可以通过 Homebrew 安装:
bash

brew install tesseract
Windows:从 Tesseract GitHub 页面下载最新版本,并根据指导完成安装。
安装完成后,你可以在命令行中运行以下命令来确认是否成功安装:

bash

tesseract --version
2. 编写验证码识别程序
下面是一个使用 Python 和 Tesseract OCR 识别验证码的示例代码。我们将首先加载验证码图片,进行图像处理(如灰度化和二值化),然后使用 Tesseract 进行字符识别。

python

import pytesseract
from PIL import Image, ImageOps
import cv2

设置 Tesseract 路径(Windows 用户需根据安装路径调整)

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

加载验证码图片

image_path = "captcha_example.png"
image = Image.open(image_path)

将图像转为灰度图像

gray_image = ImageOps.grayscale(image)

使用 OpenCV 对图像进行二值化处理

gray_cv_image = cv2.cvtColor(cv2.imread(image_path), cv2.COLOR_BGR2GRAY)
_, binary_image = cv2.threshold(gray_cv_image, 128, 255, cv2.THRESH_BINARY)

可选:保存处理后的图像

cv2.imwrite("processed_captcha.png", binary_image)

使用 Tesseract OCR 识别图像中的文本

recognized_text = pytesseract.image_to_string(binary_image, config="--psm 6")

输出识别结果

print(f"识别的验证码内容是:{recognized_text.strip()}")
3. 代码解析
图像加载与预处理
加载图像:使用 Pillow 加载图像并将其转为灰度图像。灰度图像会去掉颜色干扰,增强文本的对比度。
二值化处理:使用 OpenCV 对图像进行二值化处理,将图像转换为黑白图像,进一步增强文字部分的清晰度,去除背景噪声。
OCR 识别
使用 pytesseract.image_to_string 方法从处理后的图像中提取文本。
配置参数 --psm 6 表示将图像视为单行文本,这对于大部分验证码来说效果较好。
保存处理后的图像
cv2.imwrite 将二值化后的图像保存为 processed_captcha.png,这可以帮助你查看图像处理的效果。
4. 运行程序
将代码保存为 captcha_solver.py 文件,并确保你的验证码图片(例如 captcha_example.png)与代码文件位于同一目录下。然后,运行程序:

bash

python captcha_solver.py
程序将会加载图像、进行预处理,并输出识别的验证码内容。例如:

text

识别的验证码内容是:3F9X7
5. 示例演示
输入图像:
验证码图片 captcha_example.png

处理后图像:
二值化后的图像 processed_captcha.png

输出结果:
text

识别的验证码内容是:6J7M2
6. 提高识别率的技巧
如果初始识别结果不理想,可以尝试以下几种方法来提高准确度:

图像预处理优化:

去噪声:使用滤波器(如高斯模糊)去除噪点。
形态学操作:使用膨胀、腐蚀等操作去除干扰元素。
调整阈值:尝试不同的二值化阈值(如 cv2.threshold 的第一个参数)来获取更清晰的文本。
调整 Tesseract 参数:

修改 PSM 模式:不同的 PSM(页面分割模式)可能会影响识别效果。例如:
--psm 7:假设图像包含单行文本。
--psm 8:逐字处理文本。
调整 OCR 配置:使用 config 参数进一步微调 Tesseract 的行为。
训练 Tesseract:

如果验证码使用自定义字体或特殊的图像样式,可以通过训练 Tesseract 来提升识别准确度。

标签:自动识别,OCR,Python,image,验证码,识别,图像,Tesseract
From: https://www.cnblogs.com/ocr12/p/18677556

相关文章

  • Python 实现简单的验证码识别
    验证码是一种常见的验证机制,用来区分用户是人还是程序。在本教程中,我们将使用Python编写一个程序,通过图像处理和OCR技术自动识别英文数字组合的验证码。以下将逐步介绍如何实现这一功能。环境准备安装Python和必要库首先,确保已安装Python。如果未安装,可以前往Python......
  • 【Python】Selenium根据网页页面长度,模拟向下滚动鼠标,直到网页底部的操作
    最近在弄selenium的爬取的过程中,我发现一些网站上的表格,是需要手动拉到底部才能加载完成的。如果没有拉到底部,那么在获取网页表格的时候,表格就会只有显示的一部分,页面就不完整。所以我就整理了一些模拟滚动鼠标,加载到页面底部的方法。用于处理这个问题~以下是几种常见的......
  • The Zen of Python (Python 之禅)
    在交互式解释器中输入importthis就会显示TimPeters的TheZenofPython1>>>importthis2TheZenofPython,byTimPeters34Beautifulisbetterthanugly.5Explicitisbetterthanimplicit.6Simpleisbetterthancomplex.7Complexisbetterthancom......
  • python 股票数据接口 python如何获取股票交易数据
    python股票数据接口python如何获取股票交易数据 转载风华绝代的java2023-08-0521:48:47文章标签python股票数据接口python数据库c#sqlH5文章分类Python后端开发阅读数387有备考软考的小伙伴,想积分落户,单位评职称?科目太多不知道怎么选?考试考点难点太多没有头绪?刚准......
  • 超高频算法——双指针思想的领悟 python
    目录问题引入1解决方案牛刀小试问题引入2解决方案举一反三实战演练(双指针)问题引入3Whatis滑动窗口关键要素实战演练(滑动窗口)总结问题引入1给你一个数组(按非递减顺序排列),假定为【2,4,5,6,7,9】请你在数组中找到两个数满足:相加等于10,返回它们的值。你是一个不知道双......
  • 初学者如何用 Python 写第一个爬虫?
    ......
  • 【Python】深入探讨Python中的单例模式:元类与装饰器实现方式分析与代码示例
    《PythonOpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界单例模式(SingletonPattern)是一种常见的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Python中,实现单例模式的方式多种多样,包括......
  • Python魔法方法深度解析:解密 __call__、__new__ 和 __del__
    《PythonOpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界在Python中,魔法方法(MagicMethods)是一些特殊的方法,它们允许开发者定制对象的行为。这些方法前后由双下划线包围,如__init__、__str__、__call_......
  • 【金融资产组合模型进化论】4.1 对MPT+Fama-French五因子优化方案实现Backtrader量化
    目录0.承前1.汇总代码2.近4年量化回测2.1获取近4年资产组合数据2.2对近4年资产组合数据进行量化回测3.启后3.1待优化点0.承前本篇博文是对文章,链接:【金融资产组合模型进化论】4.马科维茨资产组合模型+Fama-French五因子优化方案(理论+Python实战)实现量......
  • 【华为OD-E卷 - 最大花费金额 100分(python、java、c++、js、c)】
    【华为OD-E卷-最大花费金额100分(python、java、c++、js、c)】题目双十一众多商品进行打折销售,小明想购买自己心仪的一些物品,但由于受购买资金限制,所以他决定从众多心仪商品中购买三件,而且想尽可能的花完资金。现在请你设计一个程序帮助小明计算尽可能花费的最大资金数......