Ubuntu Üzerine OpenCV Kurulumu

0
1337

Ubuntu Üzerine OpenCV Kurulumu ile ilgili portalda kaynak olması ve yardımcı olması açısından yazı yazmanın uygun olacağını düşündüm. Türkçe kaynaklardan bir kısmında (güncelliğini yitirmiş olduğu için) sorunlar var. Keza yakın zamanda Windows üzerinde çalışma yaparken OpenCV ‘ye ait Contrib ‘leri build ederken epey zaman kaybedip hata listesini onlarca hata doldurunca vazgeçtim. Keza o aşamaya gelene kadar bile epey sorunlu geçmişti zaten. Daha fazla zaman kaybetmemek için ubuntu üzerinde bu işlemi yapmayı daha uygun gördüm. Windows gerçekten sıkıntı 🙂 (sanırım mac üzerinde de ubuntudaki gibi rahat işlemler ile OpenCV kurulabiliyor. -denemedim okuduğum şeyler öyle diyor-)

Kullanacağımız Ubuntu sürümü 16.04, OpenCv ve OpenCv_Contrib Sürümü ise 3.2.0 olacak.

Yapmanız gerekenleri anlatırken lafı dallandırmayacağım. Linux konusunda uzmanlığım yok 🙂 OpenCV konusunda da uzmanlığım var demem yalan olur. Fakat sorunsuz bir şekilde kurulumu adım adım takip ederseniz uygulamış olacaksınız. Sonrası elbette size kalacak. Bunun haricinde bende OpenCV ile yaptığım geliştirmeleri, denemeleri yazıyor olacağım.

Başlamadan önce ne yapacağımızı özetleyeyim, Öncelikle (ben sanal makine üzerinde kurulum gerçekleştirdim. sanal tercihim ise windows kullandığım için ve ek bir yazılım kurmamak için hyperV oldu. sanırım 15 dakika da ubuntu kurulumu tamamlanmıştı.) Ubuntu kurulu bir makine gerekiyor bize. Sonrasında ise OpenCV 3.2.0’ı Python 2.7 ve Python 3.5 sürümlerinde çalışır şeklide gerekli adımları uyguluyor olacağız.

Python 2.7 sürümü Ubuntu üzerinde şuanda varsayılan olarak yüklü gelmekte ve kullanılabilmekte. Python 3’ün default olarak geleceği söyleniyor ama uzun hikaye olarak da ayrıca forumlarda dile getiriliyor. Gerçi çok problem değil 2 satır terminal kodu ile onu da yüklüyorsunuz. Burada işler Windowsdaki gibi brokratik değil. Sosyal işletim sistemi gibiler. Hiç bir iş için çok yorulmuyorsunuz. Evet herşeyi siz yapıyorsunuz ama bundan hoşnutsuzluk hissetmiyorsunuz. 

Birazdan okuyacağınız üzere bizim kurulumumuz Pyhon 2.7 ve Python 3.5 sürümlerini destekleyeceğinden sorun olmayacak. Sonrasında Github’dan vs bulduğunuz örnek çalışmaları ya da kullanacağınız API’ler hangi sürümleri destekliyorsa ikisinde de kullanabilir bir ortam oluşturmuş olacağız. OpenCV için hangi Python sürümü ile çalıştığınızın (bildiğim kadarıyla) bir önemi yok.

Kurulum

Ubuntu kurulumundan sonra ilk olarak terminalimizi açıyoruz. Yazının burdan kalanında elimiz ayağımız terminal olacak. Terminali açarak komut satırımıza ilk olarak apt-get ile update ve upgrade geçiyoruz.

Herhangi bir kurulum öncesinde update (linux üzerindeki paket listesinin güncellenmesini sağlar, herhangi bir kurulum yapmaz), upgrade (güncellenmiş listedeki öğelerin son sürümlerine günceller) işlemlerinin yapılması tavsiye edilmektedir.

ilk kodumuz aşağıda, tek tek yazıp enter’a basabilirsiniz ya da kopyalayıp ikisini birden terminale yapıştırarak ilerleyebilirsiniz.

Sistem Güncelleme ve Ön Paketlerin Kurulumları

Geliştirici araçlarımızı yüklüyoruz. Pkg-config paketi (büyük olasılıkla) sisteminize zaten yüklüdür. Cmake ise OpenCV paketini otomatik yapılandırmamız için gerekli. (Windowsda ‘bence’ tam bir baş belası. Keza buna rağmen bir şekilde saçmalıklarını çözüyorsunuz 🙂 )


