Kas 282018
 
OpenCV Kurulumu
296 kez okundu

OpenCV Kurulumu

OpenCV Kurulumu

Bu yazımda Ubuntu 18.04 üzerinde OpenCV kurulumunu ele alacağım. Kurulum bir sanal ortam üzerinde gerçekleşecek. Böylelikle farklı paketler arasında uyumsuzluk yaşama olasılığını en aza indirgeyeceğiz.

İşe, sistemimize virtualenv kurmakla başlayalım:

Aşağıdaki satırları ~/.bashrc dosyasına ekle ve dosyayı kaydedip çık.

Virtualenv paketinin kurulumunu böylece tamamlamış olduk.

Şimdi “ocv” isimli sanal sistemimizi tanımlayalım ve onun üzerine OpenCV’yi kuralım:

Yaptığımız kurulum işlemlerini doğrulayalım:

Sizin yaptığımız kurulumun OpenCV sürüm numarası farklı olabilir. Ama herhangi bir hata mesajı almamış olmalısınız.
Terminalinizdeki görüntü aşağıdakine benzemelidir:
OpenCV Kurulumu

Kurulumu kaynak kodlarını kullanarak yapmak mümkün. Ama bu konuyu uzatmak istemiyorum.

https://linuxize.com/post/how-to-install-opencv-on-ubuntu-18-04/ adresinde gerekli tüm ayrıntıları “Install OpenCV from source” başlığı altında bulabilirsiniz.

Şimdi önceki yazımda verdiğim küçük örneği biraz daha basitleştirerek denetleyelim.

Ben metin editörü olarak gedit kullanmayı tercih ediyorum. Siz de kendi tercihinizi kullanarak kodlayabilirsiniz. Dosyamızın adını “kamerakontrol.py” koyalım.

İlk komutlarımızı vermek için yeni bir komut penceresi açalım:

Aşağıdaki satırları “kamerakontrol.py” dosyasına yazıp kaydedelim.

Şimdi betiğimizi çalıştıralım:

Eğer web kameranız açıksa, şimdi ekrandan kendinize bakıyor olmalısınız.

“q” veya “Esc” tuşlarına basarak betiği durdurun.

Herhangi bir hata mesajı almadıysanız, komut pencereniz aşağıdaki gibi görünecektir:

OpenCV Kurulumu

Artık “ocv” sanal ortamını etkinleştirdiğinizde, OpenCV betiklerinizi istediğiniz gibi çalıştırabilirsiniz. Sanal ortamdan çıkmak istediğiniz zaman deactivate komutu vermeniz yeterlidir.

Gördüğünüz gibi, OpenCV Kurulumu oldukça kolay bir işlemdir.

Soru veya yorumlarınız için aşağıdaki yorum alanını kullanabilirsiniz.

Beni izlemeye devam edin.

Ahmet Aksoy

Kas 272018
 
335 kez okundu

OpenCV ile Yüz Saptama

opencv ile yüz saptamaBir önceki -ilk- yazımı tasarlarken bir “yüz saptama” (face detection) örneği vermeyi planlamıştım. Ama sonra fikrimi değiştirip, daha basit bir örnekle yetindim.

Oysa şimdi görüyorum ki, bu yazıları okuyan/okuyacak bir çok arkadaş için o yazı biraz basit kalmış olabilir.

O yüzden “yüz saptama” kodlarını da hemen paylaşayım istedim.

Bu amaçla cv2.CascadeClassifier() metodunun kullanacağı haarcascade_frontalface_default.xml dosyasına ihtiyacımız olacak. Bu dosyayı https://github.com/opencv/opencv/tree/master/data/haarcascades adresinden indirebilirsiniz. Aynı adreste sadece “yüz saptama” değil, pek çok beden parçasını tanımaya yönelik dosya mevcut. Gerek duyduğunuzda onları da bu adresten indirebilirsiniz.

Şimdilik sadece haarcascade_frontalface_default.xml dosyasını indirip, çalışma klasörümüzün içinde oluşturacağımız Cascades isimli klasöre kopyalayalım.

