一、背景介绍
PHP 作为一种后端服务器脚本语言,广泛用于 Web 开发。结合 Tesseract OCR,我们可以在服务器端进行验证码识别,适用于自动化处理和数据爬取等场景。
二、环境准备
2.1 安装 Tesseract OCR
在 Linux 环境下安装 Tesseract:
sudo apt update
sudo apt install tesseract-ocr
验证安装:
tesseract --version
2.2 安装 PHP 和扩展
安装 PHP 和所需扩展:
sudo apt install php php-gd
三、代码实现
3.1 使用 Composer 安装 Tesseract OCR PHP 扩展
首先安装 Composer:
sudo apt install composer
然后安装 thiagoalessio/tesseract_ocr:
composer require thiagoalessio/tesseract_ocr
3.2 识别验证码的核心代码
创建一个名为 captcha_recognizer.php 的文件:
<?php
require __DIR__ . '/vendor/autoload.php';
use thiagoalessio\TesseractOCR\TesseractOCR;
// 预处理图像
function preprocessImage($imagePath, $outputPath) {
// 将图像转换为灰度并进行二值化处理
$cmd = "convert $imagePath -colorspace Gray -threshold 50% $outputPath";
exec($cmd, $output, $status);
if ($status === 0) {
echo "图像预处理成功:$outputPath\n";
return true;
} else {
echo "图像预处理失败:\n";
print_r($output);
return false;
}
}
$imagePath = "captcha.png"; // 原始验证码图片
$processedImage = "processed_captcha.png"; // 处理后的图片
// 预处理验证码图像
if (preprocessImage($imagePath, $processedImage)) {
// 使用 Tesseract 识别验证码
$text = (new TesseractOCR($processedImage))
->lang('eng')
->psm(6) // 假设单行文本
->allowlist('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') // 只识别大写字母和数字
->run();
echo "识别结果:$text\n";
} else {
echo "图像预处理失败,无法继续识别。\n";
}
?>
四、运行程序
使用以下命令运行:
php captcha_recognizer.php
示例输出:
图像预处理成功:processed_captcha.png
识别结果:7F6HJ
五、性能优化
5.1 图像去噪和二值化
使用 ImageMagick 的 convert 命令进行图像预处理:
convert captcha.png -colorspace Gray -threshold 50% processed_captcha.png
5.2 设置白名单字符
仅识别大写字母和数字:
->allowlist('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
5.3 调整页面分割模式
对于单行验证码,设置 PSM 模式为 6:
更多内容访问ttocr.com或联系1436423940
->psm(6)
六、实际应用场景
自动化登录和验证
在自动化测试中,快速识别验证码并提交登录请求。
批量验证码识别
批量处理多个验证码图片,自动提取其中的文本内容。
数据爬虫和自动化填表
解决验证码问题,提高数据采集效率。