Sorun Giderme

Resim CAPTCHA Yanlış Cevap Döndürüyor: Kalite Optimizasyonu

CaptchaAI, resim CAPTCHA'ları için yanlış yanıtlar döndürürse, sorun neredeyse her zaman, çözümde değil, gönderilen resimdedir. İşte nasıl teşhis edileceği ve düzeltileceği.


Yanlış Yanıtların Yaygın Nedenleri

Sebep Frekans Düzeltme
Resim yanlış kırpıldı Çok yaygın CAPTCHA öğesinin tamamını yakalayın
Düşük çözünürlük / sıkıştırma Ortak Daha yüksek kalitede resim gönder
Yanlış görüntü kodlaması Ortak Base64 kodlamasını doğrulayın
Eksik dil/type ipucu ara sıra language veya textinstructions'yi ekleyin
Bayat/expired resmi ara sıra Çözmeden önce yeni bir görüntü yakalayın

Düzeltme 1: Göndermeden Önce Görüntü Kalitesini Doğrulayın

import base64
from io import BytesIO
from PIL import Image


def validate_captcha_image(image_path):
    """Check image quality before submitting to CaptchaAI."""
    img = Image.open(image_path)
    width, height = img.size
    issues = []

    # Minimum resolution
    if width < 50 or height < 20:
        issues.append(f"Too small: {width}x{height}px (min 50x20)")

    # Check if mostly blank
    pixels = list(img.getdata())
    if img.mode == "RGB":
        white_count = sum(1 for p in pixels if p[0] > 250 and p[1] > 250 and p[2] > 250)
    else:
        white_count = sum(1 for p in pixels if p > 250)

    blank_ratio = white_count / len(pixels)
    if blank_ratio > 0.95:
        issues.append(f"Image appears blank ({blank_ratio:.0%} white)")

    # File size check
    img_bytes = BytesIO()
    img.save(img_bytes, format="PNG")
    size_kb = img_bytes.tell() / 1024
    if size_kb < 1:
        issues.append(f"File too small ({size_kb:.1f} KB) — may be empty")
    if size_kb > 600:
        issues.append(f"File too large ({size_kb:.0f} KB) — submit under 600 KB")

    return issues


issues = validate_captcha_image("captcha.png")
if issues:
    for issue in issues:
        print(f"WARNING: {issue}")
else:
    print("Image quality OK")

Düzeltme 2: Doğru Base64 Kodlaması

import base64


def encode_captcha(image_path):
    """Properly encode a CAPTCHA image to base64."""
    with open(image_path, "rb") as f:
        raw = f.read()

    encoded = base64.b64encode(raw).decode("ascii")

    # Verify round-trip
    decoded = base64.b64decode(encoded)
    assert decoded == raw, "Base64 encoding corrupted the image"

    return encoded


# WRONG — encoding a file path string
bad = base64.b64encode(b"captcha.png").decode()  # Encodes filename, not image!

# CORRECT — encoding file contents
with open("captcha.png", "rb") as f:
    good = base64.b64encode(f.read()).decode()

Düzeltme 3: Görüntü Ön İşleme

from PIL import Image, ImageFilter, ImageEnhance
from io import BytesIO
import base64


def preprocess_captcha(image_path):
    """Improve image quality for better OCR accuracy."""
    img = Image.open(image_path)

    # Convert to RGB if needed
    if img.mode != "RGB":
        img = img.convert("RGB")

    # Upscale small images
    width, height = img.size
    if width < 200:
        scale = 200 / width
        img = img.resize(
            (int(width * scale), int(height * scale)),
            Image.LANCZOS,
        )

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

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

    # Convert to PNG bytes
    buffer = BytesIO()
    img.save(buffer, format="PNG")
    return base64.b64encode(buffer.getvalue()).decode()

Düzeltme 4: Tür ve Dil İpuçları Ekleme

import requests


def solve_image(api_key, image_base64, **hints):
    """Submit image CAPTCHA with quality hints."""
    data = {
        "key": api_key,
        "method": "base64",
        "body": image_base64,
        "json": 1,
    }

    # Add optional hints for better accuracy
    if "language" in hints:
        data["language"] = hints["language"]  # 0=default, 1=Cyrillic, 2=Latin
    if "textinstructions" in hints:
        data["textinstructions"] = hints["textinstructions"]
    if "numeric" in hints:
        data["numeric"] = hints["numeric"]  # 1=digits only, 2=letters only
    if "min_len" in hints:
        data["min_len"] = hints["min_len"]
    if "max_len" in hints:
        data["max_len"] = hints["max_len"]

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


