首页 > 编程语言 >使用 Python 和 Tesseract 进行验证码自动识别

使用 Python 和 Tesseract 进行验证码自动识别

时间:2025-01-20 19:01:52浏览次数:1  
标签:自动识别 OCR Python image cv2 验证码 图像 Tesseract

验证码(CAPTCHA)广泛用于防止自动化程序(例如爬虫)滥用网站。它通过呈现扭曲的字符、图形或其他复杂模式,要求用户确认自己是人类而非机器人。虽然它的目的是为了避免自动化工具进行操作,但我们可以使用 Python 和 Tesseract OCR 技术来自动化识别这些验证码。在这篇文章中,我们将讲解如何利用 Python 和 Tesseract 提取验证码中的文本。

  1. 环境设置
    安装 Python 和相关依赖库
    确保你的计算机上已安装 Python。如果尚未安装,请访问 Python 官方网站进行下载。

接下来,我们需要安装一些 Python 库:

pytesseract:一个 Python 包,用来调用 Tesseract OCR 引擎进行文本识别。
Pillow:图像处理库,用于加载、保存和处理图像。
opencv-python:计算机视觉库,用于处理图像,特别是在图像预处理方面。
使用以下命令安装这些库:

bash
更多内容访问ttocr.com或联系1436423940
pip install pytesseract pillow opencv-python
安装 Tesseract OCR
Tesseract 是一个开源 OCR 引擎,支持从图像中提取文本。你需要安装 Tesseract,根据不同的操作系统,安装方法如下:

Linux(使用 apt-get):

bash

sudo apt install tesseract-ocr
macOS(使用 Homebrew):

bash

brew install tesseract
Windows: 访问 Tesseract OCR GitHub 页面 下载 Windows 安装包,安装时将 Tesseract 的路径添加到环境变量中。

安装完成后,验证安装是否成功:

bash

tesseract --version
2. 编写验证码识别代码
接下来,我们将编写 Python 代码,利用 Tesseract OCR 引擎自动识别验证码。以下是一个简单的示例,展示了如何加载图像、进行预处理,并通过 Tesseract 提取验证码中的文本。

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'

加载验证码图像

image_path = "captcha_image.png" # 替换为你的验证码图片路径
image = cv2.imread(image_path)

转为灰度图像

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

去噪声,使用高斯模糊

blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)

使用自适应阈值进行二值化

binary_image = cv2.adaptiveThreshold(blurred_image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)

可选:保存处理后的图像

cv2.imwrite("processed_captcha.png", binary_image)

使用 Tesseract 进行 OCR 识别

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

输出识别的验证码内容

print(f"识别的验证码是:{text.strip()}")
3. 代码解析
图像加载与预处理
加载图像:

使用 OpenCV 的 cv2.imread() 方法加载验证码图像。
灰度化处理:

使用 cv2.cvtColor() 将图像转换为灰度图像。灰度化是图像预处理的常见步骤,可以减少色彩对图像分析的干扰。
去噪声:

使用高斯模糊(cv2.GaussianBlur())对图像进行去噪声处理。高斯模糊能够模糊图像中的噪声,保留字符的结构,从而提高 OCR 的准确性。
自适应阈值化:

使用 cv2.adaptiveThreshold() 方法对图像进行二值化处理。自适应阈值化会根据图像局部区域的灰度值来决定是否将该区域设置为黑色或白色,从而增强字符与背景的对比度。
使用 Tesseract 进行 OCR 识别
使用 pytesseract.image_to_string() 从处理过的图像中提取文本内容。config='--psm 6' 参数用于指定页面分割模式(Page Segmentation Mode),--psm 6 适合包含多行文本的图像。
输出识别结果
程序会输出识别到的验证码文本,例如:
text

识别的验证码是:H7G4Q
4. 运行程序
将上述代码保存为 captcha_recognition.py,并将验证码图像(例如 captcha_image.png)放在同一目录下。然后在命令行中运行:

bash

python captcha_recognition.py
程序会自动加载验证码图像,进行处理,并使用 Tesseract 提取其中的文本。输出结果类似于:

text

识别的验证码是:H7G4Q
5. 示例演示
假设你有一个如下所示的验证码图像 captcha_image.png:

处理后的图像将变得更加清晰,字符更容易识别。

输出结果:
text

识别的验证码是:H7G4Q
6. 提高识别效果
如果识别结果不准确,可能是因为图像质量较差或验证码较为复杂。以下是一些可以尝试的优化方法:

  1. 图像去噪
    验证码图像中常常有噪点,可以通过中值滤波或高斯模糊去除噪声,从而提升识别效果。

python

denoised_image = cv2.medianBlur(binary_image, 3)
2. 更高级的图像处理技术
自适应阈值化:前面已经提到的自适应阈值化方法,对于复杂背景的验证码图像非常有效。根据图像的局部信息进行二值化处理,能够适应不同亮度的区域。
形态学处理:通过膨胀和腐蚀操作,可以增强或抑制图像中的细节部分,从而使字符更为明显。
python

