Raspberry Pi Kamera Modülü ve OpenCV

Bu yazıda üstünkörü anlatılan konular;

  • Rasbian üzerine OpenCv Kurulumu
  • Pi kamera modülü kurulumu
  • Pi kamerayı opencv ile birlikte kullanmak

Rasbian hazırlıkları

Öncelikle eğer Rasbian Jessie kurulumunu yeni yaptıysanız ilk olarak dosya sisteminizi micro-SD kartın tüm alanı içerecek şekilde genişletmeniz gerekiyor.
raspiconfig
Aynı ekrandan Enable Camera seçeniği ile kamerayı aktif ediyoruz ve rpi’ya reset atıyoruz.

Hafıza alanımızı genişletmemize rağmen erişebildiğimiz alan çok kısıtlı ve rasbian üzerinde kurulu gelen bazı programlar çok fazla yer kaplıyor. Wolfram-Engine’i eğer kullanmıyorsanız kaldırabilirsiniz, silindikten sonra 600 küsur mb yer açılıyor.

$ sudo apt-get purge wolfram-engine

OpenCV kurulmuna geçmeden önce OpenCV’nin ihtiyaç duyduğu bazı dependency paketlerini yüklemeliyiz. Önce var olan paketlerimiz güncelleyelim;

$ sudo apt-get update
$ sudo apt-get upgrade

Gerekli paketleri yüklüyoruz;

$ sudo apt-get -y install build-essential cmake cmake-qt-gui pkg-config libpng12-0 libpng12-dev\ 
libpng++-dev libpng3 libpnglite-dev zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff5-dev libtiff5 libtiffxx0c2 libtiff-tools

Daha sonra gtk’yı yüklüyoruz. Gtk arayüz için gerekli ve rasbian bu paketi içermiyor. Eğer arayüz kullanacaksak (kamera görüntüsü gösterme dahil) bunu kurmamız gerekiyor.

$ sudo apt-get install libgtk2.0-dev

OpenCV Kurulumu

Buradan linux için olan versiyonu indiriyoruz. 2.4.13 versiyonunu kullanacağız. Zipten çıkarıyoruz ve çıkardığımız klasörün içerisinde build diye bir klasör oluşturuyoruz, açıyoruz.

$ tar -xvjpf OpenCV-2.4.13.tar.bz2
$ cd OpenCV-2.4.13/
$ mkdir build
$ cd build

Aşağıdaki komut ile makefile oluşturuyoruz. Burası önemli; burada istediğimiz özelliklere göre bir makefile düzenleniyor. Örneğin WITH_GTK=ON seçeneği ekleyerek Opencv’nin gtk özelliği ile birlikte derlenmesini istiyorum. Aksi durumda make işleminden sonra gtk özelliği eklemek istiyorsak tekrar buraya dönmemiz gerekecek. Opencv’nin make işlemi rpi üzerinde yaklaşık 5 saat sürdüğü için büyük bir zaman kaybı olacaktır.

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D
 WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_GTK=ON -D WITH_OPENGL=ON ..

daha fazla seçeneği cmake-gui .. komutu ile görebilirsiniz.

Compile ve install kısımlarına geldik. Önce make ardında make install diyerek opencv’yi yüklüyoruz. Make işlemi daha önceden de söylediğim gibi yaklaşık 5 saat sürüyor.

$ make
$ make install

Bu işlemleri tamamlandıktan sonra ufak bir kaç ayar kalıyor. Aşağıdaki komut ile opencv.conf dosyasını açıyoruz.

$ sudo nano /etc/ld.so.conf.d/opencv.conf

İçerisine şu konumu yazıyoruz /usr/local/lib, kaydedip kapatıyoruz.
bashrc dosyasını editliyoruz;
Dosyanın sonuna pkg-config’in bulunduğu konumu yazıyoruz (echo $PKG_CONFIG_PATH ile öğrenebilirsiniz);

$ PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH

OpenCV kurulumumuz tamamlandı. Sorunsuz bir şekilde çalıştığından emin olmak için bir kaç demo çalıştırabilirsiniz. Demo programlar Opencv içerisindeki bin klasörünün altında bulunuyor. Kurulumunuz sorunsuz tamamlandı ise hafızadan tasarruf için indirdiğiniz sıkıştırılımış dosyayı silebilrisiniz…

Raspicam kurulumu

