Hướng Dẫn API

Chiến lược giải CAPTCHA hình ảnh nhiều ký tự

CAPTCHA hình ảnh phức tạp sử dụng các chữ cái được kết nối, các ký tự chồng chéo, phông chữ đa dạng và nhiễu để ngăn OCR. Đây là cách tiếp cận họ bằng CaptchaAI.


Các loại phức tạp phổ biến

loại Mô tả độ khó
Làm sạch văn bản Không bị biến dạng, phông chữ đồng đều Dễ dàng
Văn bản bị biến dạng Các chữ cái được xoay riêng lẻ/scaled Trung bình
Các chữ cái được kết nối Các ký tự chồng lên nhau hoặc chạm vào Cứng
Đa phông chữ Phông chữ khác nhau cho mỗi ký tự Cứng
Tiếng ồn + dòng Tiếng ồn nền, dòng gạch ngang Trung bình
Biến đổi màu sắc Màu sắc khác nhau cho mỗi nhân vật Trung bình
biểu thức toán học Số + toán tử, kết quả mong đợi Trung bình

Gửi CAPTCHA phức tạp

Đối với CAPTCHA nhiều ký tự tiêu chuẩn, hãy gửi qua base64 kèm theo gợi ý thích hợp:

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")

Chiến lược: Các chữ cái được kết nối

Các chữ cái được kết nối là khó nhất đối với OCR cơ bản nhưng không phải đối với 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,
    })

Chiến lược: Trường hợp hỗn hợp có tiếng ồn

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",
    })

Chiến lược: Văn bản nhiều phông chữ

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,
    })

Xử lý sơ bộ hình ảnh để có kết quả tốt hơn

Xử lý trước khi gửi có thể cải thiện độ chính xác:

# 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")

Thử lại chiến lược với báo cáo

# 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)

Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
Thiếu ký tự Các chữ cái kết nối bị đọc sai Thêm textinstructions về văn bản được kết nối
Ký tự phụ Tiếng ồn được hiểu là văn bản Tiền xử lý: loại bỏ tiếng ồn trước khi gửi
Trường hợp sai Trường hợp không được bảo quản Đặt regsense=1
Kết quả toán trả về dưới dạng biểu thức Thiếu calc=1 Bật chế độ calc cho CAPTCHA toán học
Liên tục sai trên trang web cụ thể Phông chữ dành riêng cho trang web Báo cáo câu trả lời xấu để cải thiện mô hình

Câu hỏi thường gặp

Tôi có nên xử lý trước hình ảnh trước khi gửi không?

Chỉ khi bạn nhận được kết quả kém. CaptchaAI xử lý nguyên bản hầu hết các biến dạng. Quá trình xử lý trước giúp tạo ra những hình ảnh rất nhiễu hoặc có độ tương phản thấp.

Điều gì sẽ xảy ra nếu cùng một loại hình ảnh không thành công?

Báo cáo câu trả lời sai với reportbad để giúp cải thiện độ chính xác. Ngoài ra, hãy thử thêm textinstructions cụ thể mô tả các đặc điểm CAPTCHA.

Có giới hạn ký tự cho hình ảnh CAPTCHA không?

CaptchaAI có thể xử lý CAPTCHA tối đa khoảng 20 ký tự. Hầu hết là 4-8 ký tự.


Hướng dẫn liên quan


Giải CAPTCHA hình ảnh phức tạp —bắt đầu với CaptchaAI.

Os comentários estão desativados para este artigo.