Bu yazı kapsamında
Python ile OPENCV kütüphanesini kullanarak tavana yerleştirilmiş
bir kameradan elde edilen görüntüler ile hareket eden nesneleri
(bizim örneğimizde kişileri) saymaya çalıştık. Bunun için
kullanacağımız algoritmanın temel adımlarını şu şekilde
sıralayabiliriz;
1- Background Subtraction : Sabit bir
arka plandan her gelen yeni görüntüyü çıkararak görüntüde
(videoda) değişen kısımların yani hareketli nesnelerin belirlenmesi
2- Object Tracking : Belirlenen bu ön
plandaki nesnelerin takip edilmesi
3- People Counting : Takip edilen bu
nesnelerin (hareketli kişilerin) belirli noktayı geçtiklerinde
sayılması ve geçiş yönünün belirtilmesi
( Kullandığımız videoyu şuradan indirebilirsiniz.. )
Background Subtraction için OPENCV
kütüphanesi içerisindeki fonksiyonlardan arka planının modellenmesinde Gaussian Mixture Model'in kullanıldığı
cv2.BackgroundSubtractorMOG() fonksiyonunu kullanıyoruz.
Bunun için ilk olarak masaüstünde kayıtlı olan çekilen alanın boş bir görüntüsünü yüklüyoruz. Daha sonra ise videoyu yükleyip her bir gelen frame 'e backgroundsubtraction işlemini uyguluyoruz.
Daha sonra maskelenmiş bu görüntüye (fgmask) dilation işlemi uygulayıp, cv2.findContours fonksiyonu ile fark görüntüsündeki bulunan nesnelerin alanlarını bulup bu alanı çevreleyen bir dikdörtgen çizdiriyoruz.
Örnek bir fark görüntüsü (fgmask) şu şekildedir. (Boş görüntüden videonun her bir frame' nin farkının alınmış hali)
Bu aşamaya kadar Background Subtraction işlemini yapıp ön plandaki yeni nesneleri yani kişileri bulmuş ve bunları bir dikdörtgen içerisine almış olduk. Ayrıca o anki bulunan kişileri aldığımız dikdörtgenlerin koordinatlarını (bir başka deyişle kişilerin konumlarını) ve bir önceki frame 'de geçen kişilerin konumlarını iki farklı listede(contours_now ve contours_previous) saklıyoruz.
Devamında ise ard arda gelen iki frame arasında bulunan contour lardan hangisinin bir diğer frame'de önceki ile aynı kişiye ait olduğunu (yani tracking işlemi) bulmamız gerekiyor. Bunun için bulunulan andaki frame deki contour lar ile bir önceki görüntüdeki(contours_previous) contour ları karşılaştırıp uzaklık olarak birbirlerine en yakın olanların aynı kişi olduğunu farzediyoruz ve contour_now listesindeki kişilerin contours_previous listesinde aslında hangi kişiye denk geldiklerini bu şekilde belirleyip bu bilgiyi de bir başka listede(closest_contour_list) saklıyoruz.
Böylece tracking işlemini geliştirdiğimiz basit, belki her zaman doğru olamayacak :) fakat iş de görebilecek bir algoritma ile çözmüş olduk. Ve son olarak videoda seçmiş olduğumuz bir orta noktaya (line) göre hareketin hangi yöne doğru olduğunu anlamaya çalışıyoruz. Başlangıçta People Counting diye adlandırdığımız bu problemi çözmek için ise; 'track' ettiğmiz kişilerin belirttiğimiz noktadan geçtikleri anda ard arda gelen frame lerdeki y koordinatlarına bakarak hangi yöne gittiklerini anlayıp buna göre ekranda sol üst köşede görüntülenen çıkan ya da gelen sayısını bir artırıyoruz.
Aşağıdaki video'da programın nasıl çalıştığını görüntüleyebilirsiniz. Geliştirilen algoritmada eksikler var mı var, yüzde yüz çalıştığını söyleyemeyiz. Neler eklenebilir, hangi kısımları düzeltilmeli gibi şeylere değinmeyeceğim, sadece kaba taslak bir örnek uygulama gerçekleştirmiş oldum ve paylaşmak istedim. Eksikleri gedikleri de bu işe kafa yoran birisi yani meraklısı düzeltebilir..
İbrahim hocam,merhaba.ben byiyifikir@hotmail.com'adresinden Mehmetali
YanıtlaSilopencv ile kişi sayma procenizdeki eksik satırlarıda paylaşmanız mümkünmü?
(1-7),28,46,72,99,ve diğerleri
İbrahim hocam,video'yu izledim,süpersiniz,maşallah.e2 tv kanalında person of interest adında bir film vardı,aklıma o geldi,videoyu izleyince.
YanıtlaSilpython yorumlayıcısı paralel işlemler(multithreding) yapılabiliyormu(java sanal makinada olduğu gibi),video'yu izleyince yapabiliyor,dedim,doğrusunu sizden öğrenmek isterim.
İbrahim hocam,opencv kütüphanesini pythona nasıl ekliyoruz.visual studio c++'da cmake ile opencv kütüphanesini derledikten sonra visual studio'ya ekliyorduk.pythonda opencv kütüphanesini nasıl derleyip,ekliyoruz.
YanıtlaSilPython için conda dağımı var, bir çok kütüphane ekli geliyor gayet kullanışlı. https://www.continuum.io/downloads
SilŞayet Conda ile Python 2.7 sürümünü yüklersen, terminalden aşağıdaki komut satırı ile tek bir komutta kolayca Opencv Yükleyebiliyorsun. Conda nın Python 3.4 sürümü galiba henüz Opencv desteklemiyor, hangi kütüphanelerin desteklendiğine dair ayrıntılı bilgi için (https://docs.continuum.io/anaconda/pkg-docs)
conda install -c https://conda.binstar.org/menpo opencv
Bu yorum yazar tarafından silindi.
YanıtlaSilHocam paylaşım güzel teşekkürler ancak 77-87 satırları arasında line var onu programın en başında mı tanımladınız çalıştıramıyorum programı eksik kod kısımları mı var acaba program da tamamını paylaşmanız mümkünmüdür. Teşekkürler
YanıtlaSilEvet "line" değişkeni en başta tanımlı olması gerek. Parça parça koymamın sebebi kodu çalıştırmak isterken detayına daha çok inip daha iyi anlaşılmasını sğlamak...
YanıtlaSilcould you please share code with me ? Akash.patel@wobot.ai
YanıtlaSilthanks
I have sent you an email.
Silcode please....... bell906@naver.com
YanıtlaSilHi, I have sent you an email, you can find the file as attachment
SilEven if I erase the line, it counts
SilMerhaba hocam.Kodu rica edeibilirmiyim.researcherman.asszy@gmail.com
YanıtlaSilMerhaba, açıklamaları okuyup parça parça verdiğim kodları yazarsan hem anlamış hem de koda ulaşmış olacaksın aslında. Sırf bu sebeple kodu direkt koymadım ve Türk arkadaşlara göndermemiştim. Herneyse mailine gönderdim şimdi, İyi çalışmalar
Silteşekkürler hocam.Bende anlamaya çalışıyorum.Fakat dilede çok hakim olmadığım için bağlantıyı iyi kurmadım.
Silhocam frame_empty kısmında benim sıkıntı çıktı.Orada tam yapcağımız şeyi anlamadım.frame_empty no such file hatası verdi.Burada frame_empty manual olarak mı oluşturcaz.Ne tip oluşturacağız bir de.
Silframe_empty videodaki alanın boş bir fotoğrafı olacak, yani videoda insan yokken bir fotoğraf alıp onu direk array olarak ya da görüntü olarak bilgisayara kaydedeceksiniz. Daha sonra bu boş görüntüyü referans olarak kullanmak için background alma işlemine ilk o boş görüntüyü veriyoruz.
Silkodu benimle de paylaşmanız mümkün mü e mail adresim sabihahazal@gmail.com
YanıtlaSilhocam kodu paylaşabılırmısınız
YanıtlaSilPchocpchocam41@gmail.com
YanıtlaSilHocam atamızın banada yazıcam yinede ama sen at
Öncelikle elinize sağlık çok teşekkür ederim Kodu eğer mümkünse benimle de paylaşabilir misiniz? Şimdiden çok teşekkür ederim.
YanıtlaSilserifecelikbas@yahoo.com
Bu yorum yazar tarafından silindi.
YanıtlaSilmerhaba kodu paylaşabilir misiniz.Teşekkürler.
YanıtlaSilfiratugur@gizia.com
hocam kodu paylaşabılırmısınız
YanıtlaSilfiratugur@gizia.com
Öncelikle bu güzel çalışmanızdan dolayı tebrik ve detaylı anlatımınızdan dolayı teşekkür ederim. Rica etsem kodu bizimle de paylaşır mısınız.... scaryevent704@gmail.com
YanıtlaSilTeşekkürler.
Kodunuzu paylaşırsanız sevinirim. Teşekkürler. remzigurfidan@gmail.com
YanıtlaSilMerhaba,kodu paylaşabilir misiniz? komastasmamasita@gmail.com
YanıtlaSilhocam kodu paylaşabilirseniz sevinirim.
YanıtlaSilcaneryldrim@gmail.com
Bu yorum yazar tarafından silindi.
YanıtlaSilHocam biz liseli bir grup olarak 3 gündür kodunuz üstünde kafa yoruyoruz ama oturtamadığımız bazı bölümler var boş frame kısmın halletik giren çıkan değişkenlerini ve çizgi değişkenini düzelttik ama hala farklı değerler alıyoruz proje kodlarını yollama ihtimaliniz var mıdır ? diyecektim.Teşekkür
YanıtlaSilsrhnergul@gmail.com
SilMERHABA TASARIM PROJEM İÇİN ARAŞTIRMA YAPIYORUM.KODDA ANLAMADIĞIM BAZI KISIMLAR VAR KODU YOLLAYABİLİR MİSİNİZ ? TEŞEKKÜRLER
YanıtlaSilgmz.ozturk99@gmail.com
Merhaba. Projem için kodları paylaşabilir misiniz?
YanıtlaSilsky_berk@hotmail.com
Merhaba. Projem için kodları paylaşabilir misiniz? Şimdiden çok teşekkür ederim.
YanıtlaSilmemoc2133m@gmail.com
Merhaba hocam elinize sağlık.
YanıtlaSilkodları benimlede paylaşabilirmisiniz.
by.tedirgin@gmail.com
Hocam merhaba kodları benimle de paylaşabilir misiniz? baranselaydn@gmail.com
YanıtlaSilHocam merhaba içerikleriniz gerçekten çok güzel.Rica etsem opencv ile kisi sayma sourcesini gönderebilir misiniz? aliturkdogdu.00@gmail.com
YanıtlaSilMerhaba hocam, eskik kısımları oturamıyorum opencv de yeniyim 2 gündür kodunuza bakıyorum fakat hala çözüm bulamadım. Kodu rica etsem paylaşır mısınız? poyraztalha410@gmail.com
YanıtlaSilHocam kodu benimle paylaşma imkanınız var mı, çok teşekkürler
YanıtlaSilzelihafedayi@gmail.com
muhammetalisonmez@gmail.com kodu atarsanız çok sevinirim
YanıtlaSilHocam rica etsem kodları paylaşabilir misiniz ? şimdiden çok teşekkür ederim. vyslgdr@gmail.com
YanıtlaSil(nvalkrc.63@gmail.com)
YanıtlaSilRica etsem kodu paylaşabilir misiniz?
(james6123211@gmail.com)
YanıtlaSilHocam öncellikle nasılsınız? Umarım iyisinizdir. Beni soracak olursanız ben çok iyiyim. Kendimi geliştirmek için sayfanızı sıkça takip ediyorum. Rica etsem kodları paylaşabilir misiniz? Mailim üstte yazıyor. Şimdiden teşekkür ederim.
Merhaba, daha önce yazan arkadaşlara dönüş yapamamıştım, seninle birlikte onlara da mail attım. İyi çalışmalar
SilHocam merhaba, acaba kodların eksik kısımlarıyla beraber gorkemsevinc41@hotmail.com adresine gönderebilir misiniz. Şimdiden çok teşekkür ederim.
YanıtlaSilMerhaba hocam, rica etsem kodların tümünü cumalieneskarabulut@gmail.com adresine gönderebilir misiniz? şimdiden teşekkür ederim sağlıklı günler.
YanıtlaSilMerhaba hocam, rica etsem kodların tümünü bhrbrl98@gmail.com adresine gönderebilir misiniz? şimdiden çok teşekkür ederim
YanıtlaSilSelamlar hocam. Rica etsem kodların tamamını bende alabilir miyim? e-posta adresi: ahmet8788@hotmail.com
YanıtlaSilBuradaki kodlara bakıp kendiniz yazamadı iseniz size Udemy kurslarımı öneriyorum? Hem bu kod hem de daha fazlası orada mevcut :)
Sil(Not: 2. linkteki kursta aradığınız örnek mevcut)
https://www.udemy.com/course/python-ile-goruntu-isleme/
https://www.udemy.com/course/python-uygulamal-egitim-opencvkeraspandas/
merhaba hocam
SilTraceback (most recent call last):
File "C:/Users/kbgem/PycharmProjects/pythonProject8/magazagirisi.py", line 8, in
frame_empty = np.load(path + "frame_empty")
NameError: name 'path' is not defined
böyle bir hata alıyorum yardımcı olur musunuz?
Merhaba Hocam, source codu rica etsem paylaşabilir misiniz?
YanıtlaSile-mail : hilalurun07@gmail.com
Emeğinize sağlık hocam. Kodu derledim ancak bir takım hatalar alıyorum. Acaba source code rica etsem paylaşabilir misiniz?
YanıtlaSileraydogan3534@gmail.com
Hocam elinize sağlık. Gayet güzel bir çalışma olmuş. Udemy'e baktım kodu yazamadım. Kodu eposta adresime gönderebilir misiniz ? sarkovic17@gmail.com
YanıtlaSilHocam Merhabalar,
YanıtlaSilElinize sağlık çalışmalarınız çok faydalı. Mümkünse kodu email adresime gönderebilir misiniz?
ramoking449@gmail.com
Hello, can u please send the source code.....serhatsisli353@gmail.com
YanıtlaSilabi allah aşkına kodu gönderir misin. 2 gün içinde proje için lazım. Çok hayra geçersin abi. lütfennn.......aktemuryigit@gmail.com
YanıtlaSilhocam eksik kodları göderebilirmisiniz ............. qilkercan@gmail.com
YanıtlaSil