RSS

GNU/Linux Ortamında Webcam İle Hareket Algılama

01 Oct

Başlık biraz fazla ciddi gelmiş ya da kafa karıştırmış olabilir o yüzden kısaca derdimi ve bu makalenin ana temasını belirteyim: Basit bir kamerayı GNU/Linux çalıştıran bir PC´ye USB portu üzerinden bağladıktan sonra bir tür ilkel gözetleme/uyarma sistemi kurma işini adım adım anlatmak.

Yemeği hazırlamaya başlamadan önce malzeme listesine bir göz atalım:

  • 1 adet PC
  • 1 adet Debian tabanlı KNOPPIX 3.1 Bootable Live CD
  • 1 adet PHILIPS PCVC 730K webcam
  • 1 adet hareket tespit (motion detection) yazılımı

Yukarıda liste elbette birebir sahip olunması gereken bir liste değildir. Bu yazıda anlatılan uygulamayı başka tür bir kamera ve yazılımla da yapabilirsiniz.

Teknik detaylara geçmeden önce birkaç önemli noktaya dikkat çekmekte fayda var. Akılda bulundurulması gereken en önemli prensiplerden biri “yazılıma göre donanım” kuralıdır. Bu kural kamera alırken de aynen geçerlidir, bu yüzden de bu tür bir cihazı almadan önce kullandığınız GNU/Linux sisteminde ilgili cihazı destekleyen sürücüler (modüller) bulunup bulunmadığını didik didik etmeniz başlangıçta vakit kaybı gibi görünse de sonrasında sizi baş ağrılarından ve uykusuz gecelerden kurtaracaktır (tabii süper bir C programcısı iseniz ve herhangi bir donanım için birkaç saat içinde bir sürücü yazıp bunu çekirdeğe gömebiliyorsanız o zaman bu dediklerim geçerli değildir, karşınızda ceketimi ilikler ve derin bir tefekküre dalarım😉

Yaptığım araştırmalara göre şu anda piyasada en kolay ve yaygın bulunan kameralar pwc modülü (sürücüsü) tarafından desteklenen Philips, Creative (bazı modeller), Logitech (bazı modeller) kameralar ile ov511 modülü tarafından desteklenen kameralar. Tabii bu ikisi dışında da alternatifler mevcut (ancak bu iki sürücünün onlarca farklı marka ve modeli desteklediğini akılda bulundurmakta fayda var).

Şimdi gelelim ikinci önemli prensibe: “yazılımın (sürücünün) web sayfasını/belgelerini didik didik edin, 4 kere okuyun, en ufak bir şüphede ya da belirsizlikte diğer kullanıcılara ya da doğrudan yazılım geliştiriciye danışın” (biraz uzun bir kural oldu biliyorum!). Belki biraz abartılı gelmiş olabilir ya da deneyimli GNU/Linux kullanıcılarının bıyık altından gülmelerine yol açmış olabilir ama siz gene de bana kulak verin. Bunu somut bir örnekle açıklamam gerekirse Philips’ten daha iyisini bulamam herhalde. PWC sürücüsünün sayfasına baktığınızda desteklenen kameralar arasında PCVC 720K modelini göreceksiniz ama aynı zamanda desteklenmeyen kameralar arasında da PCVC 720K modeli mevcut. Kafa karıştırıcı değil mi? Değil, daha doğrusu söz konusu sürücüyü geliştiren arkadaşımızın açıklamasına göre Philips, PCVC 720K´nin eski modeli yani PCVC 720K/20´yi üretmeyi bırakıp çok benzer bir isim altında PCVC 720K/40’ı üretmeye başladığında çipseti değiştirmiştir ve bu yüzden bu yeni model Philips PCVC 720K olarak görünmekle ve pwc sürücüsü tarafından desteklenmekle birlikte eski model (yani 720K/20), ov511 sürücüsü tarafından desteklenmektedir. Eğer kafanız yeterince karışmadı ise şunu da ekleyeyim PCVC 720K´nın yeni model mi eski model mi olduğu kutusunun üzerinde yazmamaktadır, bunu ancak kutuyu açıp USB kablosunun ucundaki etiketteki yazılara bakarak anlayabilirsiniz.

Yukarıda bahsedilen temel noktaları dikkate alarak kamera seçiminizi yaptınız, sistemi kurmaya hazırsınız. O halde adım adım yapılması gerekenlerden bahsedelim.

Bilgisayarınızı açtıktan sonra gerekli modülleri kurmak için root yani “superuser” olmanızda fayda var. Şimdilik kamerayı arkadaki USB portuna TAKMAYIN. Öncelikle sistemdeki mevcut modüllere lsmod komutu ile bir göz atalım:

# lsmod

Module                  Size  Used by    Not tainted
autofs4                 8660   1  (autoclean)
via82cxxx_audio        18620   0 
ac97_codec              9800   0  [via82cxxx_audio]
uart401                 6020   0  [via82cxxx_audio]
sound                  54572   0  [via82cxxx_audio uart401]
soundcore               3396   4  [via82cxxx_audio sound]
parport_pc             24808   0 
parport                22528   0  [parport_pc]
agpgart                31136   0  (unused)
serial                 51908   0  (autoclean)
usb-uhci               21644   0  (unused)
usbcore                56736   1  [usb-uhci]
apm                     9644   1 
rtc                     6940   0  (autoclean)
cloop                  23396   1 

Sizin sisteminizde de yukarıdakine benzer bir çıktı olacaktır ve görüleceği gibi büyük ihtimalle USB altyapısı ile ilgili sürücüler halihazırda yüklü bulunmaktadır. Bunlar yüklü değilse bile birazdan göreceğiniz modül (sürücü) yükleme yöntemi ile gerekli USB sürücülerini de kolayca kendiniz yükleyebilirsiniz. Aklınızda bulunması gereken en önemli şey usbcore ve usb-uhci (ya da usb-ohci) modüllerinin yüklü olması gerektiğidir.

Temel USB modüllerinin yüklü olduğunu var sayarsak şimdi ilk olarak yapılması gereken videodev yani v4l (video for linux) modülünü yüklemek. Söz konusu modül TV kartı, kamera, vs. gibi cihazlardan görüntü yakalamak için gerekli altyapıyı sunmaktadır.

Modül yükleme işini modconf programı ile yapacağız.

# modconf 

komutunu çalıştırdığınızda karşınıza gelen ana menüden kernel/drivers/media/video seçeneğini seçmelisiniz. Hemen ardından bu tür bir görüntü ile karşılacaksınız. Bu aşamada videodev seçeneğini seçip sisteme yükleyebilirsiniz. Bu kısmı başarı ile tamamladıktan sonra (yükleme işleminden sonra aynı yere gelirseniz ilgili modülün yanında bir + işareti olduğunu görebilirsiniz) sıra geliyor asıl kamera sürücüsünü yüklemeye.

Bu makale bağlamında kullanılan pwc sürücüsü (diğer kamera sürücüleri ile birlikte) kernel/drivers/usb seçeneğinin içinde bulunmaktadır. Buraya girdiğinizde karşınıza çıkan şu listeden ilgili pwc modülünü seçip yükleyebilirsiniz. Aynı listede diğer kamera sürücülerini de görebilirsiniz.

Gerekli modüller yüklendiğine göre artık modconf programından çıkıp komut satırına dönebiliriz. Ve artık elimizi donanıma sürmenin zamanı geldi. Cesurca (ve her ihtimale karşı dua ederek😉 kameramızın kablosunu USB portuna yavaşça yerleştiriyoruz ve tam olarak oturduğundan emin oluyoruz.

Kamerayı taktığınızda normalde sistem herhangi bir mesaj vermeyecektir (ne de olsa MS Winblows kullanmıyoruz, karşımıza zıplayan pencereler yok😉. Peki kameranın sistem tarafından düzgün olarak algılanıp algılanmadığını nasıl anlayacağız? Basit! Devreye sistemle ilgili son mesaj kayıtlarını gösteren dmesg komutu girer:

# dmesg | grep pwc

pwc Philips PCA645/646 + PCVC675/680/690 + PCVC730/740/750 webcam module version 8.6 loaded.
pwc Also supports the Askey VC010, Logitech Quickcam 3000 Pro, Samsung MPC-C10 and MPC-C30,
pwc the Creative WebCam 5, SOTEC Afina Eye and Visionite VCS-UC300 and VCS-UM100.
pwc Philips PCVC730K (ToUCam Fun) USB webcam detected.
pwc Registered as /dev/video0.

Son iki satır her şeyin yolunda olduğunun (şimdilik) bir göstergesidir. Bu aşamada sistem daha doğrusu pwc sürücüsü kameramızı doğru olarak algıladğını belirtmektedir. Şimdi sırada kameranın düzgün görüntü verip vermediğini test etmek var. Bunun için pek çok yazılım kullanabilirsiniz (gqcam, xawtv) ancak benim tercihim xawtv´den yana. TV kartı kullananlara hiç de yabancı olmayan bir yazılım😉

Herhangi bir parametre veya seçenek kullanmadan doğrudan yazılımı (arka planda) çalıştıracak olursak (artık süper kullanıcı yani root kullanıcısı olmamıza gerek yok):

$ xawtv &

Şuna benzer bir görüntü ile karşılaşırız:

xawtv_small

Eğer hareket ettiğinizde bunu yansıtan bir görüntü ile karşılaşıyorsanız artık kameranızın düzgün çalıştığından emin olabilirsiniz, kanıt karşınızda. Dikkat edilmesi gereken bir nokta: Eğer biraz bulanık bir görüntü varsa bunu kameranın üzerindeki objektifi sağa sola çevirerek ayarlayabilirsiniz.

Buraya kadar işler yolunda gitti ise artık sıra, yazının başlığında belirtilen mini alarm sistemimiz kurmaya gelmiş demektir. Bunun için pek çok alternatiften birini değerlendirebilirsiniz. Benim tercihim motion isimli bir hayli yetenekli bir yazılım. Söz konusu yazılımın temelde yaptığı şey kameradan sürekli görüntü almak ve her görüntüyü bir önceki görüntü örneği ile kıyaslamak ve eğer ard arda gelen iki görüntü arasında ciddi bir fark varsa (buradaki ciddiyet parametresini siz belirleyebiliyorsunuz) hareket tespit edildiğini belirtip sizin kendisine yapmasını söylediğiniz işi yapmak. Bu yetenekli ve çok özellikli programın detaylarına burada girmeye zamanım ve vaktim yok o yüzden okuyuculara tavsiyem web sitesini ve man sayfasını incelemeleri. Söz konusu yazılımın kaynak kodunu çekip tar ile açmanız, oluşan dizine gitmeniz ve ./configure, ardından da make komutları ile programı derlemeniz mümkün.

Yukarıda da belirttiğim gibi hareket tespit etme yeteneği olan bu yazılım, hareketi tespit ettiği anda sizin istediğiniz herhangi bir komutu ya da komutları içeren bir betik dosyasını çalıştırabilir. Örneğin hareket tespit edildiğinde şu tip bir dosyayı çalıştırılmak üzere hazırlayabiliriz:

#!/bin/sh

# hareket.sh

tarih=`date`
echo "DIKKAT! $tarih tarihinde bir hareket tespit edilmistir!"

# internete baglan
# acil - hareket tespit konu baslikli bir e-mail yolla
# paralel porta bagli ev elektrik kontrol sistemini devreye sok
# tüm ev isiklarini yakip söndür
# sireni caldir, ortaligi ayaga kaldir
# vs. ...

Şimdi bu dosyayı motion programının bulunduğu dizine yerleştirdikten sonra şöyle bir deneme yapabiliriz:

$ ./motion -E hareket.sh
Unkown config option: "ffmpeg_cap_new"
Unkown config option: "ffmpeg_timelaps"
config_thread
1
thread0 device: /dev/video0 input: 2
thread pid: 9119
thread1 device: /dev/video0 input: 1
thread pid: 9120
waiting for threads to finish, pid: 9117
ioctl (VIDIOCGCHAN): Invalid argument
ioctl (VIDIOCGCHAN): Invalid argument
Webcam server listning on port: 8001
.
.
.

Split Time is    3437. Applying   6563 delay. Avg Frame Time   10000 Frame Error 0
ioctl (VIDIOCGCHAN): Invalid argument
ioctl (VIDIOCGCHAN): Invalid argument
ioctl (VIDIOCGCHAN): Invalid argument
Split Time is    6643. Applying   1784 delay. Avg Frame Time   11573 Frame Error 1573
ioctl (VIDIOCGCHAN): Invalid argument
Split Time is    6490. Applying   2331 delay. Avg Frame Time   11179 Frame Error 1179
ioctl (VIDIOCGCHAN): Invalid argument
ioctl (VIDIOCGCHAN): Invalid argument
.
.
.

Motion detected
Error while creating directory: No such file or directory
$ Executing external command '../hareket.sh'
DIKKAT! Sal Eyl 23 21:26:41 CEST 2003 tarihinde bir hareket tespit edilmistir!

Eğer kameranın karşısında bir miktar hareket ederseniz ya da kameranın görüş alanında değilken söz konusu komutu çalıştırıp sonra kameranın önünden geçerseniz yukarıdaki gibi bir çıktı ile karşılaşacaksınız. Kendi evimde yaptığım denemelerde normal ışıklandırması olan bir odada 2.5 – 3 m.lik bir mesafe uzaktan odaya girdiğimde ve kameranın görüş alanına girdiğimde sistemin çalıştığını tespit ettim. Siz de kendi sisteminizde farklı ışıklandırma koşullarında, değişik hareket değişim tolerans seviyeleri ile ve daha uzak mesafelerde testlerinizi gerçekleştirebilir ve kameranızın (ve söz konusu yazılımın) ne kadar hassas ve güvenilir olduğunu test edebilirsiniz.

hareket.sh kabuk betik dosyasında da gördüğünüz gibi bir kez hareket tespit edildikten sonra sisteme ne yaptıracağınız tamamen size kalmış bir şey. İster cep telefonunuza SMS yollatırsınız, ister ofisinize e-posta. Ya da belki söz konusu hareketi kaydedebilir ve sonra bunu izleyebilirsiniz. Ya da web üzerinden ne oluyor odamda (evimde, ofisimde, vs.) diye bir göz atabilirsiniz. Bu bakımdan tamamen hayalgücünüz ile sınırlısınız.

Özet

Bu makalede basit bir PC kamerası ve GNU/Linux kullanarak ilkel bir hareket tespit etme tabanlı çok basit bir gözetleme/alarm sisteminin nasıl kurulacağı ele alınmıştır.

Temel olarak kamera seçimi, sisteme kamera ile ilgili modüllerin yüklenmesi ve ardından da hareket tespit sistemi yazılımının kurulumu anlatılmış ve basit bir örnek verilmiştir.

Söz konusu sistemin bir kez çalışır ve hareket algılar hale getirildikten sonra çeşitli amaçlarla kullanılabileceği (gözetleme, izleme, alarm, vs.) vurgulanmıştır.

Bu yazının hazırlanmasında dolaylı yoldan katkıda bulunan tüm Debian posta listesi kullanıcılarına teşekkürü bir borç bilirim. Listeye üye olduktan sonra sorduğum sorulara yaklaşık yarım saat içinde dünyanın çeşitli yerlerinden pek çok cevap aldım (teknik destek ve danışmanlık diye buna derim!) ve üzülerek de olsa listeden ayrılmak zorunda kaldım (günde 400 kadar e-posta geliyordu😉. Ayrıca KNOPPIX Forum´da da bana yardımcı olan kullanıcılara teşekkür etmek istiyorum.

Bunlara ek olarak değişik kameraları temin ve test etme konusunda bana ciddi destek vermiş olan Sera Bilgisayar´a ve Mehmet Bey´e de teşekkürü bir borç bilirim. Umarım bu yazı yapacağınız fazla mesailerde size bir nebze yol gösterebilir ve beyninizi tahrik edebilir.

 
Leave a comment

Posted by on October 1, 2003 in Linux, security

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: