Merhaba,
Bundan bir sene önce aklımda tasarlayıp yapmaya koyulduğum ve üç günlük bir çalışmamın ardından ortaya koyduğum Visual Studio C# temelli hem basit hem de ekonomik bir güvenlik sistemini sizlerle paylaşmak istedim. Çalışmamın temeli AForge.NET görüntü işleme Frameworküyle hareket algılamayı sağlayıp, TAPI sınıfını kullanarak modem aracılığı ile bilgisayardan mobil ve ev telefonlarını aramamızı sağlayan bir uygulamaya dayanmaktadır. Lafı çok uzatmadan programın çalışma biçiminden ve temel kod bileşenlerinden bahsedelim.
Önceden de bahsettiğim gibi hazırladığım programın işlevi, web kamerası sayesinde dış ortamdaki hareketi algılayarak bilgisayarımızın modemiyle sisteme girdiğimiz telefon numarasına belirli aralıklarla çağrı göndermesine dayanmaktadır. Telefon numarasının sisteme saklanması için ekstradan bir veri tabanı oluşturmak yerine sistem kayıt defterine yazdırmanın daha mantıklı olacağını düşündüğüm için çağrı gönderilecek telefon numarasını sistem kayıt defterine kaydedecek gerekli kodları programa ekledim. Telefon numarasının kaydı Anaform.cs dosyası içerisinde TelefonNoKontrol() isimli bir fonksiyonla gerçekleştirmektedir. Bu fonksiyon, uygulama her açıldığında sistemde çağrı gönderilecek bir telefon numarası olup olmadığını kontrol edip, duruma göre bizden çağrı numarası girişi yapılmasını ister. Telefon numarası girişinden sonra uygulama bizden sistemde tanımlı web kamerası ve modem aygıtlarının seçiminin yapılmasını istemektedir. Sistemde tanımlı web kamerası aygıtlarının listesini programa taşıyıp ve seçimi yapabilmek için Anaform.cs dosyası içerisinde try-ctach bloğu içerisinde hata denetimi yaptırıp, sistemde tanımlı web aygıtı varsa foreach döngüsüyle taratıp comboBox1.Items.Add(webcam.Name); koduyla comboBox1 elemanı listesine ekletebilme yoksa da catch bloğunda "Video Aygıtı Bulunamadı." mesajını verebilme özelliği için gerekli kodları yazdım. Aynı durum sistemde tanımlı modem aygıtımız için de geçerlidir. Ana Form ilk yüklendiğinde modemle ilintili hat listesi (Listline) sorgulanmakta ve duruma göre comboBox2.Items.Add(cl.LineName); koduyla modem aygıtları comboBox2 elemanımıza eklenmektedir. Web kamerası ve modem aygıtlarının seçiminden sonra bu aygıtların uygulama içinde kullanılabilir biçimde tanımlı olabilmesi için "Aygıtı Seç" butonuyla ilgili aygıtları aktif hale getirilmelidir. Aygıtı seçme olayını, Anaform.cs dosyası içerisinde button1_Click olayıyla gerçekleştirdim. Aygıtları aktifleştirdikten sonra "Algıyı Aç" butonuyla web kamerasının dış ortamdan aldığı görüntünün hareketlilik durumunu kontrol eden dedektör özelliğini aktifleştirebiliriz. Nesne ve hareketi algılama olayı Anaform.cs dosyası içerisinde DetectorSec() fonksiyonu ile gerçekleşmektedir. Fonksiyonun 0'dan 4'e kadar olan 5 parametresi bulunmaktadır. Bu parametrelerden 0, programın haraket algılma özelliğini inaktif etmeyi 1,2,3 ve 4 parametreleri ise haraket algılama referanslarını ifade etmektedir. Ortamdaki algılanacak cisimlerin ebatı ve hareket hasasiyetini en iyi şekilde kontrol eden hareket algılama referansı 4 olduğu için bunu tercih ettim. Dedektör tipinin seçimi Anaform.cs dosyası içerisinde button4_Click olayıyla tanımlanmıştır. Zaten button4_Click olayındaki kodu incelerseniz dtip sayısal değişkenine 4 değeri atanıp DetectorSec(dtip) koduyla fonksiyon icra edilmiştir. Eğer hareket algılama duyarlılığının değişmesi istenirse Kamera_YeniFrame fonksiyonu içerisinde cDetector.MotionLevel özelliğini ondalıklı sayı değerleriyle arttırıp azaltabiliriz. Değer ile hasasiyet arasında ters orantı olduğu için değer ne kadar artarsa hareket duyarlılığı o kadar azalıyor. İlgili fonksiyondaki cDetector.ObjectsCount özelliği ise aynı anda algılanacak nesne sayısını ifade ediyor. Mesela benim için sistemin alarm ve çağrı göndermesi için aynı anda sadece 1 nesnenin algılanması yeterli ise ilgili kod kısmından yazacağım kod cDetector.ObjectsCount >= 1 şeklinde olmalıdır.
Hareket algılandıktan sonra telefon çağrısının gerçekleşmesini sağlayacak fonksiyon ve merkezi ses düzeneğine ses alarmı gönderecek fonksiyonlar icra edilmektedir. Bu fonksiyonları Cagri.cs dosyası içerisinde tanımladım. Cagri.cs dosyasında 2 adet timer kullanarak, tekrarla_Tick timeri ile çağrı aramasının 135 sn'lik acil durum süresi içerisinde 45'er sn arayla toplam 3 defa gerçekleşmesini sağldım. alarmtekrar_Tick timeri ile de alarmın 135'snlik süresi içerisinde 35 sn aralıklarla çalınmasını sağladım. Cagri.cs dosyası içerisinde aramayap() fonksiyonunu tanımlayarak çağrı aramalarını bu fonksiyon sayesinde gerçekleştirdim. Alarmın çalınmasını sağlayan fonksiyonu da alarmcal() fonksiyonu olarak belirledim. Yalnız programın alarm sesi verebilmesi için herhangi bir wav formatlı ses dosyasının yolunu programda kod düzeyinde belirtmek gerekiyor ben ses dosyasının adını alarm.wav olarak belirleyip dosyayı C sürücüsünün ana dizinie koydum program içerisinde de dosyasının yolunu string path = "C:\\alarm.wav"; koduyla belirledim.
Programı yazarken Web kamerasından gelen görüntüyü yorumlamayı sağlayan ve bir tür görüntü işleme frameworku olan AForge.NET'i kullandım. Bilgisayardaki modem aracılığıyla telefon çağrısı yapabilmek için de TAPI sınıfını kullandım. Program içerisinde standart Visual C# elemanları dışında AForge.Net framework destekli KameraKutusu elemanını kendim tanımladım. Programın çalışması için işletim sisteminizde Framework 3.5'in yüklü olması gerekmektedir.
Programın açık kodlarına erişebilmek için TIKLAYINIZ