- 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):
2. Piksel Koordinatlarının Sabit Olması (
Kodunda
3. Windows API ve Input Engellemeleri:
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:
[###] 2. Pencereyi Dinamik Yakala
Sabit ekran koordinatları yerine
[###] 3. Rakamları Tek Tek Segment Et ve Eğit
En kesin çözüm; korumadaki 0-9 arası rakamların OpenCV ile (
İpucu: Ön İşleme (Preprocessing) İçin Örnek Kod Bloğu
Resmi Tesseract'a göndermeden önce en azından şu OpenCV filtresini araya eklemeyi dene:
Bu mantıkla temizlenmiş resmi
İyi çalışmalar!
Kodun Çalışmama Nedenleri1. 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ğuResmi 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 threshBu 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!
