当前位置: 首页 > news >正文

Python 和 Tesseract 实现验证码识别

验证码(CAPTCHA)是防止恶意机器人自动提交表单或执行其他操作的一种有效手段。然而,在一些应用场景下,我们可能需要自动化地识别验证码。本文将介绍如何使用 Python 编程语言和 Tesseract OCR 引擎来实现验证码识别。

环境准备
安装 Tesseract OCR
首先,你需要在你的计算机上安装 Tesseract OCR 引擎。Tesseract 是一个开源的 OCR 引擎,广泛用于图像文字识别。安装方法如下:
更多内容访问ttocr.com或联系1436423940
Windows:可以从 Tesseract 官方 GitHub 下载 Windows 安装包,安装时选择添加到环境变量。
Linux:使用以下命令安装:
bash
更多内容访问ttocr.com或联系1436423940
sudo apt-get install tesseract-ocr
macOS:使用 Homebrew 安装:
bash
brew install tesseract
安装完成后,可以在命令行中检查 Tesseract 是否正确安装:

bash

tesseract --version
安装 Python 和依赖库
确保你已经安装了 Python 环境。如果还没有安装,可以从 Python 官网 下载并安装。

然后,使用 pip 安装相关的 Python 库:

bash

pip install pytesseract Pillow opencv-python
pytesseract 是 Tesseract 的 Python 包接口。
Pillow 是 Python 的图像处理库,支持常见的图像格式。
opencv-python 是 OpenCV 的 Python 接口,常用于图像处理。
2. 编写验证码识别代码
以下是一个简单的 Python 程序,展示了如何使用 Tesseract OCR 引擎来识别验证码。程序使用了 pytesseract 和 Pillow 来加载并处理图像。

python

import pytesseract
from PIL import Image
import cv2
import numpy as np

配置 Tesseract OCR 的安装路径(Windows 环境需要设置)
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 根据实际路径修改

def preprocess_image(image_path):

读取图像

img = cv2.imread(image_path)

转换为灰度图

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

二值化处理:使用 Otsu 算法自动计算阈值

_, binarized_img = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

return binarized_img
def recognize_captcha(image_path):

预处理图像

processed_image = preprocess_image(image_path)

保存预处理后的图像(如果需要调试)

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

使用 Tesseract 进行 OCR 识别

text = pytesseract.image_to_string(processed_image)

return text.strip()
if name == "main":

输入验证码图像路径

captcha_image_path = 'captcha.png'

识别验证码

recognized_text = recognize_captcha(captcha_image_path)

print(f"识别的验证码是: {recognized_text}")
图像预处理
为了提高 OCR 识别的准确性,通常需要对图像进行预处理,尤其是验证码类图像。以下是常见的图像预处理方法:

灰度化:
将彩色图像转换为灰度图像,这样可以去除颜色的干扰,使得文本部分更加突出。

二值化:
将灰度图像转换为黑白图像,通过对比度增强来使字符与背景之间的区分更清晰。OpenCV 提供了多种二值化方法,如 Otsu 阈值化。

去噪:
使用滤波算法去除图像中的噪声,保证字符的边缘清晰。可以使用中值滤波或高斯滤波来减少噪点。

在上述代码中,我们首先将图像转换为灰度图,然后使用 Otsu 算法进行二值化。

python

使用 Otsu 算法自动选择阈值
_, binarized_img = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
4. 提高识别准确率
Tesseract 是一个强大的 OCR 引擎,但在某些复杂的验证码中,识别结果可能并不理想。以下是一些常见的优化方法:

使用字符白名单:
如果验证码只包含数字或字母,可以设置字符白名单,限制 Tesseract 只识别特定字符,从而提高识别准确度。
python

custom_config = r'--oem 3 --psm 6 -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
text = pytesseract.image_to_string(processed_image, config=custom_config)
--oem 3 表示使用默认的 OCR 引擎模式。
--psm 6 表示适用于单一文本行的页面分割模式。
tessedit_char_whitelist 用于设置字符白名单。
2. 调整 OCR 配置:
Tesseract 提供了多个参数可以配置 OCR 引擎的行为。你可以通过 --psm 设置不同的页面分割模式,或者通过 --oem 调整 OCR 引擎的模式。常用的 psm 模式包括:

psm 3:默认模式,适用于普通文本。
psm 6:适用于单行文本。
psm 11:适用于稀疏文本。
你可以根据验证码的特点选择合适的 psm 模式。

使用图像分割:
对于一些复杂的验证码,可以将图像分割成多个小图像,每个小图像只包含一个字符,然后分别对每个字符进行 OCR 识别,最后合并结果。你可以使用 OpenCV 或 Pillow 来识别字符的边界并切割图像。

去噪和清晰化:
如果验证码的背景噪声很大,可以使用更强的去噪算法(如中值滤波或高斯滤波)来处理图像,进一步提升识别精度。

python

高斯模糊去噪
denoised_img = cv2.GaussianBlur(processed_image, (5, 5), 0)
5. 运行程序
保存代码为 captcha_recognition.py,并确保你已经安装了相关的 Python 库。将验证码图像(例如 captcha.png)放在项目目录中。然后,运行以下命令:

bash

python captcha_recognition.py
如果一切正常,程序会输出类似以下内容:

makefile

识别的验证码是: X9D2A

http://www.sczhlp.com/news/13386/

相关文章:

  • a
  • 题解:AT_agc070_b [AGC070B] Odd Namori
  • 实用指南:【入门级-C++程序设计:13、STL 模板:栈(stack)、队 列(queue)、 链 表(list)、 向 量(vector) 等容器】
  • AMD Ryzen AI Max+ 395四机并联:大语言模型集群推理深度测试
  • 状压DP-Hamilton问题
  • 用 Kotlin 和 Tesseract OCR 实现验证码识别
  • 在K8S中,网络模型有哪些?
  • 把数学对象画出来:Manim Mobject类库速查手册
  • (倍增优化dp)[NOIP2012 提高组] 开车旅行
  • 在K8S中,CNI模型有哪些?
  • 基于 Vue2+Quill 的富文本编辑器全方案:能力实现与样式优化
  • 5.5 with管理上下文
  • 在K8S中,网络策略有哪些?
  • 图片预览轮播组件-配置详解
  • 个位数统计
  • 在K8S中,网络策略原理是什么?
  • 中国计算机专家
  • 混合红队与蓝队训练实验室搭建指南
  • Java 中常用注解
  • 2025河南萌新赛第四场vp记录
  • 在K8S中,Calico 网络组件实现原理?
  • 在K8S中,flannel的作用?
  • 在K8S中,共享存储的作用?
  • 第三十九天(8.14) 方法重写(重载)
  • [Cursor] Notepads
  • [Cursor] 其它细节
  • Github Notes - 一个为GitHub仓库添加私人备注的浏览器扩展
  • [Tools] AI编码工具综合指南
  • MD5加密基本语法
  • 5.4 文件的三种打开方式