php实现验证码识别
PHP 实现验证码识别的方法
使用 Tesseract OCR 识别简单验证码
Tesseract 是一个开源的 OCR 引擎,可用于识别验证码文本。安装 Tesseract 后,通过 PHP 的 exec() 函数调用。

// 安装 Tesseract
// sudo apt-get install tesseract-ocr
$imagePath = 'captcha.png';
$outputText = '';
exec("tesseract $imagePath stdout", $outputText);
echo "识别结果: " . $outputText[0];
使用 OpenCV 预处理图像
复杂的验证码需要预处理以提高识别率。OpenCV 可用于降噪、二值化和去除干扰线。

// 安装 OpenCV 和 PHP-OpenCV 扩展
$image = cv\imread('captcha.png', cv\IMREAD_GRAYSCALE);
$image = cv\threshold($image, 127, 255, cv\THRESH_BINARY);
cv\imwrite('processed_captcha.png', $image);
使用深度学习模型
对于高度扭曲的验证码,可训练 CNN 模型识别。PHP 通过调用 Python 脚本实现。
$modelPath = 'captcha_model.h5';
$imagePath = 'captcha.png';
$command = "python3 predict.py --model $modelPath --image $imagePath";
exec($command, $output);
echo "识别结果: " . $output[0];
调用第三方 API
使用付费 API 如 Anti-Captcha 或 2Captcha 服务,适合高精度需求。
$apiKey = 'YOUR_API_KEY';
$imageData = file_get_contents('captcha.png');
$base64Image = base64_encode($imageData);
$postData = [
'clientKey' => $apiKey,
'task' => [
'type' => 'ImageToTextTask',
'body' => $base64Image
]
];
$ch = curl_init('https://api.anti-captcha.com/createTask');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
$response = json_decode(curl_exec($ch), true);
echo "识别结果: " . $response['solution']['text'];
注意事项
- 简单验证码可用 Tesseract,复杂验证码需预处理或深度学习
- 第三方 API 识别率高但有成本
- 验证码识别可能违反某些网站的服务条款






