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

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

时间:2025-01-20 18:32:22浏览次数:1  
标签:识别 Python image cv2 验证码 图像 Tesseract

验证码(CAPTCHA)是防止自动化程序(如爬虫、机器人的自动化脚本)的一种安全技术,通常通过图像显示扭曲的字母、数字或者符号,要求用户正确输入。这种技术在网络安全中起着重要作用,但我们也可以通过编程方式来自动化识别这些验证码。本文将通过 Python 和 Tesseract OCR(光学字符识别)技术来实现验证码的自动识别。

  1. 环境准备
    安装 Python 和必需的库
    首先,确保你已安装 Python。若未安装,请访问 Python 官方网站下载并安装。

接下来,使用 pip 安装所需的 Python 库:

pytesseract:Tesseract OCR 的 Python 接口。
Pillow:用于图像处理的 Python 库。
opencv-python:计算机视觉库,支持图像预处理。
在命令行中运行以下命令进行安装:

bash

pip install pytesseract pillow opencv-python
安装 Tesseract OCR
Tesseract 是我们识别验证码的核心工具。根据你的操作系统选择合适的安装方式:

Linux:
bash

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

brew install tesseract
Windows: 访问 Tesseract OCR GitHub 页面 下载适合的版本。安装后,确保将 Tesseract 的安装路径添加到系统环境变量中。
确认 Tesseract 是否安装成功:

bash

tesseract --version
2. 编写验证码识别程序
下面是 Python 代码示例,演示了如何加载验证码图像并使用 Tesseract OCR 进行识别:

python

import pytesseract
from PIL import Image, ImageOps
import cv2

设置 Tesseract 的路径(Windows 用户需要配置路径)

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

加载验证码图像

image_path = "captcha.png" # 替换为你自己的验证码图片路径
image = Image.open(image_path)

将图像转换为灰度图

gray_image = ImageOps.grayscale(image)

使用 OpenCV 进行图像预处理(二值化)

gray_cv_image = cv2.cvtColor(cv2.imread(image_path), cv2.COLOR_BGR2GRAY)
_, binary_image = cv2.threshold(gray_cv_image, 150, 255, cv2.THRESH_BINARY)

可选:保存处理后的图像

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

使用 Tesseract 进行 OCR 识别

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

打印识别的结果

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

使用 PIL(Pillow)库中的 Image.open() 方法加载验证码图像文件。
灰度化:

将图像转换为灰度图像,去除颜色干扰。ImageOps.grayscale() 用于实现这一操作。
二值化:

使用 OpenCV 进行二值化处理,通过设定阈值将图像转化为黑白两色,增强文字与背景的对比度。
OCR 识别
使用 pytesseract.image_to_string() 方法来提取图像中的文本。config="--psm 6" 参数指定页面分割模式(PSM),适用于图像中包含多行文本的情况,通常适用于验证码。
输出结果
最后,程序会打印出识别出的验证码文本。如果图像质量较高,Tesseract 的 OCR 识别通常会非常准确。
4. 运行代码
将代码保存为 captcha_recognition.py,并将验证码图片(例如 captcha.png)放置在相同目录下。然后,在命令行中运行以下命令:

bash

python captcha_recognition.py
运行程序后,输出识别的验证码内容,例如:

text

识别的验证码内容是:X2B9L
5. 示例演示
输入图像:
假设验证码图像 captcha.png 如下:

处理后的图像:
经过灰度化和二值化处理后的图像 processed_captcha.png,看起来应当为黑白图像,背景干净且字符突出。

输出结果:
text

识别的验证码内容是:X2B9L
6. 提高识别效果的技巧
如果程序未能准确识别验证码,可能是因为图像质量差或者验证码设计较为复杂。以下是一些常见的优化技巧:

  1. 优化图像预处理
    去噪声:对于含有噪声的验证码图像,可以通过高斯模糊来去除噪点,提升图像质量。

python

blurred_image = cv2.GaussianBlur(binary_image, (5, 5), 0)
自适应二值化:对于具有不均匀背景的验证码图像,可以使用自适应二值化方法。

python
更多内容访问ttocr.com或联系1436423940
binary_image = cv2.adaptiveThreshold(gray_cv_image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
2. 调整 Tesseract 配置
Tesseract 提供了多种页面分割模式(PSM),你可以根据验证码的类型选择最合适的模式。常见的配置包括:

--psm 6:适合多行文本。
--psm 7:适合单行文本(通常用于验证码)。
--psm 3:适合没有固定布局的文本。
3. 深度学习方法
对于更复杂的验证码(如噪声较大、字符扭曲等),基于深度学习的 OCR 模型通常效果更佳。例如,CRNN(卷积循环神经网络)或者其他深度学习框架,如 PaddleOCR 或 EasyOCR,都能处理更加复杂的验证码,并提供较高的识别率。

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

相关文章

  • 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.完整代码示例四、处理复杂验证码五、案例:识别古诗文网验证码六、总结验证码作为一种常见的安全手段,广泛应用于各种网站和应用中,以防止......
  • Python 列表推导和生成器表达式的区别点
    列表推导(ListComprehensions)和生成器表达式(GeneratorExpressions)在Python中有着相似的语法,但它们的行为和用途有所不同。以下是两者之间的主要区别:1.内存使用列表推导:创建一个完整的列表,所有元素都会被立即计算并存储在内存中。squares_list=[x**2forxinrange(1......
  • Python 实战-优化排班表节省成本
    1.基础概念:理解排班表排班表,顾名思义,就是安排员工工作时间的表格。在餐馆中,它通常需要考虑员工的可用性、工作时间限制、用餐高峰时段等因素。2.使用列表存储员工信息首先,我们需要一个数据结构来存储员工信息。Python中的列表是一个不错的选择。#员工信息列表,包括姓名、......