Туториалы по обходу капчи

Как создать бесплатный сервис по обходу капчи на 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.