C# ile Web kamerasından görüntü almak

Birkaç seferdir oğlumla yapacağımız yaz projesinden bahsediyor ve ufak ufak kendimizi hazırladığımızdan bahsediyordum. Konuları birbiri ile ilişkilendirerek bugün de devam ediyoruz. Artık bu hızla devam edersek yaz bir yana, haftaya proje bitecek ve yeni bir proje aramak durumunda kalacağız diye korkmuyor değilim. Neyse, projemizin iş sırasında C# ile Web kamerasından görüntü almak vardı. Hatırlarsanız önceki bir yazımda da android tabanlı cep telefonumuzu web kamerası haline getirmiştik (Link). Şimdi telefonumuzdan  yaptığımız çok fonksiyonlu web kameramızın görüntüsünü, C# ile yaptığımız uygulamamız  üzerine nasıl aldığımızı paylaşacağız. Gözünüzde canlanabilmesi için uygulamanın web kamerası entegre edilmiş son halinin görüntüsü şöyle olacak;

Sizin resim olarak gördüğünü ama aslıda akan video’nun üzerinde oğlum, elinde konu mankenimiz olan Tankımız ve yanında sıkı bir Scratch geliştiricisi olan komşumuz Eylül‘ü görüyorsunuz
(Resmin üzerine tıklayarak büyütebilirsiniz.)

Tank Kontrol Sistemi

Şu aşamada konumuz kamera görüntüsü almak, o sebeple yön butonlarının işlevi bulunmamaktadır. Zaten zaman içinde onuda paylaşıyor olacağım.

Araştırmalarım sırasında gördüm ki toolbox içinde bulunan webcam_capture.dll isimli bir kütüphane ile de görüntü işlemi kolaylıkla yapılabiliyor. Fakat uzun vadede, farklı fikirleri geliştirdiğiniz zaman bu kütüphane image-processing konusunda yetersiz kalıyor. Ben birkaç deneme yaptım ve çok efektif bulmadım. Bu konuda meraklı iseniz sizinde deneyimlemeniz gerektiğini düşünüyorum.

Biz uygulamamızı sonraki fikirlerimizi/hayallerimizi de öngörerek AForge framework’ü ile geliştiriyor olacağız.

AForge geliştiricileri framework’ü şöyle özetlemişler;

AForge.NET is a C# framework designed for developers and researchers in the fields of Computer Vision and Artificial Intelligence – image processing, neural networks, genetic algorithms, machine learning, robotics, etc.

üzerine de söylenecek başka bir şey yok diyorum 🙂

AForge Framework’ü indirmek isterseniz linki şöyle;
http://www.aforgenet.com/framework/downloads.html

Hadi başlayalım

Form üzerine;

  • Video Streaming için 1 adet PictureBox
  • WebCam Driver’ları seçebilelim diye 1 adet Combobox
  • Yayını durdurup, başlatabilmek içinse  1 adet buton koydum

Uygulamamıza AForge frameworkünün 2 namespace’ini ekliyoruz : Video ve Video.DirectShow

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;

Ben kullanılmayan namespace’leri kapattım, siz dilerseniz direkt silebilirsiniz.

Kodları paylaşayım;

Formun Load olayı;

        private void Form1_Load(object sender, EventArgs e)
        {
            videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);

            foreach (FilterInfo device in videoDevices)
            {
                comboBox1.Items.Add(device.Name);
            }

            videoSource = new VideoCaptureDevice();
        }

Butonun Click olayı;

        private void button1_Click(object sender, EventArgs e)
        {
            if (videoSource.IsRunning)
            {
                videoSource.Stop();
                pictureBox1.Image = null;
                pictureBox1.Invalidate();
            }
            else
            {
                videoSource = new VideoCaptureDevice(videoDevices[comboBox1.SelectedIndex].MonikerString);
                videoSource.NewFrame += videoSource_NewFrame;
                videoSource.Start();
            }
        }

videoSource değişkenimizden türettiğimiz NewFrame metodu;

        void videoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            //throw new NotImplementedException();
            Bitmap image = (Bitmap)eventArgs.Frame.Clone();
            pictureBox1.Image = image;
        }

Form kapanırken çalışmasını istediğimiz form’un Closing olayı;

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

 

Hakan Müştak @2016/04

 


9 yorum

  1. Aykut dedi ki:

    abi süper olmuş. devamı olacakmı

  2. hmustak dedi ki:

    Olmasını ümit ediyorum. Zaman buldukça gelişiyor ve geliştiriyoruz.

  3. noisim dedi ki:

    Bu çalışmayı bitirme ödevi olarak satın almak istesek tüm kodlarıyla verirmisiniz

    • Mustafa Kemal Yazıcı dedi ki:

      Bunu satıyor musunuz? Paket olarak kaç lira olur?

      • hmustak dedi ki:

        Düşündüğün kadar zor değil, bir yerlerden başlarsan kısa sürede daha iyini yaparsın. Yeter ki başla! (bende amatörüm)

  4. Regaip dedi ki:

    bunu sql veri tabanına kayıt ederken yol göstermek için ne yapmalıyız ?

    çekilen resmi sql veri tabanına kayıtlı olarak ve dataGridwiev de gösterimli uygulamasını anlatırmısınız ??

  5. Murat dedi ki:

    videoSource ve videoDevices değişkenlerini nerde oluşturdunuz? Kodlar orada hata veriyor

hmustak için bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

question razz sad evil exclaim smile redface biggrin surprised eek confused cool lol mad twisted rolleyes wink idea arrow neutral cry mrgreen

*

Captcha Kontrolü * Zaman aşımı, sayfayı tekrar yükleyin


Top