Yazıya başlamadan önce Python 2.7 ve Python 3.5.2 Ubuntu 16.04 içinde hazır olarak kurulu olduğunu belirteyim.
- Python 2.7.12’e konsoldan
Python
komutunu kullanarak ulaşabilirsiniz. - Python 3.5.2’e konsoldan
Python3
komutunu kullanarak ulaşabilirsiniz.
Python 2.7 Ubuntu tarafından kullanılan varsayılan versiyon. Python 3’e geçmek gibi planlar var ama bunun için daha zaman var gibi gözüküyor. Bu yazıda OpenCv’ nin kurulumu her iki versiyon içinde yapılacak ama sizin hangi versiyon için yapacağınıza karar vermeniz gerekiyor aksi halde bir sürü hata ile karşılaşmanız kaçınılmaz. Ama tavsiye olarak yeni başlıyorsanız Python 3 ile başlamanız daha yararlı olacaktır.
Adım-1 : OpenCv Bağımlılıklarının Kurulumu
Tüm adımlarda konsol kullanacağımız için Ubuntu konsolu açıp öncelikle güncelleme ve yükseltmelerinizi yapın.
sudo apt-get update
sudo apt-get upgrade
Bazı geliştirme araçlarını kuralım:
sudo apt-get install build-essential cmake pkg-config
pkg-config
sisteminizde muhtemelen kuruludur ama apt-get
komutu eklendiğinden emin olun. cmake
OpenCv’i otomatik olarak derlerken kullanacağız.
OpenCv görüntü işleme ve bilgisayar görmesi işlemlerinde kullanılan bir kütüphane. OpenCv’ nin JPEG, PNG, TIFF, vb bir sürü resim formatını deskteklemesi gerekiyor. OpenCv yükleme ve çözme işlerini kolaylaştırması için diğer I/O kütüphanelerini kullanır.Gerekli olanları kuracağız:
sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
Şu an resimleri yüklemek için gerekli olan kütüphaneleri yükledik. Video ve kameradan gelen veri akışları için kütüphaneleri yükleyelim:
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
OpenCv kısıtlı sayıda GUI(Graphical User Interface) aracı ile geliyor. Bunlardan bazıları ekranımızda bir resmi görüntülemeye yarayan (cv2.imshow
), tuş basışlarını beklemek için (cv2.waitkey
), fare hareketlerini kaydetmek için (cv2.setMouseCallback
) ve diğer kaydırma butonu gibi basit GUI elemanları. OpenCv ile çok kapsamlı GUI uygulamaları yapmayı beklemeyin sadece basit uygulamalar ve kodumuzu debug etmek için kullanacağız.
OpenCv’nin GUI işlerini halleden modül (highgui
) GTK kütüphanesine dayanır, bu kütüphaneyi aşağıdaki komut ile kuracağız:
sudo apt-get install libgtk-3-dev
Daha sonra OpenCv içinde değişik fonksiyonları (matris işlemleri vb.) optimize eden kütüphaneleri kuracağız:
sudo apt-get install libatlas-base-dev gfortran
İlk adımı her iki Python sürümünün geliştirme başlıklarını ve kütüphanelerini kurarak bitireceğiz:
sudo apt-get install python2.7-dev python3.5-dev
Bu başlıkları ve kütüphaneleri kurmadığınız taktirde 4.adımda cmake
Python derleyicileri ve kütüphaneleri için otomatik olarak uygun değerleri atayamayacak.
Adım-2:OpenCv Kaynak Kodu İndir
Bu çalışmada OpenCv’nin 3.1.0 versiyonunu kullanacağız. İhtiyacınıza göre olan versiyonu buradan indirip kurabilirsiniz. Zip olarak indirip arşivden aşağıdaki komutlarla çıkaracağız:
cd ~
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
unzip opencv.zip
Sadece OpenCv indirmek yeterli olmayacak. Biz 2.4 OpenCv versiyonunda bulunan daha sonra geliştirme ve patent gerekçeleri ile OpenCV 3+ içinde bulunmayan SIFT ve SURF modüllerini de kullanmak istiyoruz. Bu yüzden contrib dosyalarına ihtiyacımız olacak. SIFT ve SURF modülleri hakkında daha fazla bilgiye buradan ulaşabilirsiniz.Yüklemeye contrib ile devam ediyoruz:
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
unzip opencv_contrib.zip
Burada derleme hataları almamak için dikkat edilmesi gereken nokta opencv ve opencv_contrib versiyonlarının aynı olması.
Adım-3:Python 2.7 yada Python 3.5 Gereksinimlerinin Kurulması
Derleme için gerekli olan Python geliştirme araçlarını optimize etmeye başlayabiliriz. İlk adım olarak pip (Python Paket Yöneticisi) kurarak başlayabiliriz. Bu yazıda pip3
yerine pip
kullanacağız:
cd ~
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
Kullanım kolaylığı ve pratikliği açısından bu projede virtualenv ve virtualenvwrapper kullanacağız.Bu kütüphaneler çalıştığımız her proje için ayrı ve bağımsız Python değişkenleri oluşturmamıza yarar. Burada sanal ortam kullanmamızdaki asıl amaç her projenin ihtiyaç duyduğu kütüphanelerin farklı olmasından kaynaklı oluşan kirliliği ve dağınıklığı engellemek.
Neden sanal değişkenlerin(virtualenv ve virtualenvwrapper) çok yararlı bir yöntem olduğuna dair bir yazı okumak isterseniz buradan inceleyebilirsiniz.Bu yazının yarısında neden Python sanal değişkenler kullanıldığına dair bi yazı da burada.
Python topluluğunda sanal değişkenlere sahip olmak bir standart siz de yüklerseniz iyi olur:
sudo pip install virtualenv virtualenvwrapper
sudo rm -rf ~/get-pip.py ~/.cache/pip
virtualenv
ve virtualwrapper
‘ı kurduktan sonra ~/.bashrc
‘ı güncellememiz gerekiyor. ~/.bashrc
konsolu her açtığımızda çalışan kabuk script. Biz burada WORKON_HOME
isimli çevre değişkenimizi Python sanal değişkenlerinin olduğu yeri işaret etmek için kullanacağız.Böylece gerekli ayarları virtualenvwrapper
‘dan alabileceğiz. ~/.bashrc
‘ı güncellemek için basit bir yazı düzenleyici nano vim
ya da emacs
işimizi görecektir. Grafiksel düzenleyiciler de kullanılabilir geany
ya da sublimetext
. En basit olarak nano
iş görecektir.
Düzenleyicilerden kaçınarak cat
komutu ile işimizi halledeceğiz:
echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.bashrc
echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.bashrc
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc
~/.bashrc
‘ı düzenledikten sonra değişiklikleri yüklememiz gerekiyor:
source ~/.bashrc
source
komutunu çağırmamız şu an çalıştığımız konsolu güncelleyecek. Çalıştığımız konsolu kapattıktan sonra yaptığımız yeni güncellemelerle birlikte .bashrc
çalışacak.
virtualenv
ve virtualenvwrapper
kurulduktan sonraki adım. Gerekli olan Python değişkenlerini kurmak. Ama başlamadan önce bu değişkenleri Python 2.7 için mi kuracaksınız yoksa Python 3 için buna karar vermeniz gerekiyor. Yazı da her ikisi için de gerekli olan komutlara yer verilecek.
Python Değişkenlerinin Oluşturulması
Python 2.7 kullanacaksanız:
mkvirtualenv cv -p python2
Python 3 kullacakanız:
mkvirtualenv cv -p python3
Hangi Python sürümünüzü kullandığınızdan bağımsız olarak cv
(computer vision) isimli Python sanal değişkenimizi oluşturduk. Kendinize daha kolay gelen bir isim koyabilirsiniz. Yada başka sanal değişkenler oluşturabilirsiniz. Bu yazının geri kalanında cv
kullanılacağı için kolaylık olması açısından cv
koymak isabet olacaktır.
Cv Sanal Değişkeni İçinde Olduğumuzu Kontrol Edelim
Sistemi kapatıp açıp yeni bir konsol açtığımızda cv
sanal değişkenine ulaşmak için workon
komutuna ihtiyaç duyacağız:
workon cv
Komutu işlettikten sonra şöyle bir ekranla karşılaşmanız gerekiyor:
Eğer resimin ikinci satırında gördüğünüz gibi (cv) yazısı görmüyorsanız sanal değişkenimizin içinde değilsiniz demek. Sanal değişkenden çıkmak içinde deactivate
komutunu kullanabilirsiniz.
Python Sanal Değişkeni İçine NumPy Kurulumu
OpenCV derlemeden önceki son adımımız matematiksel işlemlerde kullanılan NumPy paketini kurmak olacak. NumPy’i kurmadan önce sanal değişken içinde olduğumuzdan emin olmamız lazım , eğer cv
içinde değilseniz sistemin manual olarak kullandığı Python çevre değişkenleri içine kurulacak:
pip install numpy
Adım-4:Ubuntu 16.04 de OpenCv Ayarlanması ve Derlenmesi
Şu ana kadar OpenCv derlemesi için gerekli olan tüm gereklilikleri tamamladık. Bundan sonraki adımlar OpenCV’nin ayarlarının yapılması ve derlenmesi. Başlamadan önce cv
sanal değişkeni içinde olduğunuzu tekrar kontrol etmeniz gerekiyor. Konsolda komut satırında yüm yazılardan önce (cv) şeklinde bir yazı görmeniz gerekiyor, en üstteki resimde olduğu gibi. Eğer cv
sanal değişkeni içinde değilseniz:
workon cv
cv
sanal değişkeni içinde olduğumuzdan emin olduktan sonra CMake kullanarak ayarlamalarımızı yapmaya başlayabiliriz:
cd ~/opencv-3.1.0/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_INSTALL_PREFIX=/usr/local
-D INSTALL_PYTHON_EXAMPLES=ON
-D INSTALL_C_EXAMPLES=OFF
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules
-D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python
-D BUILD_EXAMPLES=ON ..
~/opencv-3.1.0.zip
dosyasını indirip çıkartmıştık. Çıkarttığımız o dosyanın içine girmemiz gerekiyor. Burada kodları satır satır kopyalayıp derlemeniz hatalardan kaçınmak açısından daha faydalı olacaktır. Eğer make
ya da cmake
aşamalarında stdlib.h: No such file or directory
şeklinde bir hata alıyorsanız -D ENABLE_PRECOMPILED_HEADERS=OFF
satırını CMake konfigürasyon ayarları içine eklemeniz gerekli yani üstte ki kod bölmesinin en alt satırına eklemeniz gerekiyor. Garanti olması açısından build
klasörünü silip(rm -r build
kullanabilirsiniz) en baştan başlayarak hatadan kurtulabilirsiniz. build isimli alt klasörü oluşturduktan sonra gerçek derleme öncesinde cmake
ile gerekli ayarlamaları yaptık.
Gerçek derlemeye geçmeden önce CMake çıktısını kontrol etmekte fayda var. Çıktıda önemli olan nokta Python 2
ve Python 3
başlıklı bölümler.
Eğer OpenCV derlemesini Python 2.7 için yapıyorsanız Python 2
başlıklı bölümde Interpreter
, Libraries
, numpy
ve package path
bölümlerine geçerli yolların atandığından emin olun. Çıktının aşağıdakine benzer bir şey olması gerekiyor:
Python 2.7 için cv2
isimli bir sanal ortam oluşturdum.
Python 3 için cv
isimli bir sanal ortam oluşturdum.
Bu çıktı bize şunları verecektir :
Interpreter
bize cv2
içindeki Python 2.7 binary dosyalarını belirtir.
Librariers
bize Python 2.7 kütüphanesini (1.bölümün sön adımında kurmuştuk) belirtir.
numpy
bize cv2
içindeki NumPy kurulumunu belirtir.
packages path
bize lib/python2.7/site-packages
‘ı belirtiyor.CMAKE_INSTALL_PREFIX
ile birleştirilip OpenCV’ i derlediğimizde cv2.so
bağlantılarını /usr/local/lib/python2.7/site-packages/
içinde bulacağız.
Eğer OpenCV derlemesini Python 3 için yapıyorsanız çıktının aşağıdakine benzer bir şey olması gerekiyor:
Eğer yukarıdaki değerler sizde benzer bir şekilde değilseniz büyük bir ihtimal CMake’den önce cv
sanal değişkeni içine girmediniz demek. O zaman yapmanız gereken workon cv
ile sanal değişkene erişip CMake komutlarını yeniden işletmeniz.
CMake komutları hatasız olarak işlettiyseniz şimdi OpenCV derlemesine geçebiliriz:
make -j8
Burada -j
OpenCV derlenirken kaç tane işlemci kullanacağınızı belirtiyor. Birden fazla işlemci kullanmak derlemeyi hızlandırmasına rağmen bazı durumlarda derleme işleminiz patlayabilir ve hatalarla karşılaşabilirsiniz. Bu durumlarda make clean
ile yapıyı temizleyip derleme işlemini tek işlemci ile yapmak daha faydalı olacaktır.
make clean
make
Başarılı bir derlemeden sonra benim ekranda aşağıda ki gibi bir görüntü oluştu: Son aşama OpenCV’i Ubuntu 16.04’de kurmak olacak:
sudo make install
sudo ldconfig
Adım-5:OpenCv Kurulumun Bitirilmesi
Son bir iki adım sonunda OpenCV sistemde tam olarak kullanılır duruma gelecek.
Python 2.7 İçin
sudo make install
komutunu işlettikten sonra, Python 2.7’nin OpenCV 3 için olan bağlamları /usr/local/lib/python-2.7/site-packages/
içinde konumlanmış olması gerekiyor. ls
komutu ile kontrol edebilirsiniz:
ls -l /usr/local/lib/python2.7/site-packages/
total 1972
-rw-r--r-- 1 root staff 2016728 mag 30 03:27 cv2.so
Bazı durumlarda OpenCv /usr/local/lib/python-2.7/site-packages/
yerine /usr/local/lib/python-2.7/dist-packages/
içine kurulmuş olabilir. Eğer /usr/local/lib/python-2.7/dist-packages/cv2.so
bağlamları site-packages
dizininde yoksa dist-packages
dizinini kontrol etmekte fayda var. Bu bölümde son aşama OpenCV cv2.so
bağlamlarını cv sanal değişkenine sembolik bağlantı yapmak:
cd ~/.virtualenvs/cv/lib/python2.7/site-packages/
ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so
Python 3.5 İçin
sudo make install
komutunu işlettikten sonra, Python 3.5’in OpenCV 3 için olan bağlamları /usr/local/lib/python-3.5/site-packages/
içinde konumlanmış olması gerekiyor. ls
komutu ile kontrol edebilirsiniz:
ls -l /usr/local/lib/python3.5/site-packages/
total 1972
-rw-r--r-- 1 root staff 2016728 mag 30 03:27 cv2.so
Bazı durumlarda cv2.so
‘nun ismi farklı olabiliyor. cv2.cpython-35m-x86_64-linux-gnu.so
ismine benzer bi ismi olabilir.Dosyanun adını değiştirerek olası hatalardan kurtulabiliriz:
cd /usr/local/lib/python3.5/site-packages/
sudo mv cv2.cpython-35m-x86_64-linux-gnu.so cv2.so
İsmi değiştirdikten sonra son aşama cv2.so
bağlamlarını cv sanal değişkenine sembolik bağlantı yapmak:
cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so
Adım-6:OpenCv Kurulumun Test Edilmesi
Şu an Ubuntu 16.04 üzerinde OpenCV 3 kurulumunu bitirmiş bulunuyoruz. Test etmek için:
1.Yeni bir terminal aç.
2.workon cv
komutunu çalıştır cv sanal değişkenine ulaş.
3.Python üzerinde OpenCV bağlamları çağır.
Aşağıda ki gibi bir şey yapabilirsiniz:
$ cd ~
$ workon cv
$ python
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>>
Yukarıda gördüğünüz gibi,OpenCV bağlamlarına Python 3.5 üzerinden erişebiliyorum.Python’un hangi versiyonunu kullandığınızdan bağımsız olarak bu yazıda ki adımları izleyerek OpenCV ve Python’u Ubuntu 16.04 üzerinde kurabilirsiniz.OpenCV’i kurduktan sonra opencv-3.1.0
ve opencv-contrib-3.1.0
klasörlerini ve .zip
dosyalarını silebiliriz:
cd ~
rm -rf opencv-3.1.0 opencv_contrib-3.1.0 opencv.zip opencv_contrib.zip
Bu dosyaların silmeden önce OpenCV’nin sisteminizde düzgün bir şekilde kurulduğundan emin olun aksi halde tüm işlemleri tekrardan başlatmanız gerekebilir.