Bağlantılı harfler, çarpık yazı tipleri ve gürültülü arka planlar çoğu OCR motorunu yanıltır — CaptchaAI'nin görüntü çözücüsü tam olarak bu karmaşık CAPTCHA'lar için eğitildi. Bu rehberde şunları bulacaksınız:
- Yedi karmaşıklık türü ve her biri için ayrı
hints/textinstructionsstratejisi - Bağlantılı harfler, gürültülü/karışık büyük-küçük harf ve çoklu yazı tipi için çalışan Python kodu
- Ön işleme, yeniden deneme ve
reportbadile kalite geri bildirimi - Belirtiye göre hangi stratejiyi seçeceğinizi gösteren hızlı bir karar tablosu
KVKK notu: Bionluk veya Upwork üzerinden aldığınız veri kazıma projelerinde hâlâ bu tür eski, gürültülü CAPTCHA'lara rastlarsınız. Kazınan veri kişisel veri içeriyorsa KVKK kapsamındaki yetkilendirmenin müşterinizde olduğundan emin olun — CaptchaAI entegrasyonu yalnızca doğrulama adımını otomatikleştirir, veri sorumluluğunu değiştirmez.
Şimdi yedi zorluk türüne ve her biri için hangi parametrenin fark yarattığına bakalım.
Görüntü CAPTCHA'da Karşılaşılan Zorluk Türleri
| Tür | Açıklama | Zorluk |
|---|---|---|
| Temiz metin | Bozulma yok, tek tip yazı tipi | Kolay |
| Çarpık metin | Harfler tek tek döndürülmüş veya ölçeklendirilmiş | Orta |
| Bağlantılı harfler | Karakterler örtüşüyor veya birbirine değiyor | Zor |
| Çoklu yazı tipi | Karakter başına farklı yazı tipi | Zor |
| Gürültü + çizgiler | Arka plan gürültüsü, üstü çizili çizgiler | Orta |
| Renk değişimi | Karakter başına farklı renk | Orta |
| Matematik ifadesi | Sayı + operatör, sonuç bekleniyor | Orta |
Pratikte en çok şu üç kombinasyonla karşılaşırsınız:
- Bağlantılı harfler + arka plan gürültüsü
- Çoklu yazı tipi + renk değişimi
- Matematik ifadesi + üstü çizili çizgiler
Zorluk arttıkça hints parametrelerini tek tek değil birlikte kullanmak daha iyi sonuç verir.
Karmaşık Görüntü CAPTCHA'yı API'ye Gönderme
Görüntüyü base64 olarak kodlayıp zorluk tipine uygun hints parametreleriyle gönderin. Fonksiyon ocr.captchaai.com uç noktasını çağırır ve sonucu periyodik sorgulayarak alır:
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")
Strateji: Bağlantılı Harfler
Bağlantılı harfler temel OCR için en zor senaryodur; karakterler değdiğinde segmentasyon genelde başarısız olur. CaptchaAI bunu modelinde çözer — textinstructions ile beklenen uzunluğu belirtmeniz yeterli:
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,
})
Strateji: Gürültülü ve Karışık Büyük/Küçük Harfli Metin
Arka planda gürültü varsa ve büyük/küçük harf ayrımı önemliyse regsense=1 belirtin — aksi halde harf büyüklüğü normalize edilip token hedef sitede reddedilebilir:
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",
})
Strateji: Karakter Başına Farklı Yazı Tipi
Her karakterin farklı yazı tipiyle çizildiği CAPTCHA'larda textinstructions alanına bu çeşitliliği belirtmek segmentasyon hatasını azaltır:
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,
})
Çözüm Oranını Artırmak için Görüntü Ön İşleme
CaptchaAI çoğu bozulmayı ek işlem yapmadan çözer; ön işleme yalnızca çok düşük kontrastlı veya gürültülü görsellerde fark yaratır. Griye çevirme, kontrast artırma ve eşikleme en etkili üç adımdır:
# 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")
Yeniden Deneme ve Hatalı Yanıt Bildirimi
İlk deneme başarısız olursa textinstructions'ı boşaltıp veya numeric/regsense kısıtlarını gevşeterek yeniden deneyin. Yanlış çözülen görevi reportbad ile bildirmek modelin zamanla iyileşmesine katkı sağlar:
# 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)
Hangi Stratejiyi Ne Zaman Kullanmalısınız
Beş stratejiden hangisini uygulayacağınıza karar vermek için önce belirtiye bakın; çoğu görev tek bir hints değişikliğiyle çözülür:
| Belirti | Önerilen yaklaşım |
|---|---|
| Harfler birbirine değiyor veya örtüşüyor | textinstructions ile bağlı harf uyarısı + minLen/maxLen |
| Büyük/küçük harf hedef sistemde önemli | regsense=1 |
| Karakter başına farklı yazı tipi | textinstructions ile yazı tipi çeşitliliği uyarısı |
| Görsel gürültülü veya düşük kontrastlı | Göndermeden önce ön işleme (griye çevirme + kontrast + eşikleme) |
| İlk sonuç yanlış çıktı | textinstructions'ı boşaltıp/kısıtları gevşetip yeniden deneyin, reportbad ile bildirin |
Bu tablo tek başına yetmezse bir sonraki bölümdeki hata-sebep eşleştirmesine bakın.
Sorun Giderme
Aşağıdaki tablo, en sık bildirilen beş belirtiyi kök nedeniyle eşleştirir:
| Sorun | Sebep | Düzeltme |
|---|---|---|
| Eksik karakter | Bağlantılı harfler yanlış ayrıştırıldı | textinstructions alanına bağlı metin uyarısı ekleyin |
| Fazladan karakter | Gürültü metin olarak yorumlandı | Göndermeden önce ön işleme ile gürültüyü temizleyin |
| Yanlış büyük/küçük harf | Harf büyüklüğü korunmadı | regsense=1 olarak ayarlayın |
| Matematik sonucu ifade olarak dönüyor | calc=1 eksik |
Matematik CAPTCHA'ları için hesaplama modunu etkinleştirin |
| Belirli bir sitede sürekli hatalı | Siteye özgü yazı tipi | reportbad ile hatalı yanıtları bildirip modeli geliştirin |
Listede yoksa hatayı reportbad ile bildirip destek ekibine örnek görseli iletin.
SSS
Karmaşık örüntülü görselleri göndermeden önce ön işlemeden geçirmem gerekir mi?
Sadece kötü sonuç alıyorsanız. CaptchaAI çoğu bozulmayı yerel olarak yönetir; ön işleme yalnızca çok gürültülü veya düşük kontrastlı görsellerde fark yaratır.
Görüntü/OCR CAPTCHA'ları için reCAPTCHA ile aynı API anahtarını kullanabilir miyim?
Evet. API anahtarınız hesap genelinde geçerlidir ve tüm CAPTCHA türleri aynı ocr.captchaai.com/in.php / res.php uç noktalarını paylaşır; hangi türü çözdüğünüzü method parametresi belirler — görüntü CAPTCHA'ları için base64, reCAPTCHA v2 için userrecaptcha.
regsense parametresini ne zaman 1 olarak ayarlamalıyım?
Hedef site büyük/küçük harf duyarlıysa. Aksi halde CaptchaAI sonucu normalize edebilir ve token hedef sitede reddedilir.
Matematik ifadeli CAPTCHA'larda sonucu neden metin olarak alıyorum?
calc parametresi eksik veya 0 olarak gönderilmiş demektir. İsteğe calc=1 ekleyin; CaptchaAI ifadeyi çözüp sayısal sonucu döndürsün.
Kazıdığım verilerde kişisel bilgi varsa KVKK açısından nelere dikkat etmeliyim?
- CAPTCHA çözümü yalnızca doğrulama adımını otomatikleştirir, veri işleme sorumluluğunu değiştirmez.
- Verinin toplanma amacının meşru olduğundan ve müşterinizin gerekli yetkilendirmeye sahip olduğundan emin olun.
- Kişisel veri içeren sonuçları yalnızca sözleşmede tanımlı süre ve amaç için saklayın.
İlgili Kılavuzlar
Görüntü/OCR çözümünü genişletmek için bu iki kaynağa da bakabilirsiniz:
Karmaşık görüntü CAPTCHA'larını bugün çözmeye başlayın — CaptchaAI ile ücretsiz hesap açın.