Raspberry Pi-3 OpenCV C++//Python Kurulumu

Görüntü işleme uygulamalarını, masaüstü veya dizüstü bilgisayarlar yardımı ile gerçekleştirebiliyoruz. Peki görüntü işleme uygulamalarını taşınabilir hale getirmek için ne yapabiliriz? Bu noktada aslında mini bir bilgisayar olan Raspberry Pi kullanabiliriz. İnternette Raspberry Pi hakkında birçok bilgi mevcut. Aynı şeyleri tekrarlamakta bir fayda görmüyorum. O yüzden direkt kuruluma başlıyorum. Şimdi OpenCV 3.2'nin Raspberry Pi3 için kurulumunu gerçekleştireceğiz. Tabiki eski sürüm Raspberry Pi ler içinde kurulumu gerçekleştirmiş olacaktır.

Hangi Raspberry Pi İşletimi? Rasbian Jessie
Hangi Programlama Dilleri için? Python ve C++ 

Daha Önceki OpenCV Kurulumlarını Kaldırma

sudo apt-get remove libopencv*
sudo apt-get autoremove
Kurulum için Ön Koşullar:
Sistemin güncellenmesi:
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
sudo reboot
Eğer daha önce güncelleme yapmadıysanız bu işlemler biraz zaman alabilir. Ama sonuçta güncel bir sistem güvenlik ve kararsızlık açıklıklarından arınmış demektir.
Geliştirici Araçlarının Kurulması:
sudo apt-get install build-essential cmake cmake-curses-gui pkg-config
Kütüphanelerin Kurulması: (Kütüphane içeriklerini kendi ihtiyaçlarınıza göre düzenleyebilirsiniz.)
sudo apt-get install \
  libjpeg-dev \
  libtiff5-dev \
  libjasper-dev \
  libpng12-dev \
  libavcodec-dev \
  libavformat-dev \
  libswscale-dev \
  libeigen3-dev \
  libxvidcore-dev \
  libx264-dev \
  libgtk2.0-dev
Ek Kütüphaneler:
sudo apt-get install libatlas-base-dev gfortran
Python Kurulumu:
Raspbian Jessie üzerinde Python2 ve Python3 versiyonları zaten kurulu durumda biz OpenCV 3.2.0 ı her iki Python için kurmuş olacağız.
Python-dev ve numpy Kurulumu:
sudo apt-get install python2.7-dev python2-numpy
sudo apt-get install python3-dev python3-numpy

Şimdi sırada OpenCV'nin indirilmesi ve yüklenilmesi işleminde:
OpenCV İndirme İşlemi:
sudo mount /dev/your-dev-name /home
mkdir /home
cd  /home
wget https://github.com/opencv/opencv/archive/3.2.0.zip -O opencv_source.zip
wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip -O opencv_contrib.zip
Son iki satırdaki /3.2.0 ifadesi bizim OpenCV sürümümüzü gösteriyor. Eğer siz güncellemeyi yaparken yeni bir versiyon yayınlanmış ise sadece rakamları değiştirmeniz yeterli olacaktır.
Unzip İşlemi:
cd /home
unzip opencv_source.zip
unzip opencv_contrib.zip
OpenCV Kurulum İşlemi:
OpenCV 3.2 yi Python2, Python3 ve C++ için kurarken CMake(text based user interface) kullanmamız gerekmektedir.
Çalışılacak Konumun Oluşturulması:
cd /home
mkdir build
cd build
OpenCV'nin İhtiyaçlara Göre Konfigürasyonu:
Bu ayarlamaları kendi ihtiyaçlarınıza göre şekilledirebilirsiniz. Ben Debug ve Test versiyonlarını kapattım. Çünkü Raspberry Pi üzerinde ihtiyaç duymadım. Ancak bilgisayar kurulumu yaparken kurmadığım ama performansa kattı sağladığı için NEON optimizasyonunu açık halde konfigurasyon yaptım.
cmake -D CMAKE_BUILD_TYPE=RELEASE \
 -D CMAKE_INSTALL_PREFIX=/usr/local \
 -D BUILD_WITH_DEBUG_INFO=OFF \
 -D BUILD_DOCS=OFF \
 -D BUILD_EXAMPLES=OFF \
 -D BUILD_TESTS=OFF \
 -D BUILD_opencv_ts=OFF \
 -D BUILD_PERF_TESTS=OFF \
 -D INSTALL_PYTHON_EXAMPLES=ON \
 -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.2.0/modules \
 -D ENABLE_NEON=ON \
 -D WITH_LIBV4L=ON \
        ../
