Как создать бесплатный сервис по обходу капчи на PHP
Бесплатный обход текстовой капчи на PHP с Tesseract OCR
В статье расписано, как построить разработать решение для распознавания текстовой капчи на PHP, используя движок Tesseract OCR и обертку thiagoalessio/tesseract_ocr.
1. Установка зависимостей
Tesseract OCR
На Linux:
sudo apt update
sudo apt install tesseract-ocr -y
На Windows: скачайте с официального сайта и добавьте tesseract.exe
в системную переменную PATH
.
PHP-обёртка
composer require thiagoalessio/tesseract_ocr
2. Минимальный рабочий пример
<?php
require __DIR__ . '/vendor/autoload.php';
use thiagoalessio\TesseractOCR\TesseractOCR;
$ocr = new TesseractOCR('captcha.jpg');
$ocr->lang('eng');
$ocr->setOptions([
'tessedit_char_whitelist' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
]);
$text = $ocr->run();
$cleaned = preg_replace('/[^A-Z0-9]/', '', strtoupper($text));
echo "Распознанный текст: $cleaned\n";
3. Предобработка изображения (по желанию)
Для изображений низкого качества можно добавить предобработку — это улучшит точность распознавания:
<?php
$im = imagecreatefromjpeg('captcha.jpg');
imagefilter($im, IMG_FILTER_GRAYSCALE);
imagefilter($im, IMG_FILTER_CONTRAST, -50);
imagejpeg($im, 'captcha_prepared.jpg');
imagedestroy($im);
Замените путь к файлу в OCR на 'captcha_prepared.jpg'
.
4. Генерация тестовой капчи
Для тестов можно сгенерировать простую капчу с помощью ImageMagick:
convert -size 150x60 xc:white -font Arial -pointsize 30 -fill black -draw "text 20,40 'AB12'" captcha.jpg
5. Возможные проблемы
Ошибка | Причина | Решение |
---|---|---|
tesseract command not found |
Не установлен Tesseract | Установите и добавьте в PATH |
Пустой результат OCR | Плохое качество изображения | Используйте фильтры: контраст, масштаб |
Файл не найден | Ошибка пути или отсутствует | Проверьте наличие и путь к изображению |
6. Финальный код с предобработкой
<?php
require __DIR__ . '/vendor/autoload.php';
use thiagoalessio\TesseractOCR\TesseractOCR;
// Шаг 1: Подготовка изображения
$source = 'captcha.jpg';
$prepared = 'captcha_prepared.jpg';
$im = imagecreatefromjpeg($source);
imagefilter($im, IMG_FILTER_GRAYSCALE);
imagefilter($im, IMG_FILTER_CONTRAST, -50);
imagejpeg($im, $prepared);
imagedestroy($im);
// Шаг 2: Распознавание
$ocr = new TesseractOCR($prepared);
$ocr->lang('eng');
$ocr->setOptions([
'tessedit_char_whitelist' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
]);
$text = $ocr->run();
$cleaned = preg_replace('/[^A-Z0-9]/', '', strtoupper($text));
echo "Распознанный текст: $cleaned\n";
7. Ограничения
Этот подход работает только для простых текстовых капч, где буквы и цифры чёткие, нет искажений и шумов. Он не подходит для современных систем, использующих:
- Сильные искажения, шум, линии
- Динамическую отрисовку (canvas, WebGL)
- Поведенческие проверки (движения мыши, клики)
- Интерактивные задания (классификация картинок, перетаскивание)
Примеры:
- Google reCAPTCHA v2/v3
- hCaptcha
- Cloudflare Turnstile
- GeeTest
Для таких капч требуется использовать сервис распознавания, например: 2Captcha.
Поддержка других языков. Пример написан на PHP, капчи можно обходить и на других языках:
Сервис 2Captcha предоставляет API, одинаково работающий во всех языках — вы просто отправляете задачу и получаете результат в JSON.