- 环境准备
1.1 安装 PHP
如果尚未安装 PHP,可以使用以下方式安装:
Windows
从 PHP 官方网站 下载并安装。
macOS(Homebrew)
bash
brew install php
Linux(Ubuntu)
bash
sudo apt update
sudo apt install php-cli php-xml
检查 PHP 是否安装成功:
bash
php -v
1.2 安装 Tesseract OCR
macOS(Homebrew)
bash
brew install tesseract
Linux(Ubuntu)
bash
sudo apt update
sudo apt install tesseract-ocr
Windows
从 Tesseract GitHub 下载并安装。
安装完成后,检查 Tesseract 是否可用:
bash
tesseract --version
2. 代码实现
创建 captcha_reader.php 并写入以下代码:
php
- 代码解析
3.1 图像预处理
php
exec("convert $captchaImage -colorspace Gray -threshold 50% $processedImage");
使用 ImageMagick 将验证码转换为灰度,并进行二值化处理,以提高 OCR 识别率。
3.2 OCR 识别
php
$output = shell_exec("tesseract $processedImage stdout");
调用 tesseract 命令行工具进行验证码识别,并获取输出结果。
3.3 输出识别结果
php
echo "识别出的验证码: " . trim($output) . "\n";
移除 OCR 结果中的多余空格,并输出验证码。
4. 运行程序
确保 captcha.png 图片存在于相同目录下,然后在终端运行:
bash
php captcha_reader.php
示例输出:
makefile
识别出的验证码: X7G9H
5. 提高 OCR 识别率
5.1 选择不同的 Tesseract PSM 模式
php
$output = shell_exec("tesseract $processedImage stdout --psm 6");
PSM 6 适用于单行验证码,提高准确率。
5.2 限制识别字符集
php
$output = shell_exec("tesseract $processedImage stdout -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
让 Tesseract 只识别数字和大写字母,提高精确度。