Python 和 Tesseract OCR 识别复杂验证码
- 安装依赖
首先,确保已安装所需的工具和库。
安装 Tesseract
在 Windows 上,下载安装包并进行安装:Tesseract GitHub。
在 Linux 上,你可以通过以下命令安装:
bash
sudo apt-get install tesseract-ocr
安装 Python 库
使用 pip 安装 Python 库:
bash
pip install pytesseract Pillow opencv-python numpy
2. 编写 Python 代码
python
import pytesseract
from PIL import Image
import cv2
import numpy as np
设置 Tesseract 路径(如果在 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)
# 高斯模糊去噪
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# 自适应阈值处理:把图像转换成黑白
binary_image = cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY, 11, 2)
# 使用形态学操作去除噪点:膨胀和腐蚀
kernel = np.ones((3, 3), np.uint8)
dilated_image = cv2.dilate(binary_image, kernel, iterations=1)
# 对图像进行轮廓检测,去除背景噪声
contours, _ = cv2.findContours(dilated_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 在图像上绘制轮廓,去除可能的干扰
clean_image = np.zeros_like(gray)
for contour in contours:
if cv2.contourArea(contour) > 500: # 过滤掉小面积的轮廓
cv2.drawContours(clean_image, [contour], -1, (255, 255, 255), -1)
return clean_image
def recognize_captcha(image_path):
# 预处理图像
processed_image = preprocess_image(image_path)
# 将处理后的图像保存为临时文件
temp_image_path = "processed_captcha.png"
cv2.imwrite(temp_image_path, processed_image)
# 使用 Tesseract 进行 OCR 识别
text = pytesseract.image_to_string(Image.open(temp_image_path))
return text.strip()
if name == 'main':
# 输入验证码图像路径
captcha_image_path = 'captcha_image.png'
# 识别验证码
captcha_text = recognize_captcha(captcha_image_path)
print("识别的验证码是:", captcha_text)
- 代码解释
- Tesseract 设置
如果你没有将 Tesseract 路径添加到环境变量中,可以通过以下方式设置其路径:
python
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
2. 图像预处理步骤
灰度化:首先将图像转为灰度图,减少颜色信息,专注于字符形状。
高斯模糊:使用高斯模糊平滑图像,去除一些细小的噪点。
自适应阈值:使用自适应阈值将图像转为黑白二值图,这有助于增强字符的对比度,去除背景干扰。
膨胀操作:通过膨胀操作增强字符的轮廓,使其更加清晰。
轮廓检测:通过轮廓检测来排除一些干扰元素,仅保留字符区域。通过过滤小面积的轮廓,去除不必要的干扰。
3. OCR 识别
图像处理后,我们将图像传给 Tesseract OCR 进行文字识别。pytesseract.image_to_string() 会返回识别的文本内容。
- 运行程序
准备好验证码图像(例如 captcha_image.png),然后运行代码。输出将显示识别出的验证码文本:
makefile
更多内容访问ttocr.com或联系1436423940
识别的验证码是: ab2c1
5. 优化与改进
进一步去噪:如果验证码图像仍然存在噪点,可以尝试使用中值滤波(cv2.medianBlur())或者更复杂的噪声去除方法。
字符分割:对于一些字符重叠或复杂的验证码,可以尝试更复杂的字符分割技术。可以使用轮廓检测或切割算法将每个字符分开,再逐个识别。
字形训练:如果验证码使用了非常规字体或干扰背景,考虑使用机器学习技术训练 Tesseract 或者结合深度学习模型来识别。
图像增强:尝试增强对比度或使用其他图像增强技术,以帮助 Tesseract 更好地识别验证码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异