Cmake konfigurasyonu birkaç dakika sonra bitecektir ve şöyle bir uyarı görmeniz lazım:
.....
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/usbmem/opencv/opencv-3.2.0/build
Eğer "Generating done" ifadesini görmüyorsanız. Birşeyler ters gitmiş demektir. Hata mesajını kontrol edip çözebilirsiniz. Eğer yine halledemezseniz bana mesaj atmaktan çekinmeyin.

Cmake TextGUI Gözden Geçirme:
Eğer hata mesajı aldıysanız, aşağıdaki listeyi kontrol edin ve gerekli düzenlemeleri yapın, hata mesajı almadıysanız bu adımı atlayabilirsiniz
$ ccmake ../
                                       Page  1 of ..
 ANT_EXECUTABLE                   ANT_EXECUTABLE-NOTFOUND
 BUILD_CUDA_STUBS                 OFF
 BUILD_DOCS                       OFF
 BUILD_EXAMPLES                   OFF
 BUILD_JASPER                     ON
 BUILD_JPEG                       ON
 BUILD_LIBPROTOBUF_FROM_SOURCES   OFF
 BUILD_OPENEXR                    OFF
 ... more options here ....

Press [enter] to edit option
Press [c] to configure
Press [h] for help           Press [q] to quit without generating
Press [t] to toggle advanced mode (Currently Off)
OpenCV'yi Çalıştırma:
make -j4
Compile işlemi biraz zaman alabilir. Bu arada kahvenizi alıp kitap okuyabilirsiniz.. İşlem bittikten sonra:
[100%] Built target ...
Şimdi Kelimenin Tam Anlamı ile Yükleme İşlemi Yapıyoruz:
sudo make install
sudo ldconfig
Tebrikler Raspberry Pi görüntü işleme için hazır.
/usr/local/lib/libcv*
/usr/local/lib/python2.7/dist-packages/cv*
/usr/local/lib/python3.4/dist-packages/cv*
/usr/local/include/opencv2
/usr/local/bin/opencv_*
/usr/local/share/OpenCV/
Yüklemeyi Test
Python2 ve Python3 için:
Terminal üzerinde aşağıdaki komutlar ile aynı çıktıyı almanız lazım
$ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print (cv2.__version__)
3.2.0
>>>
C++ kurulumunu Test etmek için:
Yeni bir boş text dosyası oluşturun. Adını resizing.cpp yapın.

#include "iostream"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/core/core.hpp"

using namespace std;
using namespace cv;

// this function represents the size of the image for comparing 
void printsize(Mat &,Mat &);  

int main()
{
 
 // firstly read and show an image
 Mat image,resized;
 image = imread(".../mirror.jpg",1); // address of the image in you computer
 
 namedWindow("Display image",1);
 imshow("Display image",image);
 
 // resizing the input image
 resize(image, resized, Size(), 0.5, 0.5, 1); // third parameter represents the output size
 
 namedWindow("Display resized image", 1);
 imshow("Display resized image", resized);

 // to check the resizing
 printsize(image,resized);

 waitKey(0);
    return 0;
}

void printsize(Mat &image, Mat &resized) {
 int r1, c1, r2, c2;
 r1 = image.rows;
 c1 = image.cols;
 r2 = resized.rows;
 c2 = resized.cols;
 cout << r1 << " " << c1 << endl;
 cout << r2 << " " << c2 << endl;
}
Yukarıdaki kod bloğunu boş text dosyasına kopyalayın ve terminalde:
g++ $(pkg-config --libs --cflags opencv) -o resizing resizing.cpp
Komutu ile çalıştırın. Text dosyanızın olduğu klasörde yeni bir dosyanın oluşturulduğunu göreceksiniz. Çift tıklayıp çalıştır dediğiniz zaman resmin resize edildiğini göreceksiniz.

