使用 PHP 和 Tesseract OCR 实现验证码识别

验证码识别是一个常见的技术应用,可以用于自动化登录、爬虫等场景。本文将介绍如何通过 PHP 和 Tesseract OCR 实现验证码的自动识别。Tesseract 是一个强大的开源 OCR 工具,支持多种语言的文本识别。

  1. 环境准备
    安装 Tesseract OCR
    在开始之前,需要确保系统已经安装 Tesseract OCR:

Windows:从 Tesseract OCR 官方页面下载安装包。
Linux:运行以下命令安装:
bash
更多内容访问ttocr.com或联系1436423940
sudo apt install tesseract-ocr
macOS:通过 Homebrew 安装:
bash

brew install tesseract
安装完成后,运行以下命令确保安装成功:

bash

tesseract --version
2. 配置 PHP 环境
确保你已安装 PHP,并可以运行 PHP 脚本。接下来,安装 imagick 扩展,用于处理图像(如验证码的预处理)。

安装 imagick 扩展
Linux:
bash

sudo apt install php-imagick
Windows:在 PHP 配置文件 (php.ini) 中启用 extension=imagick,然后重启服务器。
3. 编写验证码识别代码
以下是一个 PHP 示例代码,展示如何通过 Tesseract OCR 识别验证码图像:

示例代码
php

modulateImage(100, 0, 100); // 应用二值化处理 $image->thresholdImage(128); // 保存处理后的图像 $image->writeImage($outputPath); echo "图像已处理并保存为: $outputPath\n"; } // 预处理图像 $processedImage = "processed_captcha.png"; preprocessImage($imagePath, $processedImage); // 调用 Tesseract OCR 进行文字识别 $output = null; $returnVar = null; exec("tesseract $processedImage output -l eng", $output, $returnVar); // 读取识别结果 if (file_exists("output.txt")) { $text = file_get_contents("output.txt"); echo "识别的验证码是: " . trim($text) . "\n"; } else { echo "未能识别验证码。\n"; } ?>
  1. 图像预处理
    为了提高 OCR 的识别准确率,对验证码进行预处理非常重要。以下是一些常用的图像处理方法:

灰度化:将彩色图像转换为灰度图像,减少颜色干扰。
二值化:将图像转为黑白图像,使字符更突出。
去噪:移除背景噪点或干扰线条。
上述代码中的 preprocessImage 函数已经实现了灰度化和二值化处理。

  1. 提高识别准确率
    指定字符集

如果验证码只包含特定字符,可以通过 Tesseract 的白名单设置来限制识别范围:
bash

exec("tesseract $processedImage output -l eng --psm 7 tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
调整页面分割模式

Tesseract 支持多种页面分割模式,可以根据验证码的特点选择合适模式。例如,--psm 7 表示将图片识别为一行文本。
分割图像

如果验证码中的字符间距较大,可以先将图像分割成多个小图,再分别进行识别。
自定义训练模型

对于复杂的验证码,可以使用 Tesseract 提供的训练工具生成专用模型。
6. 运行代码
将代码保存为 captcha_recognition.php,确保验证码图片 captcha.png 位于同一目录中。然后运行以下命令:

bash

php captcha_recognition.php
运行成功后,程序会输出识别的验证码结果,例如:

makefile

图像已处理并保存为: processed_captcha.png
识别的验证码是: X7A9B

posted @   ttocr、com  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示