一、项目简介
在日常开发中,我们经常遇到带干扰线、背景噪声或扭曲字符的验证码。本文通过 Python 构建一个简单的验证码识别系统,结合图像预处理(OpenCV)和 OCR(Tesseract),实现对图片验证码的高效识别。
更多内容访问ttocr.com或联系1436423940
二、使用技术
技术组件 说明
Python 主开发语言
OpenCV 图像处理库
pytesseract Python 调用 Tesseract OCR 引擎
Pillow 辅助图像加载与保存
三、环境准备
- 安装依赖
pip install opencv-python pillow pytesseract
2. 安装 Tesseract-OCR
Windows:下载地址
macOS:
brew install tesseract
Ubuntu:
sudo apt install tesseract-ocr
四、项目结构
captcha_solver/
│
├── preprocess.py # 图像预处理模块
├── recognize.py # 识别主程序
├── test_images/
│ └── test1.png # 测试验证码图片
五、图像预处理模块 preprocess.py
import cv2
import numpy as np
def preprocess_image(input_path, output_path):
image = cv2.imread(input_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)# 去除噪声
denoised = cv2.medianBlur(thresh, 3)# 形态学操作(可选)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))
morph = cv2.morphologyEx(denoised, cv2.MORPH_CLOSE, kernel)# 反色(适配Tesseract默认识别)
result = cv2.bitwise_not(morph)cv2.imwrite(output_path, result)
六、识别主程序 recognize.py
from PIL import Image
import pytesseract
from preprocess import preprocess_image
可选:指定Tesseract路径(Windows用户)
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
def recognize_captcha(image_path):
processed_path = 'processed.png'
preprocess_image(image_path, processed_path)
image = Image.open(processed_path)
text = pytesseract.image_to_string(image, config='--psm 8 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')return text.strip()
if name == "main":
result = recognize_captcha('test_images/test1.png')
print("识别结果:", result)
七、运行效果
python recognize.py
输出示例:
识别结果: H5K9