23 yorum:

  1. Merhaba,

    Raspberry 3 B modelinde build yapmaya çalışırken %58 civarında cihaz takılıyor ve kendini asla toparlamıyor.

    Eksik bir dosya mı var yoksa cihaz fazla yüklenmeden dolayı mı bu hale geliyor anlayamadım.

    YanıtlaSil
    Yanıtlar
    1. Merhabalar, Bazı yazılımlar Raspberry Pi'nin çekirdeğini meşgul edebiliyor. "make -j4" komutunu "make -j" şeklinde değiştirerek build etmeyi deneyebilirsiniz. Bu komut Raspberry Pi'nin tek çekirdeğinde build yaptıracaktır. Tabi bu beklenmesi gereken süreyi de arttıracaktır. Build işlemi uzun süren bir işlem, eğer herhangi bir hata mesajı döndürmedi ise beklemek gerekiyor.

      Sil
  2. Bu yorum yazar tarafından silindi.

    YanıtlaSil
    Yanıtlar
    1. Merhabalar, tam hata mesajını görmeden doğru bir çözüm önermem zor. Ama gstream hataları kamera modülünün aktif edilmemesinden veya driver kurulum hatalarında alınmaktadır.

      Sil
  3. Bu yorum yazar tarafından silindi.

    YanıtlaSil
    Yanıtlar
    1. Anlatım sırasında kullandığım dosya yükleme yolu benim sistemime göre ayarlanmıştı. Sadece /home yazıp kurulumu ve indirme işlemini /home klasörünün altına yapabilirsin. /usbmem klasörü senin kullandığın sistemde bulunmadığı için hata mesajı alıyorsun

      Sil




  4. CMake Error: The source directory "/home" does not appear to contain CMakeLists.txt.
    Specify --help for usage, or press the help button on the CMake GUI.


    Bu hatanın sebebi ne olabilir acaba.

    YanıtlaSil
    Yanıtlar
    1. Yukarıdaki anlatımda: Calısılacak konumun olusturulması baslıgı altında bulunan; "cd/home" ile baslayan adımı atlamıs olabilirsin. O kısma dikkat ederek tekrar kurulumu gerceklestirebilirsin. İyi çalışmalar.

      Sil
  5. VCMake Error: The source directory "/home" does not appear to contain CMakeLists.txt.
    Specify --help for usage, or press the help button on the CMake GUI.

    Nedeni nedir.

    YanıtlaSil
    Yanıtlar
    1. Nedeni Cmake konfigürasyonunun home klasörü altında bulunamaması. Github üzerinde birkaç raporlama yapılmış konu ile alakalı. Arama motorları yardımı ile sorunu aratarak ilgili raporlara ulaşabilirsin. İyi çalışmalar

      Sil
  6. haci zip dosyasını indiriken ordaki-0(sıfır) değil -O(harf) olacak onu belirtirsen benim gibi boşu boşuna uğraşmasın millet

    YanıtlaSil
    Yanıtlar
    1. Aslında hemen yanı başında bulunan (3.2.0.zip) ibaresinin sonundaki ifade ile farklı bir şey olduğu bariz belli oluyor ama karışıklık yaşayanlara senin yorumun ile beraber çözüm sunmuş olduk. Katkın için teşekkürler.

      Sil
  7. Merhaba. Paylasiminiz icin tesekkurler. Opencv yi yukledim cpp programini compile ettigimde bir hata almiyorum fakat olusan yeni dosyada execute ettigimde herhangi birsey olmuyor hata dahi almiyorum yardimci olabilir misiniz

    YanıtlaSil
    Yanıtlar
    1. Kurulum sırasında herhangi bir sıkıntı olmadıysa ve kurulumu test ettiğinde herhangi bir sıkıntı görünmüyorsa; raspberry pi'nin ayarlarına bakmayı deneyebilirsin. Muhtemelen izinlerle alakalı bir durum vardır. Harici c++ compilerı yüklemeyi de deneyebilirsin. iyi çalışmalar

      Sil
  8. Merhaba. make -j4 komutundan sonra

    fatal error: stdlib.h: No such file or directory
    #include_next
    ^
    compilation terminated.
    modules/core/CMakeFiles/pch_Generate_opencv_core.dir/build.make:62: recipe for target 'modules/core/precomp.hpp.gch/opencv_core_RELEASE.gch' failed
    make[2]: *** [modules/core/precomp.hpp.gch/opencv_core_RELEASE.gch] Error 1
    CMakeFiles/Makefile2:1970: recipe for target 'modules/core/CMakeFiles/pch_Generate_opencv_core.dir/all' failed
    make[1]: *** [modules/core/CMakeFiles/pch_Generate_opencv_core.dir/all] Error 2
    make[1]: *** Waiting for unfinished jobs....
    [ 36%] Generating precomp.hpp
    [ 36%] Generating precomp.hpp.gch/opencv_dnn_RELEASE.gch
    [ 36%] Generating precomp.hpp.gch/opencv_video_RELEASE.gch
    [ 36%] Generating precomp.hpp.gch/opencv_fuzzy_RELEASE.gch
    [ 36%] Built target pch_Generate_opencv_video
    [ 36%] Built target pch_Generate_opencv_dnn
    [ 36%] Built target pch_Generate_opencv_fuzzy
    Makefile:160: recipe for target 'all' failed
    make: *** [all] Error 2
    şeklinde bi hata alıyorum. Nedeni ne olabilir.

    YanıtlaSil
    Yanıtlar
    1. Hata kodundan anladığım kadarı ile yükleme yapacağı dosyaları okuyamamış. Genelde build klasörü ile alakalı hatalardan kaynaklanıyor. Build klasörünü kaldırdıktan sonra yeniden yükleme işlemi ile sorunun çözüleceğini düşünüyorum. İyi çalışmalar.

      Sil
  9. Paket listeleri okunuyor... Bitti
    Bağımlılık ağacı oluşturuluyor
    Durum bilgisi okunuyor... Bitti
    E: python2-numpy paketi bulunamadı

    YanıtlaSil
    Yanıtlar
    1. (cv) wrapper'ın içinde numpy kurulumu gerçekleştirdiğinden emin olduktan sonra hata çözülmüş olacaktır. iyi çalışmalar

      Sil
  10. /tmp/ccBLAIyp.o: In function `main':
    resizing.cpp:(.text+0x64): undefined reference to `cv::imread(cv::String const&, int)'
    resizing.cpp:(.text+0xfd): undefined reference to `cv::namedWindow(cv::String const&, int)'
    resizing.cpp:(.text+0x154): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
    resizing.cpp:(.text+0x17c): undefined reference to `cv::waitKey(int)'
    /tmp/ccBLAIyp.o: In function `cv::String::String(char const*)':
    resizing.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x4d): undefined reference to `cv::String::allocate(unsigned long)'
    /tmp/ccBLAIyp.o: In function `cv::String::~String()':
    resizing.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14): undefined reference to `cv::String::deallocate()'
    /tmp/ccBLAIyp.o: In function `cv::Mat::~Mat()':
    resizing.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x39): undefined reference to `cv::fastFree(void*)'
    /tmp/ccBLAIyp.o: In function `cv::Mat::release()':
    resizing.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x4b): undefined reference to `cv::Mat::deallocate()'
    /tmp/ccBLAIyp.o: In function `cv::Mat::operator=(cv::Mat&&)':
    resizing.cpp:(.text._ZN2cv3MataSEOS0_[_ZN2cv3MataSEOS0_]+0xe7): undefined reference to `cv::fastFree(void*)'
    collect2: error: ld returned 1 exit status

    YanıtlaSil
    Yanıtlar
    1. Kurulumun hangi aşamasından sonra böyle bir hata aldığınızı söylerseniz daha sağlıklı bir yorum yapabilirim. İyi çalışmalar.

      Sil
  11. special device /dev/your-dev-name does not exist
    sorun ne anlamadım

    YanıtlaSil
    Yanıtlar
    1. Kurulum yapmaya çalıştığınız "PATH" bulunmamakta. Dolayısı ile kurulum gerçekleşmemekte. İyi çalışmalar

      Sil
  12. Merhaba,sizde opencv kurulu rasbian var mı? Paylaşabilir misiniz?
    Kurulum esnasında problemler yaşıyorum. zaman kaybetmek istemiyorum

    YanıtlaSil