OpenCV
, bir görüntü işleme Kütühanesi olduğu için JPEG, PNG, TIFF, vb. çeşitli görüntü dosya formatlarını diskten yükleyip çalıştırabilmelidir. Bu görüntüleri diskten yüklemek için OpenCV, aslında yükleme ve kod çözme işlemlerini kolaylaştıran diğer görüntü kütüphanelerini kullanır ve çağırır. Bunları ise bu aşamda kuruyor olacağız. 

Şimdi diskten görüntü yükleyecek kütüphanelerimiz hazır (onlar bir kenarda beklesin). Elbet sadece resimler üzerinden işlem yapmayacağız. Video’lar (Gerçek zamanlı -webcam, kamera-) üzerinde işlem yapmak için aşağıdaki komutları yazarak gerekli kütüphaneleri de kuruyoruz.

OpenCV, çok sınırlı GUI tool (araç, araç setleri) ile birlikte bize sunulmakta. Bu GUI tool’lar ekranımızdaki bir görüntüyü (cv2.imshow) görüntüleyebilir, mouse event’larını izleyebilir (cv2.setMouseCallback) ve scroll çubuğu gibi basit GUI öğeleri oluşturabilir. OpenCV ile tam donanımlı GUI uygulamaları oluşturmayı düşünmeyin.  Dahili olarak, OpenCV GUI işlemlerini yürüten bir modül geliştirilmiş durumda. Highgui modülü, aşağıdaki komutu kullanarak yüklemeniz gereken GTK kütüphanesini kullanır.

OpenCV içinde matris işlemleri gibi çeşitli işlemleri optimize etmek için kullanılan kitaplıkları kuruyoruz.

Python 2.7 ve Python 3.5 için Python geliştirme kütüphanelerini kurduktan sonra ilk adımı tamamlanmış olacağız. Python geliştirme kütüphanesini kurmazsanız, cmake‘i çalıştırdığımızda bir dizi sorunla karşılaşmamız olasıdır. Bu kurulum ile cmake komutu otomatik olarak Python yorumlayıcı ve Python kitaplıklarının doğru değerlerini belirleyemez. 

 

OpenCV ve Sanal Ortam Kurulumu

Gelelim ana başlığımızda ki kuruluma. Şuanda OpenCV’nin 3.2.0 sürümü yayında. Aşağıdaki terminal kodu ile son sürümü indirip zip’ten çıkartmış olacağız.

OpenCV’nin yeni sürümleri çıktığında resmi OpenCV GitHub‘ı kontrol edebilir ve .zip’in sürüm numarasını değiştirerek en son sürümünü indirirsiniz. Ayrıca OpenCV’nin yanında opencv_contrib‘e (OpenCV’de kullanılan bazı ek paketler buraya eklenmekte) de ihtiyacımız var. Burada dikkta edilmesi gereken husus, OpenCV ve OpenCV_Contrib sürümlerinin aynı olmasıdır. Aksi durumda, derleme aşamasında sorunlarla karşılaşacaksınızdır.

Sıra Python ortamlarının kurulumunda, burada Python paket yöneticisi olan pip ‘i kuruyor olacağız.

Burada ortamları virtualenv (sanal ortam) üzerinde kurabiliriz. Bu tamamen sizin tercihinize kalmış bir durum. Kurmadan da devam edebilirsiniz elbette hiç bir sorun teşkil etmeyecektir. Neden, kısaca bahsedelim. Projelerinizi sanal python ortamlarında geliştirerek daha düzenli bir proje yönetimi yapmış oluyorsnuz. Python Community’de (topluluğu), sanal ortamada çalışmak standart bir uygulama haline gelmiş durumda. Kurulum şu şekilde oluyor;

devam ediyoruz;

devamında;

son olarak;

Yukarıdaki işlemi bir kere yapıyoruz. Daha sonra terminal’i tekrar açtığımızda bu ayarlarmalar otomatik yüklenecektir ve tekrar bu işlemi yapmanıza gerek kalmayacaktır.
Şimdi Python için sanal ortam oluşturacağız. Hangi Python sürümü ile çalışacaksanız, ona göre yazmanız gereken kod değişecektir.

Python 2.7 için


Python 3.5 için

Kullanmaya karar verdiğiniz Python sürümü için yazdığınız komuttan bağımsız olarak cv (“Computer Vision” başharfleri) altında sanal ortamı oluşturmuş olduk. Bu sanal ortama istediğiniz gibi isim verebilirsiniz, kodda cv yerine istediğiniz ortam ismini yazabilirsiniz. Ayrıca istediğiniz kadar Python sanal ortamı oluşturabilirsiniz. 

Şimdiye kadar Ubuntu işletim sistemini yeniden başlattıysanız ya da çıkış ve giriş yapın veya yeni bir terminal açtığınızda, cv sanal ortamınıza yeniden erişmek için workon komutunu kullanmanız gerekecek. Şu şekilde kullanarak sanal ortama erişebiliriz.

