C# Accord.NET – Face Detection(Yüz Algılama)

Merhaba,

Son zamanlarda görüntü işleme üzerine çalışmalarda bulunmaktayım. Tabi bu çalışmalarımda yoğunluk olarak AForge.NET, EmguCV ve Accord.NET frameworklerini kullanmakta ve bu teknolojilere ait tüm keşiflerimi tek tek siz değerli okuyucularıma sunabilmenin telaşesiyle makaleler oluşturmaktayım. Her konuda olduğu gibi şuana kadar görüntü işleme üzerine yaptığım çalışmalar o kadar lezzet ve haz verici sonuçlar vermiştir ki zamanla bu çalışmalar üzerine içerikler oluşturdukça ne demek istediğimi sizlerde anlayacaksınız. Misal bu yazımızda; bu eğlenceli çalışmalardan netice elde ettiğim bir konu olan ve C# ile bir görüntü üzerinde yüz algılama olarak nitelendirilen Face Detection olayının Accord.NET frameworkünü kullanarak nasıl gerçekleştirildiğini ele alacağız.

İçeriğe başlamadan belirtmek istediğim mühim bir nokta vardır. Birazdan da göreceğiniz üzere Face Detection uygulamasını Accord.NET ile basit ve hızlı bir şekilde gerçekleştirebileceğiz. Halbuki bu uygulama tarafımızdan bir başlangıç seviyesinde kabul edilecektir ve zamanla aynı işi daha yüksek teknolojide nasıl yapabiliriz konusunu ele alıp değerlendireceğiz. Bu konuda EmguCV ve diğer teknolojiler üzerinden araştırmalarıma devam etmekte olduğumu bilmenizi isterim.

Şimdi makalemize dönelim…

Makale sürecinde, görüntü açısından web kameradan besleneceğimiz için AForge.NET’in kameraya bağlanma işlevini gören sınıflarından yararlanacağımızı bilmenizi isterim. Bunların yanında süreci takip etmek istiyorsanız bir adet Windows Form projesi açıp, form üzerine bir adet PictureBox nesnesi eklemeniz gayet yeterli olacaktır.

İlk olarak Accord.NET kütüphanelerini projemize entegre ederek başlayalım. Bu işlem için Nuget penceresini aşağıdaki gibi kullanabiliriz.
C# Accord.NET - Face Detection(Yüz Algılama)

Yukarıda görüldüğü üzere Accord.NET kütüphanesini projemize entegre ediyoruz. Ayrıca kamera işlemleri için AForge.NET kütüphanesini kullanacağımız için de bu adresteki belirtmiş olduğum tüm kütüphaneleri projenize dahil etmeyi unutmayın.

Şimdi sıra geldi kod yazmaya.

Öncelikle sistemdeki dahili kameraya bağlanıp görüntü elde edelim.

        private void Form1_Load(object sender, EventArgs e)
        {
            KameralariGetir(pictureBox1);
        }
        public void KameralariGetir(PictureBox pb)
        {
            AForge.Video.DirectShow.VideoCaptureDevice FinalVideoSource;
            AForge.Video.DirectShow.FilterInfoCollection VideoCaptuerDevices;
            VideoCaptuerDevices = new AForge.Video.DirectShow.FilterInfoCollection(AForge.Video.DirectShow.FilterCategory.VideoInputDevice);
            FinalVideoSource = new AForge.Video.DirectShow.VideoCaptureDevice(VideoCaptuerDevices[0].MonikerString);
            FinalVideoSource.NewFrame += new AForge.Video.NewFrameEventHandler((sender, eventArgs) =>
            {
                Bitmap image = (Bitmap)eventArgs.Frame.Clone();
                pb.Image = image;
            });
            FinalVideoSource.DesiredFrameRate = 1;
            FinalVideoSource.DesiredFrameSize = new Size(1, 500);
            FinalVideoSource.Start();
        }

Evet… Bu işlemden sonra FinalVideoSource referansının NewFrame olayından devam edeceğiz.

Şimdi elde edilen her bir görüntü üzerinde Accord.NET ile bir çalışma gerçekleştirip yüz tespitinde bulunacak ve ilgili yüzün etrafını dikdörtgen ile çizerek vurgulayacağız.

            FinalVideoSource.NewFrame += new AForge.Video.NewFrameEventHandler((sender, eventArgs) =>
            {
                Bitmap image = (Bitmap)eventArgs.Frame.Clone();

                //Yüz bilgisini tutan sınıf. Daha doğrusu yüzün tanımlanmış matematiksel
                //yapısını tutan sınıf.
                Accord.Vision.Detection.Cascades.FaceHaarCascade cascade = new Accord.Vision.Detection.Cascades.FaceHaarCascade();
                //FaceHaarCascade nesnesini kullanarak görüntü üzerinde arama yapan
                //detektör.
                Accord.Vision.Detection.HaarObjectDetector detector = new Accord.Vision.Detection.HaarObjectDetector(cascade, 30);

                detector.SearchMode = Accord.Vision.Detection.ObjectDetectorSearchMode.Average;
                detector.ScalingFactor = 1.5f;
                detector.ScalingMode = Accord.Vision.Detection.ObjectDetectorScalingMode.GreaterToSmaller;
                detector.UseParallelProcessing = true;
                detector.Suppression = 3;

                //detector nesnesinin görüntü üzerinde bulduğu yüz ifadelerinin
                //dikdörtgen köşe bilgileri.
                Rectangle[] faces = detector.ProcessFrame(image);


                Graphics g = Graphics.FromImage(image);
                foreach (var face in faces)
                {
                    Pen p = new Pen(Color.Red, 10f);
                    //Her bulunan yüze ait dikdörtgenlerin
                    //grafik nesnesiyle çizilmesi.
                    g.DrawRectangle(p, face);
                }
                g.Dispose();

                pb.Image = image;

            });

Yapmış olduğumuz bu işlemlerden sonra projemizi derleyip çalıştırdığımız zaman aşağıdaki videodan da gördüğünüz üzere kameradan elde edilen görüntüler üzerinde yüz algılama işlemini başarıyla gerçekleştirmiş bulunuyoruz.

Dikkat edilirse eğer yapılan bu çalışmada Accord.NET teknolojisinin hassasiyet ve algılama derecesi oldukça düşük olduğu için yan ve yamuk açılardan olan yüzler algılanamamaktadır. Bu sıkınları yazımızın başında da ifade ettiğim gibi EmguCV vs. gibi teknolojiler ile ileride aşacağımıza inanıyorum. O halde bu ve bunun dışında nice işlemler üzerine istişare edeceğimiz konularda görüşmek üzere diyorum.

Hoşçakalın…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

2 Cevaplar

  1. Blaise Xen dedi ki:

    hi,

    I reported an issue to Ceasar, but I don’t know what is missing !
    here’s the link, I hope you can share your thoughts too,
    https://github.com/accord-net/framework/issues/886

  1. 06 Ağustos 2017

    […] kime ait olduğu o anlık mevzu bahis değildir. Bu konu üzerinde yapmış olduğumuz önceki şu ve şu çalışmalarıma göz […]

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

CAPTCHA (Şahıs Denetim Kodu) Resmi

*

Copy Protected by Chetan's WP-Copyprotect.