Kamera modülünü malesef OpenCV ile hazır olarak kullanamıyoruz. Çünkü kamera modülü webcam değil gömülü bir donanım olarak görülüyor (CSI: Miami). Ayrıca malesef raspberry pi üreticileri bu kamera için herhangi bir resmi api geliştirmemiş. Kamerayı kullanmamız için sadece raspistill diye bir uygulamaları var.

Kamera modülünü OpenCV ile kullanmamız için yazılmış açık kaynak bir kütüphane var (adamlar yazmış…). Biz bu kütüphaneyi kullanacağız. Biraz daha farklı ve çağdışı bir yöntem var. Dileyen bu yönteme şuradan erişebilir. Raspistill uygulamasını farklı bir klasörde derliyor ve içerisine opencv projesi yazıyor :) . Kurulumu biraz zor çünkü bu tutorial yazıldıktan sonra raspistill’de çok fazla değişklikler olmuş. Deneyipte kuramayan olursa bana ulaşsın(Bul beni!).

Kullanacağımız kütüphane burada. Aslında bu kütüphane de üstteki yöntem referans alınarak geliştirilmiş ve hataları da var ama kullanılabilir durumda.

Şu şekilde hemen indirip build klasörü açıp makefile oluşturuyoruz;

$ git clone https://github.com/cedricve/raspicam .
$ cd raspicam
$ mkdir build
$ cd build
$ cmake ..

Son olarak make edip yüklüyoruz;

$ make
$ sudo make install
$ sudo ldconfig

Artık Pi kamerayı ve OpenCV’yi birlikte test edebiliriz, örnek kod;

#include <ctime>
#include <iostream>
#include <raspicam/raspicam_cv.h>
using namespace std; 

int main ( int argc,char **argv ) {

    time_t timer_begin,timer_end;
    raspicam::RaspiCam_Cv Camera;
    cv::Mat image;
    int nCount=100;
    //set camera params
    Camera.set( CV_CAP_PROP_FORMAT, CV_8UC1 );
    //Open camera
    cout<<"Opening Camera..."<<endl;
    if (!Camera.open()) {cerr<<"Error opening the camera"<<endl;return -1;}
    //Start capture
    cout<<"Capturing "<<nCount<<" frames ...."<<endl;
    time ( &timer_begin );
    for ( int i=0; i<nCount; i++ ) {
        Camera.grab();
        Camera.retrieve ( image);
        if ( i%5==0 )  cout<<"\r captured "<<i<<" images"<<std::flush;
    }
    cout<<"Stop camera..."<<endl;
    Camera.release();
    //show time statistics
    time ( &timer_end ); /* get current time; same as: timer = time(NULL)  */
    double secondsElapsed = difftime ( timer_end,timer_begin );
    cout<< secondsElapsed<<" seconds for "<< nCount<<"  frames : FPS = "
        <<  ( float ) ( ( float ) ( nCount ) /secondsElapsed ) <<endl;
    //save image 
    cv::imwrite("raspicam_cv_image.jpg",image);
    cout<<"Image saved at raspicam_cv_image.jpg"<<endl;
}

Bu kodu cmake ile çalıştıralım. CMakeLists.txt dosyasını içerisine şunları yazıyoruz;

cmake_minimum_required (VERSION 2.8)
project (raspicam_test)
find_package(raspicam REQUIRED)
find_package(OpenCV)
IF  ( OpenCV_FOUND AND raspicam_CV_FOUND)
MESSAGE(STATUS "COMPILING OPENCV TESTS")
add_executable (simpletest_raspicam_cv simpletest_raspicam_cv.cpp)
target_link_libraries (simpletest_raspicam_cv ${raspicam_CV_LIBS})
ELSE()
MESSAGE(FATAL_ERROR "OPENCV NOT FOUND IN YOUR SYSTEM")
ENDIF()

Ve make edip çalıştırıyoruz;

$ cmake ..
$ make
$ ./simpletest_raspicam_cv

Yeni bir proje oluşturacaksanız bu dosyayı örnek alabilirsiniz.

GNU severler derneği üyeleri aşağıdakini kullanarak da çalıştırabilirler;

$ g++ simpletest_raspicam_cv.cpp -o  simpletest_raspicam_cv -I/usr/local/include/ -lraspicam 
-lraspicam_cv -lmmal -lmmal_core -lmmal_util -lopencv_core -lopencv_highgui

Soru, görüş ve önerileriniz için bana ulaşabilirsiniz!