Komut satırınızda, bulunduğunuz satırın başında artık parantez içinde “(cv)” yazacaktır (eğer görmezseniz sanal ortama girememişsiniz demektir). Tebrikler sanal ortamdasınız 🙂

OpenCV ‘yi derlemeden önce ve sanal ortamdaki son adımımız, NumPy ‘i kurmak olacak. NumPy, sayısal işlem için kullanılan bir Python paketidir. NumPy ‘yi kurmak için cv sanal ortama girin. (eğer sanal ortama girmezseniz, NumPy, Python ‘un sistem sürümüne yüklenecektir).

Buradan şu komutu çalıştırıyoruz.

Bu işlemde bittiğine göre artık OpenCV ile olan derleme işlemlerine geçebiliriz. Eğer sanal ortam’da değilsek aşağıdaki kod ile sanal ortama geçiş yapıyoruz.

Derleme

Şimdi ise cmake kullanarak, OpenCV’mizi build edip, yapılandırma işlemini yapıyoruz. Burada dikkat edilecek nokta ~cd komutu ile sizin uygulamayı indirdiğiniz dizine düzgün gitmeniz gerekmektedir.


stdlib.h
ile ilgili bir hata alırsanız, cmake kısmında böyle bir dosya veya dizin yoktur muhtemelen, aşağıdaki satırı ekleyerek tekrar  yukarıdaki kodu tekrar çalıştırmanız sorunun çözümüne yardımcı olacaktır.

Kodumuz OpenCV’nin zipten çıkarttığı dizinin içinde build adında bir alt dizin oluşturacaktır. Derleme bu dizin içinde gerçekleşecektir. Eğer terminalde build işlemi başarıya gerçekleşti ve dizin yollarını kontrol ettiğinizde bir sorun yoksa, aşağıdaki koddan devam edebilirsiniz. Aksi durumda workon cv ‘yi çağırarak cv sanal ortamına erişin ve yukarıda belirtilen CMake komutunu tekrar çalıştırın.

j parametresi OpenCV ‘yi derlerken kullanılacak işlemci sayısını belirler. Aşağıdaki resimde gördüğünüz gibi benim ayarladığım işlemcinin çekirdek sayısı 4. bundan dolayı -j4 olarak belirledim.

Ubuntu İşlemci Çekirdek Sayısı

Birden fazla işlemci kullanmak OpenCV’nin daha hızlı derlenmesini sağlar; Elbet sanal makine üzerinden yaparsanız bunun da bir takım gecikmeler yaşatacağını unutmayın.

Son işlem olarak, Terminalimizden OpenCV’nin kurulumunu gerçekleştiriyoruz.

Kurulumumuzu yapılandırıp ayarlamalarını yapacağız. Yukarıdaki kodu çalıştırdıktan sonra OpenCV 3, Python 2.7 için /usr/local/lib/python-2.7/site-packages/ dizini altında kurulmuş olacaktır. Bunu aşağıdaki kod ile kontrol edebilirsiniz.

Şuna benzer bir çıktı vermesi gerekiyor;

 
Buradaki son adımımız ise paketimizi Python için linkliyor olacağız.

Python 3 için de benzer işlemleri yapacağız. Aynı işlemleri yukarıdaki (bir üstteki hariç) kodlarda 2.7 gördüğünüz yerlere 3.5 yazarak yapabilirsiniz/deneyebilirsiniz. Çıktıdaki dosya ismi bu sefer farklı görünecektir. (Nedeni hakkında pek fazla bir bilgi yok internette) Bunu düzeltmek ise çok basit. Dosyayı yeniden adlandıracağız.

 

Şimdi ise Pyton 3.5 ‘u sanal ortam için linkliyoruz.

 

Test

Ubuntu Üzerine OpenCV Kurulumu ; derleme, yükleme işlerimiz bitti. Şimdi ufak bir deneme yapıp, OpenCV üzerinde çalışıp çalışamayacağımızı test edelim. Yeni bir terminal açıp, öncelikle workon cv diyoruz. Göreceksiniz ki sanal ortamımıza tüm kurulumlarımız gelecektir.  Daha sonra python ‘ı açıp, OpenCV kütüphanesini import ediyoruz. Son olarak, versiyon bilgisini öğrenmek için cv2.__version__  yazıyoruz ve bize sürüm bilgisini veriyor. 

 

Artık OpenCV üzerinde çalışmaya başlayabiliriz. Sonraki konularda sizlere OpenCV ile neler yapabileceğimize dair örnekler sunmaya çalışacağım.

Sorularınız/Sorunlarınız ile ilgili herşeyi yorum olarak iletebilirsiniz. Elimden geldiğince cevaplamaya çalışırım. 

Facebook Yorumları