Yeni kodlarımız aşağıda. (Orijinal kodları https://www.hackster.io/mjrobot/real-time-face-recognition-an-end-to-end-project-a10826 adresinde bulabilirsiniz.)

Kodlarımızın büyük bölümünü bir önceki yazımda paylaşmıştım.

Öncelikle yeni indirdiğimiz dosyayı kullanıyor ve oluşan nesneyi faceCascade değişkenine atıyoruz.

Görüntümüz yine öntanımlı webcam üzerinden geliyor ve bu görüntüyü 640×480 olarak yeniden boyutlandırıyoruz.

Sonsuz döngümüzün içinde her görüntü karesini img değişkenine aktarıyor, sonra bu görüntünün gri bir kopyasını oluşturarak gray değişkeninde saklıyoruz.

Grileştirme, “kenar saptama” (edge detection) gibi işlemleri kolaylaştıran bir yaklaşımdır. İşlenecek veri miktarını azaltarak değişim hızının artmasını sağlar.

Görüntümüzün içinde birden fazla “yüz” olabilir. faceCascade.detectMultiScale() metoduyla yakaladığımız tüm yüzleri faces değişkeninde saklıyor ve bu yüzlere ait kareleri bir döngü içinde görüntümüzün üzerine işliyoruz.

Dikkat ederseniz, yüz bilgileri (x,y,w,h) şeklinde dönüyor. Yani sol üst köşenin koordinatları (x,y), genişlik w ve yükseklik h.

İstersek aynı işlemleri gray görüntümüze de uygulayabiliriz. (İlgili satırlardaki # işaretlerini kaldırmanız yeterlidir. Böylece hem renkli, hem de gri görüntülerimiz olur.)

Sonsuz döngümüz yine ‘Esc’ veya ‘q’ butonlarına basıldığında kırılıyor.

Döngü kırıldığında “cap” nesnesini serbest bırakıyor ve belleği temizliyoruz.

Peki sadece webcam ile çalışmamız zorunlu mu?

Elbette hayır!

Görüntüleri bir video dosyasından da alabiliriz. Sadece aşağıdaki gibi bir değişiklik yapmak yeterlidir:

Kullanacağınız video dosyasını ya çalışma klasörüne koyun, ya da tam adresini vermeyi unutmayın.

Bu yazıyı araya sıkıştırdım. O yüzden de “kurulum” bilgilerini bir sonraki yazıya ötelemiş oldum.

Beni izlemeye devam edin.

Ahmet Aksoy

Kas 272018
 
793 kez okundu

OpenCV ile Dünyayı Yeniden Keşfetmek

OpenCVOpenCV kütüphanesi’ni 1999 yılında Intel’den Gary Bradsky başlattı ve ilk sürümü 2000 yılında yayınlandı. Daha sonra bu çalışmalara Vadim Pisarevsky de katıldı. Halen OpenCV’nin Bilgisayar Görmesi ve Makina Öğrenmesi çalışmalarına yönelik desteği artarak devam etmektedir. (1)

OpenCV kütüphanesi hem C++, Python ve Java gibi dilleri; hem de Linux, Windows, OS X, Android ve iOS gibi platformları desteklemektedir. Kütüphane çalışmaları açık kaynaklıdır ve https://www.opencv.org/ sitesi üzerinden paylaşılmaktadır. Son sürüm OpenCV 4.0, 20 Kasım 2018 tarihinde duyurulmuştur.

Kütüphane ile ilgili daha ayrıntılı bilgilere ulaşmak isterseniz, kendi sitesine bir göz atmanızda yarar görüyorum.

Söz konusu kütüphanenin pratik kullanımına yönelik güzel örnekler paylaşan bir site daha var: https://www.pyimagesearch.com/ Her ne kadar arka planda kitap ve kurs pazarlaması bulunsa da, açık şekilde paylaşılan kod ve açıklamaları mutlaka izlemenizi öneririm. Olanaklarınız elveriyorsa Adrian Rosebrock’un kitaplarını almayı, ya da online kurslarına katılmayı düşünebilirsiniz. Elbette bunun için yeterli düzeyde İngilizce bilgisine ihtiyacınız olacak.

Bu ve izleyen bazı yazılarımda PyImageSearch veya benzer siteler tarafından paylaşılan kimi kodları temel alan bazı çalışmalar yayınlamayı düşünüyorum. Bu çalışmaları test ettiğim bilgisayarımda Ubuntu 18.04 işletim sistemi yüklü. Python sürümü 3.6. GPU destekli Tensorflow kurulumundaki sorunları aşmak için gerektiğinde Anaconda da kullanıyorum. IDE sistemim: güncel Pycharm Community sürümü. Örneklerde kullandığım OpenCV sürümü 3.4.3.

Adrian Rosebrock, betiklerinde komut modunu kullanmayı seviyor. Bense parametreleri dışarıdan vermek yerine betiğin içine gömmeyi daha fazla tercih ediyorum. Ayrıca, çok mecbur kalmadıkça ekrana print ettirdiğim ifadelerde geçen Türkçe karakterlerin “olması gerektiği gibi” görünmesini de önemsiyorum.

Lafı daha fazla uzatmadan ilk örneğimizi kodlayalım. Bu örnek bir başka siteden: https://www.hackster.io/mjrobot/real-time-face-recognition-an-end-to-end-project-a10826

Betiğimiz webcam görüntülerini tarayıp ekrana yansıtmaktadır.

cap = cv2.VideoCapture(0) satırı, varsayılan webcam cihazını aktif hale getirerek, görüntüleri yakalamasını sağlamaktadır.

cap.set() metodu ile görüntünün en ve yükseklik değerleri belirleniyor.

Sonsuz while döngümüzün içinde görüntü yakalama işlemi cap.read() metodu tarafından gerçekleştirilmekte ve “frame” değişkenine aktarılmaktadır. “ret” değeri okuma işleminin başarılı olup olmadığını saptamaktadır.

cv2.flip() metodu, webcam görüntünüz tepetaklak ise işe yarayacaktır. Eğer webcam görüntünüz normalse, bu satırı -benim yaptığım gibi- devre dışı bırakmanız gerekir.

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) satırı ile “frame” görüntüsünü “GRİ” renge çeviriyoruz.

cv2.COLOR_BGRGRAY parametresindeki “BGR” harfleri (B)lue-(G)reen-(R)ed (mavi-yeşil-kırmızı) kelimelerinden türetilmiştir. OpenCV RGB yerine BGR renk sistemini kullanmaktadır.

cv2.imshow() metodu imajları görünür hale getirmek için kullanılır. “frame” ve “gray” imajlarını ayrı ayrı görselleştiriyoruz.

OpenCV sisteminde olay yakalama mekanizması cv2.waitkey() metodu ile başlatılır. Bu metod kullanılmazsa ne görüntüleme, ne de tuş yakalama olayları gerçekleşebilir.

Döngüyü kırmak için ‘Esc’ veya ‘q’ tuşlarını tanımlıyoruz. Bu tuşlardan herhangi biri tıklandığında döngümüz kırılıyor; cap nesnesi sebest bırakılıyor ve oluşturulan tüm pencereler bellekten temizleniyor.

Eğer istersek görüntü karelerini webcam cihazımız yerine herhangi bir video dosyasından da aynı şekilde okuyabiliriz. Sonraki yazılarımda bu tür örnekleri de ele alacağım.

Örnek betiğimizden gördüğümüz gibi, OpenCV işlerimizi olağanüstü derecede kolaylaştırmaktadır.

Bu kütüphaneyi bir PC veya dizüstü üzerinde olduğu gibi, Raspberry Pi gibi mikro bilgisayarlar üzerinde de çalıştırabilmekteyiz. Bu konuyu da daha sonra ele alacağım.

Eğer bilgisayarınızda OpenCV zaten kuruluysa, örneğimizi de kolayca çalıştırmış olmalısınız.

Ama bu kütüphaneyi ilk kez kuracaksanız, işiniz o kadar kolay olmayabilir. Çünkü bu kütüphane çok geniş bir alana el attığı için pek çok başka kütüphanenin varlığına ihtiyaç duyar. Öncelikle bu kütüphanelerin kurulup hazır hale getirilmesi gerekiyor.

Bu yazıyı daha fazla uzatmamak için OpenCV kurulumunu bir sonraki yazımda ele alacağım.

Beni izlemeye devam edin.

Ahmet Aksoy

(1) – https://docs.opencv.org/3.4/d0/de3/tutorial_py_intro.html

  tarafından 12:12 itibariyle gönderildi.