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.
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-engineOpenCV kurulmuna geçmeden önce OpenCV’nin ihtiyaç duyduğu
$ sudo apt-get update
$ sudo apt-get upgradeGerekli 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-toolsDaha 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-devOpenCV 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 buildAş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 installBu 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_PATHOpenCV 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 ldconfigArtı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_cvYeni 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_highguiSoru, görüş ve önerileriniz için bana ulaşabilirsiniz!