Csharp’ta WEBCAM Nasıl Kullanılır?

Bu yazımda da, Aforge.NET kütüphanesi kullanarak, Csharp windows form uygulamalarında webcam nasıl kullanılır göstermek istiyorum.

Bir windows form uygulaması açarak aşağıdaki şekilde tasarımını gerçekleştiriyorum.

Csharp’ta WEBCAM Nasıl Kullanılır

Formuma aşağıdaki kontrolleri ekledim ve özelliklerini de aşağıdaki şekilde değiştirdim.

  • 1 adet Combobox: name özelliğini cmbKamera yaptım.
  • 1 adet Button, text özelliğini Başlat yaptım. Name özelliğini de btnBaslat yaptım.
  • 1 adet Picturebox , BorderStyle özelliğini Fixed 3D yaptım.
  • 1 adet Label: text özelliğini Kamera: yazdım.

Diğer kısımlar da tamamen tasarımsal düzenlemeler. İstediğiniz gibi düzenleyebilirsiniz. Birde buton da dikkat ederseniz text özelliğine Başlat yazdım, ama B harfinin altı çizili. Bunu yapabilmek için text kısmına yazarken önüne ve & işaretini koyun. Yani &Başlat şeklinde yazdım.

Sonra sağ tarafta projem üstünde sağ tıklıyorum ve Manage Nuget Packages diyorum.

Csharp’ta WEBCAM Nasıl Kullanılır

Aforge.Video.DirectShow kütüphanesini eklemem lazım. Arama kısmında Aforge yazıyorum.

Aforge.Video.DirectShow seçiyor ve install diyerek yüklüyorum.

Csharp’ta WEBCAM Nasıl Kullanılır

Yüklendiğinde solution explorer alanında projeme ait references tıkladığımda Aforge referanslarını görebilmeliyim.

Csharp’ta WEBCAM Nasıl Kullanılır

Aforge.NET kütüphanesi yine açık kaynaklı bir c# frameworküdür. Program geliştiriciler, bilimsel araştırma yapan kişier için özellikle görüntüleme işleme de veyapay zeka uygulamalarında kullanılması amacı ile geliştirilmiş bir kütüphanedir. Sadece bu iki alanda değil tabi, nöral ağlarda yani insan beyni ve sinir sistemini taklit eden yapay zeka uygulamalarında, genetik algoritmasında, fuzzy lojikte yani bulanık mantıkta, machine learning dediğimiz makine öğrenmesinde ve robotikte de çok kullanılır.

Aforge.Video.DirectShow kütüphanesinde DirectShow arayüzü vasıtası ile video kaynaklarına erişim sağlayan classlar mevcuttur. Bunlara örnek verirsek; usb web kameralar, görüntü yakalama aygıtları, video dosyaları örneklendirilebilir. Aynı zamanda IP kameraların kullanımında da tercih edilir.

Yavaş yavaş kodlamaya geçelim.

Kodlama Aşaması:

Formun yüklendiğinde öncelikle bilgisayarda webcam var mı bunu tespit edip, akabinde webcami comboboxa ekleyeceğim. Bu işlem formun load olayında olacak.

Daha sonra butonun click eventine kodları yazacağım. Burada webcam tarafından çekilen fotoğrafların alınması işlemi olacak.

Şimdi burada tabi Aforge.Video.DirectShow içinde yer alan classlar ve onlara ilişkin metotları kullanacağım için kodlar biraz karışık gelebilir. Elimden geldiğince ne nereye ait belirteceğim, ancak tabi Aforge.Video.DirectShow kütüphanesinin detayını vermem bu yazıda mümkün değil.

FilterInfoCollection: Belirtilen kategorideki DirectShow filtrelerini numaralandırma için kullanılır. Yani benim bilgisayarımda kaç kamera var bunu bulmak için kullanıyorum.

VideoCaptureDevice: Bu class bilgisayarımızda bulunan DirectShow arayüzünü destekleyen harici veya dahili bağlanmış kamera, görüntü yakalama cihazı v.b aygıtlardan video verilerini yakalar. Deklanşör düğmesi olan veya bir tetikleme için yazılıma ihtiyaç duyan anlık grüntü kaydetme cihazlarından da görüntü yapılmasına izin verir. Hem video boyutu hem de anlık görüntü boyutu yapılandırılabilir. Yani cihazımdaki kameram burada tanımlanıyor.

FilterCategory: Filtreleme kategorisi için kullanılan bir classtır.

VideoInputDevice: Bağlı olan video aygıtlarını tutar.

FilterInfo: Kullanılabilir video aygıtları hakkında bilgi sağlar.

Bitmap: Piksel verilerinden oluşan görüntüler üzerinde çalışmak için kullanılan bir sınıftır.

Şimdi kodlara geçelim:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using AForge.Video;
using AForge.Video.DirectShow;

namespace WebCamKullanim
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //FilterInfoCollection ve VideoCaptureDevice sınıfından nesnelerimi türettim. FilterInfoCollection cihazımdaki tüm kameraları, yakalama cihazlarını vs bulur. VideoCaptureDevice ise benim kullanacağım kamera için değişkenim olacak.
        FilterInfoCollection Cihazlar;
        VideoCaptureDevice kameram;

        //Formun load olayında bilgisayarıma bağlı olan dahili ve harici kameraları tarıyorum ve comboboxa ekliyorum
        private void Form1_Load(object sender, EventArgs e)
        {
            Cihazlar = new FilterInfoCollection(FilterCategory.VideoInputDevice);

            //FilterInfo cihazdaki görüntü yakalama cihazları hakkında bilgi tutar.
            foreach (FilterInfo cihaz in Cihazlar)
            {
                cmbKamera.Items.Add(cihaz.Name);
            }
            //İlk bulduğu kamera ismi görünsün diye ilk atamayı yaptık, 0 verdik.
            cmbKamera.SelectedIndex = 0;

            kameram = new VideoCaptureDevice();
            
        }

        private void btnBaslat_Click(object sender, EventArgs e)
        {
            kameram = new VideoCaptureDevice(Cihazlar[cmbKamera.SelectedIndex].MonikerString);

            kameram.NewFrame += VideoCaptureDevice_NewFrame;
            kameram.Start();
        }

        //Kullanılan cihazın metodunu oluşturuyorum
        private void VideoCaptureDevice_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (kameram.IsRunning)
            {
                kameram.Stop();
            }
        }
    }
}

Ve çalıştırınca kameramız açılıyor.

Csharp’ta WEBCAM Nasıl Kullanılır

Şimdilik bu kadar 🙂

Bir cevap yazın

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