OpenCV ve Python ile ilgili yabancı kaynak veya kitapları ve örnek kodları buradan indirebilirsiniz...
21 Ocak 2017 Cumartesi
OPENCV PYTHON YABANCI KAYNAK VE ÖRNEK KOD
OpenCV ve Python ile ilgili yabancı kaynak veya kitapları ve örnek kodları buradan indirebilirsiniz...
OPENCV PYTHON İLE ARAÇ SAYMA
Bu projede araç sayma işlemi yapılmıştır. Yapılan işlem akıllı trafik sistemlerine uygulanabilir.
Yapılacak işlemlerden ve algoritmadan bahsedelim.Öncelikle videodaki arabaları bulmamız gerekmektedir.Araba bulmak için iki farklı yöntem uygulayabiliriz.
- Haarcascade sınıflandırıcısı ile araç bulma
- Arka plan çıkarma yöntemi ile araç bulma
Haarcascade sınıflandırıcısı: pozitif ve negatif resimlerin bilgilerinden oluşan "xml" uzantılı bir belgedir.Pozitif resimler videoda aranan nesneleri,negatif resimler ise aranmayan nesneleri temsil eder.
Arka Plan Çıkarma:Videoda değişen piksellerin yerini belirler ve videodan ayrıştırır.
Biz bu projede derleme hızı açısından daha hızlı olacağı ve cascade sınıflandırıcısı oluştururken yaşanacak vakit kaybı nedeniyle arka plan çıkarma yöntemi ile yaptık.
Algoritmayı anlatacak olursak;
- Video okunur.
- Arka plan çıkartılır.
- Kontürler bulunur.
- Kontür alanı bulunur ve alanın koordinatları bulunur
- Kontür alan parametreleri ile karşılaştırılır.(bu aşama diğer hareket eden nesneleri araç olarak saymaması için yapılır.)
- Kontür koordinatları belirli bir koordinat değerinden geçerse sayaç bir arttırılır.
Arka plan çıkarma yöntemi uyguladıktan sonra kontürleri bulma nedenimizi ise şu şekilde açıklayabiliriz. Herhangi bir videoya arka plan çıkarma uyguladığınızda hareketli nesnenin beyaz geri kalan bölgelerin ise siyah olduğunu görürüz.
Kontür işleminin tanımına baktığımız zaman aynı renk veya yoğunluğa sahip olan tüm kesintisiz noktaları (sınır boyunca) birleştiren bir eğri olarak basitçe açıklanabilir. yani videomuzda ki beyaz pikselleri hiyerarşik bir yapıya aktarır. Ve böylece araç alanını rahatça belirleyip belirli parametrelerle karşılaştırmamızı sağlar.
KOD:
import cv2 import numpy as np backsub = cv2.createBackgroundSubtractorMOG2() capture = cv2.VideoCapture("video.avi") sayac=0 if capture: while True: ret, frame = capture.read() if ret: fgmask = backsub.apply(frame, None, 0.01) cv2.line(frame, (50, 0), (50, 300), (0, 255, 0), 2) cv2.line(frame, (70, 0), (70, 300), (0, 255, 0), 2) im,contours, hierarchy = cv2.findContours(fgmask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) try: hierarchy = hierarchy[0] except: hierarchy = [] for contour, hier in zip(contours, hierarchy): (x,y,w,h) = cv2.boundingRect(contour) if w > 40 and h > 40: cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) if x>50 and x<70: sayac+=1 print(sayac) cv2.putText(frame,"Araba: "+str(sayac), (220, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 0), 2) cv2.imshow("Takip", frame) cv2.imshow("Arka Plan Cikar", fgmask) key = cv2.waitKey(60) if key == ord('q'): break capture.release() cv2.destroyAllWindows()
Kodumuzu inceleyecek olursak;
Arka plan çıkarma ve kontür işlemlerinden geçen videonun kontür parametreleri bulunur ve bulunan araç kare içine alınır.Bulunan kontür alanının eni ve boyu 40dan büyük ise araç olarak saptanır. ve videonun x=50 ve x=70 koordinatları arasındaki bölgeden geçerse sayac bir arttırılır.
SONUÇ:
Örnek kod ve video indirmek için tıklayın.