用 PHP 和 Tesseract OCR 识别英文数字验证码

news/2025/9/20 19:40:44/文章来源:https://www.cnblogs.com/ocr12/p/19102765

验证码是网页中常见的防止自动化攻击的工具,通常它们由一串字母和数字组成,目的是确认用户是人类而不是机器人。很多情况下,验证码都是扭曲、加噪音的图像,这让计算机很难直接读取。幸运的是,借助 OCR(Optical Character Recognition,光学字符识别)技术,我们可以通过编程的方式识别这些验证码。

本文将介绍如何使用 PHP 和 Tesseract OCR 来识别包含英文数字的验证码。

一、安装和配置
更多内容访问ttocr.com或联系1436423940
安装 Tesseract OCR

在进行任何操作之前,你需要安装 Tesseract OCR。Tesseract 是一个强大的开源 OCR 引擎,可以识别多种语言的文本。首先,你需要根据操作系统选择合适的安装方式。

Ubuntu(Linux):

sudo apt update
sudo apt install tesseract-ocr

macOS:

brew install tesseract

Windows:

你可以从 Tesseract 官方 GitHub 页面
下载最新版本的安装包,按照提示进行安装。

安装 PHP 扩展 tesseract-ocr-php

为了让 PHP 与 Tesseract OCR 进行交互,我们需要安装 PHP 的 Tesseract 扩展。你可以使用 composer 来安装适合的库。

composer require thiagoalessio/tesseract_ocr

二、PHP 实现验证码识别

在 PHP 中,我们可以使用 thiagoalessio/tesseract_ocr 这个库来调用 Tesseract OCR 引擎并识别验证码。首先,确保你已经安装好 Tesseract 和 PHP 扩展。

以下是一个简单的示例代码:

lang('eng') // 设置语言为英语->config('tessedit_char_whitelist', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ') // 限制字符集为数字和字母->run();// 输出识别结果 echo "识别结果: " . $text; ?>

三、代码解析

putenv('TESSDATA_PREFIX=/usr/share/tesseract-ocr/4.00/tessdata'): 设置 Tesseract 数据文件路径。在不同操作系统上,Tesseract 的安装路径可能不同,你需要根据自己的系统进行配置。

TesseractOCR($imagePath): 通过传递验证码图片的路径来创建一个新的 OCR 实例。

lang('eng'): 设置识别语言为英语。

config('tessedit_char_whitelist', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'): 设置白名单,只识别数字和字母。通过这种方式,Tesseract 将忽略其他字符,从而提高识别准确性。

run(): 运行 OCR 引擎并返回识别结果。

四、优化验证码识别

验证码的效果通常会影响识别的准确度。常见的影响因素包括图像的噪点、模糊、扭曲等。为了提高识别的准确性,我们可以对图像进行预处理,例如:

灰度化:转换图像为灰度图,去除多余的颜色信息。

二值化:将图像转换为黑白图像,这有助于减少噪音。

去噪声:去除图像中的多余点状噪声。

你可以使用 PHP 的 GD 库或者 ImageMagick 对图像进行处理。例如,使用 GD 库将验证码图像转换为灰度图像并进行二值化:

> 16) & 0xFF;$g = ($rgb >> 8) & 0xFF;$b = $rgb & 0xFF;// 计算灰度值$gray = (int)(0.299 * $r + 0.587 * $g + 0.114 * $b);$color = imagecolorallocate($image, $gray, $gray, $gray);// 将像素设置为灰度值imagesetpixel($image, $x, $y, $color);} }// 保存预处理后的图像 imagejpeg($image, 'processed_captcha.jpg');// 释放内存 imagedestroy($image); ?>

这样做之后,你可以将处理后的图像传递给 Tesseract 进行识别,通常可以提高识别准确度。

五、常见问题

无法识别特定验证码字符
如果验证码中有特殊字符(例如字母和数字的混合),你可以通过调整 tessedit_char_whitelist 来指定需要识别的字符集。确保字符集包含所有可能的验证码字符。

图像质量较差
如果验证码图片质量差(例如图像模糊、噪点多等),可以尝试对图像进行预处理,去除噪声或增强对比度。

识别率低
Tesseract 的识别率可能会受到验证码设计的影响。如果验证码使用了扭曲、噪声或者其他复杂的效果,Tesseract 的表现可能会有所下降。可以尝试使用其他 OCR 引擎,或者结合机器学习方法来提高识别率。

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

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

相关文章

凝望深渊时,深渊也凝望着你(黑洞与摇钱树)

/dev/null与/dev/zero在 Linux 系统中,/dev/null 和 /dev/zero 是两个特殊的设备文件,由内核提供,用于特定的数据处理目的。 /dev/null 是“只进不出”的黑洞,用于丢弃数据。 /dev/zero 是“只出不进”的零源,用于…

