admin
Katılım
23 Eki 2022
Mesajlar
9,193
Çözümler
14
Tepkime puanı
7,181
Puanları
113
Yaş
28
Dostum selamlar, paylaştığın kodun neden düzgün çalışmadığını ve SVSide gibi sunucu tabanlı korumaların bu yöntemi neden doğrudan engellediğini birkaç temel maddede açıklayayım. Mevcut yapıda neden başarısız olduğunu anlarsan çözüme ulaşman daha kolay olur.



❌ Kodun Çalışmama Nedenleri

1. Tesseract OCR Yetersizliği (En Büyük Problem):
pytesseract ham görselleri okumakta başarılıdır ancak SVSide'ın getirdiği bot kontrol pencerelerindeki sayıların arkasında gürültü (noise), çizgiler, arka plan renk varyasyonları ve yazı eğrilikleri (distortion) bulunur. Tesseract bu gürültüyü temizlemeden doğrudan görseli verdiğinde "" (boşluk) döner veya 8 rakamını 3, 7 rakamını 1 olarak yanlış algılar.

2. Piksel Koordinatlarının Sabit Olması (pyautogui.screenshot):
Kodunda x, y, w, h = 1045, 294, 50, 27 şeklinde sabit koordinatlar kullanmışsın. Oyun penceresi milimetrik olarak kaydığında, çözünürlük değiştiğinde veya oyun arka planda kaldığında bu koordinatlar boşa düşer ve kod yanlış yeri keser.

3. Windows API ve Input Engellemeleri:
SetCursorPos ve mouse_event (Win32 API) gibi geleneksel fare hareketleri hile korumaları tarafından kolayca yakalanır veya engellenir. Oyun pencereleri aktif (foreground) olmadığında bu tıklamalar oyuna iletilmeyebilir.



🛠️ Nasıl Düzgün Çalışan Bir Solver Yapılır?

Bu tarz korumaları aşmak için standart OCR yerine Görüntü İşleme (OpenCV) ve gerekirse Küçük Bir CNN (Yapay Zeka) Modeli kullanman gerekir. İzlemen gereken mantıklı yol haritası şudur:

[###] 1. OpenCV ile Görseli Ön İşlemeden Geçir (Preprocessing)
Tesseract'a resmi göndermeden önce arka plandaki gürültüleri silmelisin:
  • Görseli gri tona çevir (cv2.cvtColor).
  • Binarization (Eşikleme) uygulayarak arka planı tamamen beyaz, sayıları tamamen siyah yap (cv2.threshold).
  • Çizgileri yok etmek için Gauss Bulanıklığı (cv2.GaussianBlur) veya Erozyon/Genişletme kullan.

[###] 2. Pencereyi Dinamik Yakala
Sabit ekran koordinatları yerine pygetwindow kullanarak oyun penceresinin o anki konumunu al ve kesme işlemini oyun penceresinin (left, top) koordinatlarına göre göreceli (relative) yap.

[###] 3. Rakamları Tek Tek Segment Et ve Eğit
En kesin çözüm; korumadaki 0-9 arası rakamların OpenCV ile (cv2.findContours) tek tek sınırlarını (bounding box) kesip, bunlardan 50-100 adetlik küçük bir veri seti oluşturmaktır. Bu resimleri TensorFlow/Keras veya PyTorch ile basit bir CNN modeline eğitirsen, %99.9 doğrulukla svside captcha'larını çözebilirsin.



💡 İpucu: Ön İşleme (Preprocessing) İçin Örnek Kod Bloğu
Resmi Tesseract'a göndermeden önce en azından şu OpenCV filtresini araya eklemeyi dene:

Python:
import cv2
import numpy as np

def preprocess_captcha(image_path):
    # Resmi oku ve gri tonlamaya çevir
    img = cv2.imread(image_path)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
   
    # Resmi büyüterek OCR'ın daha rahat okumasını sağla
    resized = cv2.resize(gray, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)
   
    # Gürültüyü temizlemek için eşikleme uygula
    thresh = cv2.threshold(resized, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
   
    return thresh

Bu mantıkla temizlenmiş resmi pytesseract.image_to_string fonksiyonuna verirsen başarı oranının ciddi derecede arttığını göreceksin. Geliştirmelere OpenCV kütüphanesini (pip install opencv-python) projene dahil ederek başlamanı öneririm.

İyi çalışmalar!
 
Üst
Reklam Ver
R10dev.net'i ana ekrana ekle!