# Example: Digits-only CAPTCHA, 4-6 characters
result = solve_image(
    "YOUR_API_KEY",
    encoded_image,
    numeric=1,
    min_len=4,
    max_len=6,
)

# Example: Case-sensitive text
result = solve_image(
    "YOUR_API_KEY",
    encoded_image,
    textinstructions="Case-sensitive, enter exactly as shown",
)

Düzeltme 5: Tam CAPTCHA Öğesini Yakalayın

from selenium import webdriver
from selenium.webdriver.common.by import By
import base64


def capture_captcha_element(driver, selector):
    """Screenshot only the CAPTCHA element, not the full page."""
    element = driver.find_element(By.CSS_SELECTOR, selector)

    # Element screenshot (better than page crop)
    png_bytes = element.screenshot_as_png

    # Verify it's not empty
    if len(png_bytes) < 500:
        raise ValueError("Screenshot too small — element may not be visible")

    return base64.b64encode(png_bytes).decode()


# Usage
driver = webdriver.Chrome()
driver.get("https://example.com")
image_b64 = capture_captcha_element(driver, "img#captchaImage")

Düzeltme 6: Dynamic/Rotating CAPTCHA'ları işleme

import time


def solve_with_fresh_image(driver, api_key, captcha_selector):
    """Capture and solve CAPTCHA immediately to avoid expiry."""
    # Wait for CAPTCHA to load fully
    time.sleep(2)

    # Capture fresh
    element = driver.find_element(By.CSS_SELECTOR, captcha_selector)
    png_bytes = element.screenshot_as_png
    body = base64.b64encode(png_bytes).decode()

    # Submit immediately
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": api_key,
        "method": "base64",
        "body": body,
        "json": 1,
    }, timeout=30)
    result = resp.json()

    if result.get("status") != 1:
        raise RuntimeError(result.get("request"))

    task_id = result["request"]

    # Poll — image CAPTCHAs solve fast
    time.sleep(5)
    for _ in range(12):
        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(3)

    raise TimeoutError("Image solve timeout")

Sorun Giderme Kontrol Listesi

Belirti Teşhis Düzeltme
Cevap saçmalık Base64 kodlaması yanlış Gidiş dönüş kodlamasını doğrulayın
Cevap yakın ama yanlış Düşük görüntü kalitesi Önişlem: lüks, keskinleştirme, kontrast
Cevapta yanlış karakter sayısı var Eksik uzunluk ipuçları min_len/max_len parametrelerini ekle
Cevap karışık harfler/digits Eksik tür ipucu Sayısal=1 veya sayısal=2 ekleyin
Boş yanıt döndürüldü Boş/corrupted resmi Göndermeden önce resmi doğrulayın
Doğru cevap ancak site reddediyor Büyük/küçük harf duyarlılığı Vaka için metin talimatlarını ekleyin

SSS

Resim CAPTCHA'ları için CaptchaAI ne kadar doğrudur?

CaptchaAI, düzgün şekilde gönderilen görsellerle 27.500'den fazla CAPTCHA türünü yüksek doğrulukla destekler. Çoğu arıza, düşük görüntü kalitesinden veya yanlış parametrelerden kaynaklanmaktadır.

Görüntüleri göndermeden önce ön işleme tabi tutmalı mıyım?

Yalnızca orijinal görüntünün kalitesi düşükse. CaptchaAI, standart CAPTCHA görüntülerini ön işleme gerek kalmadan iyi bir şekilde işler. Çok küçük görüntülerin ölçeklendirilmesi ve kontrastın artırılması uç durumlarda yardımcı olabilir.

Yanlış cevapları bildirebilir miyim?

Evet. Yanlış yanıtları bildirmek için reportbad uç noktasını görev kimliğiyle birlikte kullanın. Bu, doğruluğu artırmaya yardımcı olur ve hesabınıza kredi kazandırabilir.


İlgili Kılavuzlar


Resimleri doğru bir şekilde çözün —CaptchaAI'yi deneyin.

Bu makale için yorumlar devre dışı bırakılmıştır.