用 Python 实现验证码文本识别

在本文中,我们将使用 Python 和 Tesseract OCR 引擎,编写一个程序来识别英文数字验证码的内容。通过图像处理技术和光学字符识别(OCR),我们可以快速提取验证码中的文本。

  1. 环境准备
    安装 Python 和依赖库
    确保已安装 Python。如果尚未安装,可以访问 Python 官网进行下载和安装。接着,我们需要安装以下依赖库:

pytesseract:Python 的 Tesseract OCR 接口。
Pillow:用于加载和处理图像。
opencv-python:用于图像预处理和分析。
通过以下命令安装这些依赖:

bash

pip install pytesseract pillow opencv-python
安装 Tesseract OCR
系统中还需要安装 Tesseract OCR 引擎。如果尚未安装,可以访问 Tesseract 官网获取安装方法,或者使用以下命令安装:

在 Linux 上:
bash

sudo apt install tesseract-ocr
在 macOS 上(通过 Homebrew):
bash

brew install tesseract
在 Windows 上:直接从 Tesseract 下载页面下载安装包并完成安装。
确保安装完成后可以通过以下命令验证:

bash

tesseract --version
2. 编写验证码识别程序
下面是一个完整的 Python 示例程序,用于识别验证码中的英文数字:

python

import pytesseract
from PIL import Image, ImageOps
import cv2

设置 Tesseract 的路径(Windows 用户需要指定安装路径)

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

1. 读取验证码图像

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

2. 转为灰度图像,减少颜色干扰

gray_image = ImageOps.grayscale(image)

3. 图像预处理(可选,增加识别率)

将灰度图转换为二值化图像

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)

4. 使用 Tesseract OCR 识别文本

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

输出识别结果

print(f"识别的验证码是: {text}")
3. 关键步骤解析
图像加载与处理
使用 Pillow 加载图像并将其转换为灰度图,可以减少颜色干扰,使文本特征更加突出。
通过 OpenCV 的 cv2.threshold 函数,将图像二值化以去除背景杂质,从而提高识别准确性。
OCR 配置
pytesseract.image_to_string 方法用于从图像中提取文本。
--psm 参数(页面分割模式)影响识别方式:
6 表示按单行模式识别(适用于验证码)。
4. 运行程序更多内容访问ttocr.com或联系1436423940
将上述代码保存为 captcha_recognition.py 文件,并确保目标验证码图片(如 captcha.png)与程序在同一目录下。然后运行程序:

bash

python captcha_recognition.py
程序会加载图像、进行处理,并使用 Tesseract 识别出验证码文本。

  1. 示例输入与输出
    输入:
    原始验证码图像 captcha.png

输出:
识别的验证码是:ABC123

posted @   ttocr、com  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示