详细介绍:《Vuejs设计与实现》第 16 章(解析器) 中

详细介绍:《Vuejs设计与实现》第 16 章(解析器) 中pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

spring项目部署后为什么会生成 logback-spring.xml记录

spring项目部署后为什么会生成 logback-spring.xml记录pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

React+antd搭建监听localStorage变化多页面更新+纯js单页面table模糊、精确查询、添加、展示功能

React+antd搭建监听localStorage变化多页面更新+纯js单页面table模糊、精确查询、添加、展示功能2025-09-20 19:22 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !im…

暗黑破坏神4 任务-坚守传统-向古老的雕像展示你坚守的传统

暗黑破坏神4 任务-坚守传统-向古老的雕像展示你坚守的传统 发一个“确定”的表情即可。

202509_NBWS_logbool

流量分析,正则匹配,布尔盲注,pyshark,Tags:流量分析,正则匹配,布尔盲注,pyshark,DASCTF 0x00. 题目 找到flag,格式为DASCTF{} 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附…

Kubernetes权威指南-深入理解Pod Service

Pod是Kubernetes最小调度单元,将多个紧密协作的容器组合为一个逻辑主机,共享网络、存储与IP。通过YAML定义容器、卷、健康检查等配置,支持静态Pod、Init容器、ConfigMap等高级特性,并借助Service实现稳定的服务发现…

详细介绍:jeecg-boot3.7.0对接钉钉登录(OAuth2.0)

详细介绍:jeecg-boot3.7.0对接钉钉登录(OAuth2.0)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

C++编程软件 Dev-C++ 安装及使用流程

目录第 1 步:下载 Dev-C++第 2 步:安装 Dev-C++第 3 步:第一次打开 Dev-C++ 时的配置第4步:编写一个 C++ 程序 第 1 步:下载 Dev-C++ 首先,我们需要找一个地方下载 Dev-C++ 软件。 可以直接点击 这个链接 下载。…

DLL植入漏洞分类与微软安全响应指南

本文详细解析微软对DLL植入漏洞的分类方法,涵盖应用程序目录、当前工作目录和PATH目录三种场景的威胁评估标准,并说明微软针对不同场景的安全响应策略与修复优先级。DLL植入漏洞的分类 | MSRC博客 本文章翻译自Secur…

4980:拯救行动

题目 总时间限制: 1000ms 内存限制: 65536kB 描述 公主被恶人抓走,被关押在牢房的某个地方。牢房用N*M (N, M <= 200)的矩阵来表示。矩阵中的每项可以代表道路(@)、墙壁(#)、和守卫(x)。 英勇的骑士(r)决定…

java03-wxj

好的,我们来逐一详细解答这些问题。1. 什么样的方法应该用static修饰?不用static修饰的方法往往具有什么特性? 应该使用 static 修饰的方法:工具方法(Utility Methods): 执行一个与任何特定对象实例无关的通用任…

题解:P13969 [VKOSHP 2024] Exchange and Deletion

题面: 我们考虑从图论意义计数,把 swap 改成连边,由于交换完前面的点直接被删了,所以只保留从后向前的连边。 那么最后连到 \(n-k\) 前的点的数值等于链头,而 \(n-k\) 后的点和链上非链头的点实际上都被删了。手玩…

基于MATLAB的车牌识别系统 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

市场交易反心理特征之二:忽视热点切换的苗头

案例:2017年8月18日,万科A。2017年8月18日,万科A 万科A小波段延续万科A一个波段完成​情况描述:从第一次触及无穷成本线止跌后大资金进入开始,连续2-3次出现买点,都能选出。但是都直接鼠标滑过,没有过脑子,显然…

Linux服务器上安装配置GitLab的步骤

在Linux服务器上安装GitLab是一个涉及多个步骤的过程。以下是详细的步骤,遵从GitLab官方推荐的做法以确保系统的稳定性和性能。 服务器要求和前提条件:一台运行支持的Linux操作系统的服务器,建议使用CentOS 7。 至少…

贪心算法应用:投资组合再平衡问题详解 - 实践

贪心算法应用:投资组合再平衡问题详解 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &q…

MCP:Trae中集成Playwright 实现网页自动化测试

Trae IDE 可以通过智能问答的形式补齐代码,纠正程序中的错误,根据用户的自然语言,实现AI自动编程。近期使用了一下Trae,发现很强大。我把一个有前后端的项目导入Trae IDE,当时还有一些报错,但是很快在Trae 的提示…

C语言中的字符、字符串及内存操作函数详细讲解

在C语言中,字符和字符串的处理是基本且重要的概念。字符在C中通常由 char类型表示,而字符串则是以 null终止的字符数组。内存操作函数则提供了基本的内存处理能力,如复制、设置、比较等内存块。 字符操作 字符使用 …