Туториалы по API

Стратегии решения капчи с многосимвольными изображениями

Сложные изображения CAPTCHA используют связанные буквы, перекрывающиеся символы, различные шрифты и шум для предотвращения распознавания текста. Вот как можно подойти к ним с помощью CaptchaAI.


Распространенные типы сложности

Тип Описание Сложность
Чистый текст Без искажений, равномерный шрифт Легкий
Искаженный текст Буквы повернуты по отдельности/scaled Середина
Связанные буквы Персонажи перекрываются или соприкасаются Жесткий
Мультишрифт Разные шрифты для каждого символа Жесткий
Шум + линии Фоновый шум, зачеркнутые линии Середина
Цветовая вариация Разные цвета для каждого персонажа Середина
Математическое выражение Числа + операторы, ожидаемый результат Середина

Отправка сложных CAPTCHA

Для стандартных многосимвольных CAPTCHA отправьте их через base64 с соответствующими подсказками:

import requests
import base64
import time
import os

API_KEY = os.environ["CAPTCHAAI_API_KEY"]


def solve_complex_image(image_b64, hints=None):
    """Solve a complex multi-character image CAPTCHA."""
    payload = {
        "key": API_KEY,
        "method": "base64",
        "body": image_b64,
        "json": 1,
    }

    if hints:
        payload.update(hints)

    resp = requests.post(
        "https://ocr.captchaai.com/in.php",
        data=payload,
        timeout=30,
    )
    result = resp.json()

    if result.get("status") != 1:
        raise RuntimeError(f"Submit failed: {result.get('request')}")

    task_id = result["request"]

    time.sleep(8)
    for _ in range(24):
        resp = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY,
            "action": "get",
            "id": task_id,
            "json": 1,
        }, timeout=15)
        data = resp.json()
        if data.get("status") == 1:
            return data["request"]
        if data["request"] != "CAPCHA_NOT_READY":
            raise RuntimeError(data["request"])
        time.sleep(5)

    raise TimeoutError("Solve timeout")

Стратегия: связанные буквы

Связанные буквы сложны для базового распознавания текста, но не для CaptchaAI:

def solve_connected_letters(image_path):
    """Solve CAPTCHA with connected/overlapping characters."""
    with open(image_path, "rb") as f:
        b64 = base64.b64encode(f.read()).decode("ascii")

    return solve_complex_image(b64, hints={
        "textinstructions": "Characters may be connected or overlapping",
        "minLen": 4,
        "maxLen": 8,
    })

Стратегия: смешанный случай с шумом

def solve_noisy_mixed(image_path):
    """Solve CAPTCHA with background noise and mixed case."""
    with open(image_path, "rb") as f:
        b64 = base64.b64encode(f.read()).decode("ascii")

    return solve_complex_image(b64, hints={
        "regsense": 1,         # Case-sensitive
        "language": 2,         # Latin characters
        "textinstructions": "Ignore background lines and noise",
    })

Стратегия: многошрифтный текст

def solve_multi_font(image_path):
    """Solve CAPTCHA using multiple fonts per character."""
    with open(image_path, "rb") as f:
        b64 = base64.b64encode(f.read()).decode("ascii")

    return solve_complex_image(b64, hints={
        "textinstructions": "Each character may use a different font or style",
        "minLen": 5,
        "maxLen": 7,
    })

Предварительная обработка изображений для подходящий результатов

Предварительная обработка перед отправкой может повысить точность:

# preprocess.py
from PIL import Image, ImageFilter, ImageEnhance
import io
import base64


def preprocess_for_ocr(image_path):
    """Preprocess image to improve OCR accuracy."""
    img = Image.open(image_path)

    # Convert to grayscale
    img = img.convert("L")

    # Increase contrast
    enhancer = ImageEnhance.Contrast(img)
    img = enhancer.enhance(2.0)

    # Sharpen
    img = img.filter(ImageFilter.SHARPEN)

    # Binarize (threshold)
    threshold = 128
    img = img.point(lambda p: 255 if p > threshold else 0)

    # Encode back to base64
    buffer = io.BytesIO()
    img.save(buffer, format="PNG")
    return base64.b64encode(buffer.getvalue()).decode("ascii")

Стратегия повторных попыток с отчетами

# retry_strategy.py


def solve_with_retry(image_b64, hints, max_retries=3):
    """Retry solving with fallback strategies."""
    strategies = [
        hints,                                          # Original hints
        {**hints, "textinstructions": ""},              # Without instructions
        {**hints, "numeric": 0, "regsense": 0},        # Relaxed constraints
    ]

    for i, strategy in enumerate(strategies[:max_retries]):
        try:
            result = solve_complex_image(image_b64, strategy)
            return {"text": result, "strategy": i, "success": True}
        except RuntimeError:
            continue

    return {"text": None, "strategy": -1, "success": False}


def report_bad_answer(task_id):
    """Report incorrect answer for quality feedback."""
    requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "reportbad",
        "id": task_id,
    }, timeout=10)

Поиск неисправностей

Проблема Причина Исправить
Отсутствующие символы Связанные буквы неправильно читаются Добавьте textinstructions о связанном тексте.
Дополнительные символы Шум интерпретируется как текст Предварительная обработка: удаление шума перед отправкой
Неправильный случай Дело не сохранилось Установить regsense=1
Математический результат возвращается в виде выражения Отсутствует calc=1 Включить режим расчета для математических CAPTCHA
Постоянно неверно на конкретном сайте Шрифт, специфичный для сайта Сообщите о плохих ответах, чтобы улучшить модель

Часто задаваемые вопросы

Нужно ли предварительно обрабатывать изображения перед отправкой?

Только если вы получаете плохие результаты. CaptchaAI изначально обрабатывает большинство искажений. Предварительная обработка помогает при обработке очень шумных или низкоконтрастных изображений.

Что, если тот же тип изображения продолжает давать сбой?

Сообщайте о неправильных ответах с помощью reportbad, чтобы повысить точность. Также попробуйте добавить конкретный textinstructions, описывающий характеристики CAPTCHA.

Существует ли ограничение на количество символов для изображений CAPTCHA?

CaptchaAI может обрабатывать CAPTCHA длиной до 20 символов. Большинство из них состоят из 4–8 символов.


Связанные руководства


Решение сложных изображений CAPTCHA —начни с CaptchaAI.

Комментарии для этой статьи отключены.