Hoşgeldin Misafir

YOLO Google Captha İle Obje Tespiti C#

xS0N3R

23 Ağu 2020
5,427 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Bugün YOLO kütüphanesini kullanarak Google Captha doğrulaması üzerinde hangi görseller var bunları C# kodlama dili üzerinde otomatik olarak tanımaya çalışacağız. Kodlarımız YOLO 'nun son sürümü olan YOLO 11 'den destek almakta ayrıca bu işlemler gerçekleşirken Selenium kütüphanesinden kullanıyor zira bu desteği sağlamasaydık Javascript vb. hatalarla karşılaşma olasılığı çoktu. Kaynak kodları konu sonunda vereceğim sadece ana kodlardan bahsedeceğim.

Kodlarımıza geçelim...

YOLO modellerinin yüklenmesi işlemi.

C#:
Console.WriteLine("Loading pose estimation model...");
using var posePredictor = new YoloPredictor("./models/yolo11n-pose.onnx");

Console.WriteLine("Loading detection model...");
using var detectPredictor = new YoloPredictor("./models/yolo11n.onnx");

Console.WriteLine("Loading obb detection model...");
using var obbPredictor = new YoloPredictor("./models/yolo11n-obb.onnx");

Console.WriteLine("Loading segmentation model...");
using var segmentPredictor = new YoloPredictor("./models/yolo11n-seg.onnx");

Console.WriteLine("Loading classification model...");
using var classifyPredictor = new YoloPredictor("./models/yolo11n-cls.onnx");

Burada models klasöründe yer alan ONNX uzantılı dosyalar C# içerisine tanımlanmakta.

Selenium 'un tanımlanması & operasyonların çağrılması işlemi.

C#:
Console.WriteLine();

var options = new ChromeOptions();
options.AddArgument("--start-maximized");
options.AddArguments("--disable-blink-features=AutomationControlled");
options.AddAdditionalOption("useAutomationExtension", false);
using var driver = new ChromeDriver(options);

driver.Navigate().GoToUrl("https://www.google.com/recaptcha/api/fallback?k=6LdZ3QkTAAAAAE_Aex8XOxj5mAgAh_E0-KvpmYeS");

await Task.Delay(3000); // Sayfanın yüklenmesini bekle

var imagePath = await DownloadCaptchaImage(driver);

Console.WriteLine($"CAPTCHA görüntüsü kaydedildi: {imagePath}");

    await PredictAndSaveAsync(detectPredictor, "captcha_downloaded.jpg"); // <----> En Başarılı Sonuç
    await PredictAndSaveAsync(posePredictor, "captcha_downloaded.jpg");
    await PredictAndSaveAsync(segmentPredictor, "captcha_downloaded.jpg");

// await PredictAndSaveAsync(obbPredictor, "captcha_downloaded.jpg"); BUNLARI DİĞER GÖRSEL TESPİTLERİNDE DAHİL EDEBİLİRSİNİZ İSTERSENİZ CAPTHA SONUÇLARI PEK GÜZEL DEĞİL...
//  await PredictAndSaveAsync(classifyPredictor, "captcha_downloaded.jpg");

Selenium arka planda açılarak bot olmasını engellemek amacıyla bazı argümanlar girdik daha sonra hedef URL 'ye giderek captha görselini indirmesini & modellerin tespit işlemine başlaması fonksiyonlarını çağırmasını istedik. Bu fonksiyonları az sonra aşağıda tanımlayacağız.

Tespit işlemi bittikten sonra tespit klasörünün açılması işlemi.

C#:
if (OperatingSystem.IsWindows())
    {
        Process.Start(new ProcessStartInfo
        {
            FileName = Path.GetFullPath("./images"),
            UseShellExecute = true,
        });
    }

Tespit edilme işlemi bitirildikten sonra Debug klasörü içerisinde /images uzantılı klasör açılarak sonuçları görmeniz sağlanıyor.

Tespit işlemi fonksiyonun forma tanımlanması işlemi.

C#:
static async Task PredictAndSaveAsync(YoloPredictor predictor, string image)
{
    var path = $"./images/{image}";
    var task = predictor.Metadata.Task;

    Console.WriteLine($"Running '{image}' (test: {task})...");

    var result = await predictor.PredictAndSaveAsync(path);

    Console.WriteLine($"Result: {result}");
    Console.WriteLine($"Speed:  {result.Speed}");

    Console.WriteLine();
}

Burada YOLO kütüphanesinin hedef görseller içerisinde yer alan nesneleri tanımlaması için forma aktarıldığı kodlar yer almakta.

Hedef captha 'nın görselleri indirilmesi işlemi.

C#:
static async Task<string> DownloadCaptchaImage(IWebDriver driver)
{
    try
    {
        var captchaImage = driver.FindElement(By.ClassName("fbc-imageselect-payload"));
        string imageUrl = captchaImage.GetAttribute("src");

        if (string.IsNullOrEmpty(imageUrl))
        {
            Console.WriteLine("reCAPTCHA görsel bağlantısı bulunamadı!");
            return null;
        }

        using HttpClient client = new HttpClient();
        byte[] imageBytes = await client.GetByteArrayAsync(imageUrl);

        string filePath = $"./images/captcha_downloaded.jpg";
        await File.WriteAllBytesAsync(filePath, imageBytes);

        Console.WriteLine($"CAPTCHA görseli indirildi: {filePath}");
        return filePath;
    }
    catch (NoSuchElementException)
    {
        Console.WriteLine("CAPTCHA görseli bulunamadı.");
        return null;
    }

Burada URL üzerinde yer alan captha görselinin tespit işlemi için ana bilgisayara otomatik olarak indirilmesi işlemi yer alıyor. Ögeyi denetle yaptığınız zaman captha URL fbc-imageselect-payload class src tag 'leri içerisinde yer alıyor. Şimdi YOLOSharp.Demo projesi üzerinde işlerimiz bittiğine göre çalıştıralım bakalım trafik lambası sonuçları bize ne verecek?

[ SONUÇ ]


k7u6bc3.jpg


du7au5u.jpg


Segment & Detect klasörleri üzerindeki trafik lambası tespiti sonuçları görüldüğü üzere çoğunlukla başarılı.