验证码识别是一个常见的自动化需求,广泛应用于数据抓取、自动登录等场景。本文将介绍如何使用 Python 和 pytesseract(一种 Tesseract OCR 的封装库)实现英文数字验证码的自动化识别。
- 环境准备
安装 Tesseract OCR
Tesseract 是一个开源的光学字符识别(OCR)引擎,可识别多种语言和字符。首先,需要在系统中安装 Tesseract:
Windows 用户:从 Tesseract 官方 GitHub 下载并安装。
Linux 用户:运行以下命令安装:
bash
更多内容访问ttocr.com或联系1436423940
sudo apt install tesseract-ocr
macOS 用户:通过 Homebrew 安装:
bash
brew install tesseract
安装完成后,在终端中运行以下命令,验证安装是否成功:
bash
tesseract --version
安装 Python 和所需库
确保系统中已安装 Python(推荐版本 3.7 或以上)。然后安装必要的依赖库:
bash
pip install pytesseract pillow
2. 编写验证码识别代码
以下是完整的 Python 代码示例,用于加载验证码图像并识别其内容:
python
from PIL import Image
import pytesseract
设置 Tesseract 的路径(如果需要)
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
def recognize_captcha(image_path):
try:
# 打开图像
img = Image.open(image_path)
# 使用 Tesseract OCR 识别文字
text = pytesseract.image_to_string(img, lang='eng')
return text.strip()
except Exception as e:
return f"识别失败: {e}"
验证码图像路径
captcha_image = "captcha.png"
执行识别
result = recognize_captcha(captcha_image)
print(f"识别的验证码是: {result}")
3. 图像预处理
为了提高识别准确率,可以在调用 OCR 前对图像进行处理,例如灰度化、二值化或降噪。以下代码演示了如何使用 Pillow 库进行图像预处理:
灰度化和二值化
python
from PIL import Image
def preprocess_image(input_path, output_path):
# 打开图像
img = Image.open(input_path)
# 转换为灰度图像
gray = img.convert('L')
# 二值化(设定阈值为128)
binary = gray.point(lambda x: 0 if x < 128 else 255, '1')
# 保存处理后的图像
binary.save(output_path)
原始图像路径和处理后图像路径
input_image = "captcha.png"
processed_image = "processed_captcha.png"
preprocess_image(input_image, processed_image)
print(f"图像预处理完成,保存为 {processed_image}")
将预处理后的图像传递给 OCR 识别函数:
python
result = recognize_captcha(processed_image)
print(f"识别的验证码是: {result}")
4. 优化识别效果
调整 OCR 参数
可以通过设置 Tesseract 的 config 参数来优化识别。例如,只识别数字和字母:
python
text = pytesseract.image_to_string(img, config='--psm 6 -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ')
降噪处理
对于噪点较多的验证码图像,可以尝试使用滤波器去除噪点,例如:
python
from PIL import ImageFilter
def denoise_image(image_path, output_path):
img = Image.open(image_path)
filtered_img = img.filter(ImageFilter.MedianFilter(size=3))
filtered_img.save(output_path)
denoise_image("captcha.png", "denoised_captcha.png")
自定义训练
如果验证码字体特殊,可以为 Tesseract 创建自定义的训练数据,从而显著提高识别准确率。
5. 运行代码
将上述代码保存为 captcha_recognition.py,并将验证码图像保存为 captcha.png。在终端运行以下命令:
bash
python captcha_recognition.py
程序会加载图像,进行预处理并识别,输出类似以下的结果:
makefile
识别的验证码是: A12B3C
标签:Python,image,验证码,captcha,pytesseract,图像,path,识别 From: https://www.cnblogs.com/ocr12/p/18688477