OpenCv nin yeni versiyonundan bahsetmiştik.
Windowsda Python için OpenCv kurulumu
En büyük yenilik Derin öğrenme modellerini opencv içinden çalıştırmanıza imkan sağlayan DNN modülünün, ana dağıtıma eklenmesi olmuştur. Halen yoğun bir şekilde geliştirilen bir modül. Derin öğrenmenin üst düzey popülerliğinde opencv camiasıda buna kayıtsız kalamazdı. Bizde bu yazımızda bu modülü kullanan bir örneği anlatıp paylaşacağız.
Öncelikle DNN den bahsedelim. OpenCv nin DNN modülü genel bir ihtiyaç aslında. DNN ağlarını eğitmek için pek çok kütüphane meydan çıkdı. Her birsinin değişik iyi ve kötü yanları var. Bizde iki yazıyla bu konudan bahsettik
Derin Öğrenmede Kütüphane Savaşları 1 , 2
Bir başka ve daha yaygın ihtiyaç daha var. Eğitilmiş modellerin kullanılması. Elbette kendi kütüphaneleri içinden kullanmanız mümkün. Ama hem caffe, hem torch , hem tensorflow kütüphanesini kullanmak istersek ne olacak ? her birisiyle ayrı ayrı uğraşmak yerine bir kütüphane olsa eğitilmiş modelleri sadece çalıştırmak için kullanabilsek. İşte OpenCv de DNN tamda bu iş için geliştiriliyor. Şimdilik en büyük eksikliği sadece cpu üzerinden çalıştırılıyor olması. Halen vadettiklerini hepsini gerçekleştiremiyor ama yoğun olarak geliştiriliyor.
Gelelim DNN örneğimize. Biz bu yazımızda bir nesne tespit ağı olan SSD nin hafif versiyonu Mobil SSD ağını çalıştıracağız.
SSD bahsedelim , Single Shot MultiBox Detector kelimelerinden oluşturulmuş bir kıslatma.
2015 yılında, Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, Alexander C. Berg kişiler tarafından yayınlanan
SSD: Single Shot MultiBox Detector
makalesiyle ortaya çıktı. Ağ yapısı
başlangıcı VGG sonunda ise nesne sınıfı ve konumunu gösteren çerçeve veriyor.
Ana SSD github sayfası
github.com/weiliu89/caffe/tree/ssd
Bizim bu gün kullanacağımız Mobile SSD github sayfası
github.com/chuanqi305/MobileNet-SSD
Gelelim koda ;
Kodu kullanabilmeniz için OpenCV 3.3 ve üstü lazım.
OpenCV de caffe modeli kullanabilmek için 2 dosya lazım
- Ağ yapısını tutan prototxt dosyası
- Eğitilmiş Ağ ağırlıklarını içeren caffemodel uzantılı dosya
cv2.dnn.readNetFromCaffe fonksiyonuyla bu ikisini kullanarak ağı oluşturyoruz.
Ağı çalıştırmak için kullacağımız görüntüyü öncelikle ağın giriş ebatına (300x300) çeviriyoruz. Sonrasında görüntüyü
cv2.dnn.blobFromImage fonksiyonuyla blob a çeviriyoruz. Oluşturduğumuz ağ nesnesine bu blobu verip ağı çalıştırıyoruz.
Çalışan ağ bize tespit ettiği nesneleri ve konumlarını ve tespitin eminlik değerini verir. Bundan sonrasında resim üzerinde çerçeve ver sınıf bilgilerini yazdırıyoruz.
Koda OpenCv kitabının kodlarının python versiyonlarını yazdığımız
github.com/birolkuyumcu/opencvbook_python
ders 13 olarak ulaşabilirsiniz
her türlü görüş ve önerilerinizi bekleriz