Python 和 Tesseract OCR 识别复杂验证码

news/2025/1/13 22:37:29/文章来源:https://www.cnblogs.com/ocr12/p/18669560

  1. 安装依赖
    首先,确保已安装所需的工具和库。

安装 Tesseract
在 Windows 上,下载安装包并进行安装:Tesseract GitHub。
在 Linux 上,你可以通过以下命令安装:

bash

更多内容访问ttocr.com或联系1436423940

sudo apt-get install tesseract-ocr

安装 Python 库
使用 pip 安装 Python 库:

bash

pip install pytesseract Pillow opencv-python numpy

  1. 编写 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)

  1. 代码解释
  2. Tesseract 设置
    如果你没有将 Tesseract 路径添加到环境变量中,可以通过以下方式设置其路径:

python

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

  1. 图像预处理步骤
    灰度化:首先将图像转为灰度图,减少颜色信息,专注于字符形状。
    高斯模糊:使用高斯模糊平滑图像,去除一些细小的噪点。
    自适应阈值:使用自适应阈值将图像转为黑白二值图,这有助于增强字符的对比度,去除背景干扰。
    膨胀操作:通过膨胀操作增强字符的轮廓,使其更加清晰。
    轮廓检测:通过轮廓检测来排除一些干扰元素,仅保留字符区域。通过过滤小面积的轮廓,去除不必要的干扰。

  2. OCR 识别
    图像处理后,我们将图像传给 Tesseract OCR 进行文字识别。pytesseract.image_to_string() 会返回识别的文本内容。

  3. 运行程序
    准备好验证码图像(例如 captcha_image.png),然后运行代码。输出将显示识别出的验证码文本:

makefile

识别的验证码是: ab2c1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/868744.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

股票异动拉升中间过程状态分析和检测算法

一.股票异动拉升中间过程状态分析和检测算法将股票分为:空闲,开始,持续,快停,涨停五种状态:可以勾选的方式来筛选处于五种状态的股票,更加精准的找出开始拉升,持续拉升,快要涨停的股票,对于处于空闲状态或者已经涨停的股票可以先不关注。 添加图片注释,不超过 140 …

一篇文章搞懂unity编辑器中Event的rawType, type和GetTypeForControl

简介 Event.rawType就是初始的type,可以通过Event.Use()将rawType修改为EventType.Used。 Event.type是经过GUIClip过滤的rawType,如果事件触发时,鼠标位置位于当前GUIClip中,返回rawType,如果鼠标不在当前GUIClip中,则设置为EventType.Ignore Event.GetTypeForControl 相…

我反向操作鸽掉腾讯音乐,只因为觉的...

大家好,我是土哥。 之前有位同学,在土哥的辅导下,居然飘了,当腾讯酷我音乐 HR 看完他的简历后,想邀约他面试,他直接一口回绝了。给的理由如下:目前只想面腾讯 QQ 音乐或者腾讯内部的岗位大厂流程已经到 offer 审核阶段了基于上述两个条件,所以暂时放弃面试。 当土哥看到…

leetcode刷题记录(java)——参考代码随想录:数组 链表 哈希表

四、题目之:代码随想录 https://programmercarl.com/ (1) 代码随想录:数组 704. 二分查找 class Solution {public int search(int[] nums, int target) {if(target<nums[0] || target>nums[nums.length-1]){return -1;}int left = 0,right = nums.length-1;while(lef…

本以为PDD挂了,结果开了50万SSP

大家好,我是土哥。 2024 届校招已然落下帷幕,互联网大厂为将优秀人才招致麾下,纷纷使出浑身解数。在薪资待遇方面,更是各有千秋 。 这里给大家分享一位2024届求职的小伙伴,PDD 非技术岗拿到 50w 的 SSP offer~ 我盆友圈的一个粉丝,之前和土哥交流,说她投递的PDD 上海岗位…

Win32汇编学习笔记11.游戏辅助的实现

Win32汇编学习笔记11.游戏辅助的实现-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 游戏基址 游戏基址的概念游戏基址是保持恒定的两部分内存地址的一部分并提供一个基准点,从这里可以计算一个字节数据的位置。基址伴随着一个加到基上的偏移值来确定信息准…

黑狂野大数据2

--拉链表 --增量导入是没有overwrite 且加载的是最新分区的数据

others_shellcode 1

其实这题直接nc连一下就可以了。其实考的是系统调用来着 32位程序系统调用号用 eax 储存, 第一 、 二 、 三参数分别在 ebx 、ecx 、edx中储存。 可以用 int 80 汇编指令调用。 64位程序系统调用号用 rax 储存, 第一 、 二 、 三参数分别在 rdi 、rsi 、rdx中储存。 可以用 sys…

一篇解决编译原理大作业,基于Flex、Bison设计编译器(含语法分析树和符号表)

1.工具简单介绍 Flex 和 Bison 是编译器开发中常用的两个工具,分别用于生成词法分析器和语法分析器。它们通常一起使用,共同完成源代码的词法分析和语法分析工作。 Flex: Flex通过读取一个规则文件(通常是.l文件),这个文件中定义了一系列的模式和对应的动作。模式用于匹配…

python 删除txt的前三行并保存原文件

数据 #!usr/bin/env python # -*- coding:utf-8 _*- """@author:Suyue @file:raindrop.py @time:2025/01/$ {DAY} @desc: """ def remove_first_three_lines(file_path):# 读取原始文件的所有行with open(file_path, r, encoding=utf-8) as file…

P3586 [POI2015] Logistyka

P3586 [POI2015] Logistyka 题目描述 维护一个长度为 \(n\) 的序列,一开始都是 \(0\),支持以下两种操作:U k a 将序列中第 \(k\) 个数修改为 \(a\)。 Z c s 在这个序列上,每次选出 \(c\) 个正数,并将它们都减去 \(1\),询问能否进行 \(s\) 次操作。每次询问独立,即每次询…