kernel = np.ones((3, 3), np.uint8)
processed_image = cv2.dilate(binary_image, kernel, iterations=1)
3. 调整 Tesseract 配置
Tesseract 提供了多种页面分割模式(PSM),不同的模式适用于不同类型的图像:

--psm 6:适用于包含多行文本的图像。
--psm 7:适用于只有一行文本的图像,常用于简单的验证码。
--psm 3:适用于无固定布局的文本图像。
可以根据验证码的具体情况选择合适的 PSM 配置。

  1. 使用深度学习模型
    对于非常复杂的验证码,传统的 OCR 方法可能效果不佳。此时可以尝试使用深度学习模型,如 CRNN(卷积循环神经网络)或其他深度学习框架(例如 EasyOCR 或 PaddleOCR),这些方法能够更好地处理复杂的背景、扭曲的字符和噪声。

标签:自动识别,OCR,Python,image,cv2,验证码,图像,Tesseract
From: https://www.cnblogs.com/ocr12/p/18682320

相关文章

  • 使用 Python 和 Tesseract 进行验证码识别
    验证码(CAPTCHA)是防止自动化程序(如爬虫、机器人的自动化脚本)的一种安全技术,通常通过图像显示扭曲的字母、数字或者符号,要求用户正确输入。这种技术在网络安全中起着重要作用,但我们也可以通过编程方式来自动化识别这些验证码。本文将通过Python和TesseractOCR(光学字符识别)技术来......
  • python的函数学习
    函数定义方式Python:defmy_function(param1,param2,keyword_param=None):returnparam1+param2+(keyword_paramifkeyword_paramisnotNoneelse0)Python使用def关键字来定义函数。参数类型不需要显式声明,Python是动态类型语言。C/C++:intmy_function(intp......
  • 使用Anthropic API的Python和TypeScript SDK快速入门
    在当今AI驱动的应用程序中,如何高效地调用强大的AI模型是开发人员面临的重要任务之一。Anthropic提供的Python和TypeScriptSDK,使得集成其AIAPI变得无比简单。无论你是通过AmazonBedrock还是GoogleCloudVertexAI进行开发,AnthropicSDK都为你提供了流畅的使用体验。技术......
  • 剑指offer面试题3:数组中重复的数字(Python实现)
    """面试题3:数组中重复的数字在一个长度为n的数组里所有数字都在0~n-1的范围内,某些数字是重复的,找出任意一个重复的数字"""defduplicate1(numbers:list,length:int)->int:"""修改原数组"""ifnumbers==[]orlength<=0:......
  • (2024最新毕设合集)基于SpringBoot的游乐园管理系统-69394|可做计算机毕业设计JAVA、PHP
    目录1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.1.1经济可行性2.1.2技术可行性2.1.3操作可行性2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添加信息流程2.2.5......
  • Python Playwright学习笔记(二)
    一、模拟手机playwright.devices可以配置模拟器。importasynciofromplaywright.async_apiimportasync_playwrightasyncdefrun(playwright):iphone_12=playwright.devices['iPhone12']browser=awaitplaywright.webkit.launch(headless=False)conte......
  • python import 思考二
    前言思考一中简单介绍了import导入模块时的检索机制然而在实际的导入时,我们经常会导入失败,尤其是在相对导入时。下面就绝对导入和相对导入时发生的一些问题进行记录和思考文件目录结构my_project/|--package1/| |--subpackage1/| | |--module2.py| |--module......
  • Python进阶:深入理解import机制与importlib的妙用
    目录一、Pythonimport机制概述1.1import语句的基本用法1.2模块缓存机制1.3导入搜索路径1.4导入钩子和查找器二、importlib的妙用2.1动态模块导入2.2使用importlib实现插件系统2.3重新加载模块三、总结在Python编程的世界里,import语句是开发者最常用的工......
  • Python识别处理验证码技术详解
    目录一、验证码的种类二、OCR技术简介三、使用OCR技术识别验证码1.安装所需库2.下载和处理验证码图片3.使用OCR进行识别4.完整代码示例四、处理复杂验证码五、案例:识别古诗文网验证码六、总结验证码作为一种常见的安全手段,广泛应用于各种网站和应用中,以防止......
  • 安全帽自动识别摄像机
    安全帽自动识别摄像机是一种结合了人脸识别技术和智能算法的设备,旨在监测工地、工厂等场所内员工是否佩戴安全帽,并及时提醒未佩戴安全帽的人员。这种摄像机可以有效提高工作场所的安全管理水平,减少意外事故的发生。安全帽自动识别摄像机通过高清晰度的摄像头捕捉到员工的特征,并......