当前位置: 首页 > 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.wxhsa.cn/company.asp?id=2898

相关文章:

  • Java 和 Tesseract 实现验证码识别
  • 基于 Weiler–Atherton 算法的 IoU 求解
  • Selenium应用中的核心JavaScript操作技巧
  • 25.9.13 字符编码标准
  • 哭了,散了,明白了
  • 用 Java 和 Tesseract 实现验证码识别
  • Microsoft-Activation-Scripts,好用,记录一下。
  • 双重map 的赋值初始化
  • 0voice-1.4.1
  • 9.13 模拟赛 T3
  • Docker应用 - FileBrowser
  • AI踩坑之Nlog使用
  • 论文解读-《OpenGSL A Comprehensive Benchmark for Graph Structure Learning》 - zhang
  • Cmake介绍
  • Git 生成 ssh key
  • 基础篇:消息队列理论部分,另一种环境搭建Docker运行RabbitMQ
  • 项目案例作业1:学生信息管理系统(面向对象初步接触)
  • P1097 合唱队形
  • 一生一芯学习:pa2.1 RTFM
  • Linux网络:初识网络 - 详解
  • 20250909比赛总结
  • 又寸入生白勺司烤
  • Ubuntu 安装 GIPM
  • 手动下载vscode扩展的方法
  • GAS_Aura-Aura Projectile
  • CF1583F Defender of Childhood Dreams
  • scrollArea无法滚动
  • 时间序列分析(1)
  • 一行代码没写,做了一个小程序
  • 【置顶】欢迎来到 ziyaojia 的主页