OpenCV & Raspberry Pi
HEDEFLER
1) Trafik ışıklarını
algılayıp o an yanmakta olan ışığın rengine göre dur/geç konusunda karar veren,
2) Önündeki araçla
arasındaki mesafeyi koruyabilen,
3) Yol çizgilerine
sadık kalan,
…(eklenebilir
ya da değiştirilebilir hedeflerle) hareket edecek bir araç.
AŞAMA -1- (30.09.2017)
İlk
aşama olarak Ağustos-Eylül (2017) süreci
daha çok araştırmaya dayalı geçti.
OpenCV
kütüphanesini projemiz için verimli ve yeterli buldum. Bu süreçte aynı zamanda
raspberry pi ile tanıştım. Aklımdaki fikir ikisini bir araya getirmekti.
Neden Raspberry Pi?
Raspberry
Pi, kredi kartı büyüklüğünde ve oldukça uygun fiyata sahip bir
bilgisayardır. “Mini Bilgisayar” kavramı kendisine çeken ilk kavram oldu.
Kullanım alanının çokluğu ikinci tercih nedenim.
O yüzden temel bilgisayar işlevlerini
kullanabilirsiniz. Örneğin tarayıcısını kullanarak internete girebilir,
videolar izleyebilir, müzik dinleyebilirsiniz.
Raspberry Pi, LibreOffice’i rahatlıkla
çalıştırabiliyor.
GPIO portları ile sensörler bağlamanız ve sıcaklık,
duman, yakınlık/uzaklık, ses vs. ölçmeniz ve işlemeniz mümkün.
Bununla birlikte motorlar bağlayarak hareket
ettirebilmek de mümkün.
Aynı zamanda Raspberry Pi’yi düşük güç tükettiği
için tekrarlayan ya da basit ama uzun işleri yaptırmak için kullanabilir,
sürekli açık bir sunucu haline getirebilirsiniz. Örneğin dosya indirmek,
USB’deki dosyalarınıza internet üzerinden erişmek gibi.
Öncelikle cihazın donanımına bir bakalım:
Raspberry
Pi 3 Özellikleri:
·
Broadcom BCM2837 chipset 1.2 Ghz 4 çekirdekli ARM
Cortex-A53 işlemci (64bit mimariyi destekliyor)
·
VideoCore IV 3D çift çekirdekli çoklu ortam/grafik
işlemcisi. (OpenGL ES 2.0 desteği)
·
1 GB LPDDR2 bellek (RAM)
·
Dahili 802.11n WiFi (Kablosuz ağ bağlantısı)
·
Bluetooth 4.1 (Bluetooth LE)
·
SD kart yuvası
·
4xUSB 2.0 bağlantısı
·
1xHDMI çıkışı (ses çıkışını destekliyor)
·
1×3.5mm kulaklıklık çıkışı
·
1x Ethernet portu
·
Ekran (DSI) ve kamera (CSI) bağlantısı için destek
·
40 pin GPIO portları
·
MicroUSB güç girişi (maks 2.5A @ 5V)
Kutu İçeriği ve Diğer Gereksinimler
Kutunun içeriğinden
elektrostatik poşet içeresinde Raspberry Pi 3 ve güvenlik/kullanım bilgileri
dışında hiç bir şey çıkmıyor.
Maliyet
Raspberry Pi 3
modeli yurt dışında 30 £ civarı satılıyor. Hem fazla beklememek hem de
gümrük ve vergi masraflarından kaçınmak için Türkiye’den almak daha
mantıklıydı.Biz 138TL’ye denk aldık. Ülkemizdeki robot ve elektronik satan
internet sitelerinden kolaylıkla temin edilebilmekte.
8 GB Class 10
MicroSD tercih ettik 15-20TL. Kullanımınıza bağlı olarak daha yüksek kapatiseli
ve hızlı kartlara da yönlenebiliriz
Cihazı beslemek
için telefon ya da tablet adaptörlerini kullandık.
Yazılım ve Desteklenen
İşletim Sistemleri
Raspberry Pi için
hazırlanan ve resmi olarak desteklenen yazılım Raspbian, yani
Raspberry + Debian.
Oldukça hafif olan
bu işletim sistemi Pi için optimize edilmiş ve hafifletilmiş bir Linux
dağıtımı.
Bununla birlikte
biraz daha gelişmiş ve bilgisayara yakın arayüz arayanlar için Ubuntu MATE‘in
Raspberry Pi 3 ve 2 için hazırladığı sürümler öneriliyor. Bu sürümler daha
görsel ve masaüstü kullanımı için daha kolay, yazılım depoları da biraz daha
geniş.
Snappy Ubuntu
Core ise
daha çok server gibi kullanım için geliştirilmiş ve Canonical tarafından
hazırlanan Ubuntu dağıtımı.
Bununla
birlikte Windows
10 IoT sürümü de Raspberry Pi ile destekleniyor. Ancak bu
sürümden alıştığımız Windows arayüz ve uygulamalarını çalıştırmayacaktır.
Bununla
birlikte OpenELEC veya OSMC gibi ortam
merkezi ve medya kutusu olarak çalıştırabilecek işletim sistemleri de mevcut.
Ayrıca Android, Android TV ve Chromium OS üzerine
çalışan geliştiriciler de mevcut. Ancak bu sistemler hem tam optimize değil hem
de Pi’nin kullanım amacından biraz uzak.
Biz RASPBIAN kurduk.
Sensörler ve
motorları da kontrol edebilecek biraz da veri işleyebilecek bir IoT aracı/geliştirme
kiti olarak oldukça makul özelliklere sahip.
Raspberry pi kullanımında üç yöntem
gördüm;
1) HDMI
kablosu ile bir monitöre raspberry pi' ı bağlayarak klavye ve mouse
ile kullanacağımız NetBeans, VS, Dev++ gibi bir IDE üzerinde OpenCV
kullanarak raspberry pi'ı direkt mini bir bilgisayar
gibi kullanabiliriz.
2) Uzak masaüstü
programı kullanarak da erişebiliriz.
3) Benim
tercihim olan son yöntem ise; monitöre ihtiyaç duymadan (çünkü monitörümüz
yok) direkt laptopta yazmak. Normalde Linux'un kendisi bir IDE'ye
(NetBeans gibi) ihtiyaç duymadan da ufak güncellemelerle C/C++ gibi dillerdeki
kodları derleyebilir. Sadece OpenCv Library'lerini indirip birkaç ayar yapmak
yeterliymiş o yüzden. Ayrıca raspberry pi kendi bilgisayarımız gibi
performanslı bir makine değil. Kendi bilgisayarımızdan yazmak daha mantıklı
geldi.
Raspberry Pi Kamera(D)
Kamera olarak ilk denemeler için
kendi orijinal kamerası olan WaveShare firmasının ürettiği, Raspberry Pi
orjinal kamera modülü ile uyumlu CSI konektörü üzerinden bağlanan kamerasını
tercih ettim; Raspberry Pi Kamera(D)
Özellikler:
·
Tüm Raspberry Pi modelleri ile uyumludur
·
5 megapiksel OV5647 sensör, sabit odaklı lens
modülü
·
CCD boyutu: 1/4 inç
·
Kamera çalışma gerilimi 3-5V'dur.
·
Diyafram (F): 2.8
·
Odak uzaklığı: 3.37mm
·
Görüş açısı: 72.4 derece
·
İdeal çözünürlük: 1080p
·
Kamera flat kablosu 60V'u desteklemektedir.
·
2592 × 1944 fotoğraf çözünürlüğü
·
1080p30, 720p60 and 640x480p60/90 video kaydedebilme
·
Boyutlar: 25mm x 24mm x 9mm
Neden OpenCV?
OpenCV
(Open Source Computer Vision) açık kaynak kodlu görüntü işleme
kütüphanesidir. 1999 yılında İntel tarafından geliştirilmeye başlanmış daha
sonra Itseez, Willow, Nvidia, AMD, Google gibi şirket ve toplulukların
desteği ile gelişim süreci devam etmektedir. İlk sürüm olan OpenCV alfa 2000
yılında piyasaya çıkmıştır. İlk etapta C programlama dili ile geliştirilmeye
başlanmış ve daha sonra birçok algoritması C++ dili ile geliştirilmiştir. Open
source yani açık kaynak kodlu bir kütüphanedir ve BSD lisansı ile altında
geliştirilmektedir. BSD lisansına sahip olması bu kütüphaneyi istediğiniz
projede ücretsiz olarak kullanabileceğiniz anlamına gelmektedir. OpenCV
platform bağımsız bir kütüphanedir, bu sayede Windows, Linux, FreeBSD, Android,
Mac OS ve iOS platformlarında çalışabilmektedir. C++, C, Python, Java, Matlab,
EmguCV kütüphanesi aracılığıyla da Visual Basic.Net, C# ve Visual C++ dilleri
ile topluluklar tarafından geliştirilen farklı wrapperlar aracılığıyla Perl ve
Ruby programlama dilleri ile kolaylıkla OpenCV uygulamaları geliştirilebilir.
OpenCV
kütüphanesi içerisinde görüntü işlemeye (image processing) ve makine
öğrenmesine (machine learning) yönelik 2500’den fazla algoritma bulunmaktadır.
Bu algoritmalar ile yüz tanıma, nesneleri ayırt etme, insan hareketlerini
tespit edebilme, nesne sınıflandırma, plaka tanıma, üç boyutlu görüntü üzerinde
işlem yapabilme, görüntü karşılaştırma, optik karakter tanımlama OCR (Optical
Character Recognition) gibi işlemler rahatlıkla yapılabilmektedir.
OpenCV Bileşenleri
OpenCV
kütüphanesini daha iyi anlamak için mimarisinden ve OpenCV’yi oluşturan
bileşenlerden bahsetmek istiyorum.
- Core: OpenCV’nin temel fonksiyonları ve
matris, point, size gibi veri yapılarını bulundurur. Ayrıca görüntü
üzerine çizim yapabilmek için kullanılabilecek metotları ve XML işlemleri
için gerekli bileşenleri barındırır.
- HighGui: Resim görüntüleme, pencereleri yönetme
ve grafiksel kullanıcı arabirimleri için gerekli olabilecek metotları
barındırır. 3.0 öncesi sürümlerde dosya sistemi üzerinden resim dosyası
okuma ve yazma işlemlerini yerine getiren metotları barındırmaktaydı.
- Imgproc: Filtreleme operatörleri, kenar bulma,
nesne belirleme, renk uzayı yönetimi, renk yönetimi ve eşikleme gibi
neredeyse tüm fonksiyonları içine alan bir pakettir. 3 ve sonra sürümlerde
bazı fonksiyonlar değişmiş olsada 2 ve 3 sürümünde de bir çok fonksiyon
aynıdır.
- Imgcodecs: Dosya sistemi üzerinden resim ve video
okuma/yazma işlemlerini yerine getiren metotları barındırmaktadır.
- Videoio: Kameralara ve video cihazlarına
erişmek ve görüntü almak ve görüntü yazmak için gerekli metotları
barındırır. OpenCV 3 sürümü öncesinde bu paketteki birçok metot video
paketi içerisindeydi.
Tüm OpenCV
modülleri için http://docs.opencv.org/3.0-beta/modules/refman.html adresine göz atabilirsiniz.
Alternatif Görüntü İşleme Kütüphaneleri
Görüntü
işleme projelerinizde kullanacağınız kütüphaneyi amacınıza uygun olarak
seçmeniz önemlidir. Bu seçimi yaparken ne yapmak istediğinize doğru karar
vermelisiniz, örneğin sadece kameradan (usb, ip vs.) görüntü almak için
projenize OpenCV entegre etmenize gerek olmayabilir. Bu gibi durumlar için ve
OpenCV’nin neden iyi olduğunu anlayabilmek amacıyla alternatif olarak görüntü
işleme kütüphanelerine de bakalım.
- MATLAB: Matlab için bir görüntü işleme
kütüphanesi olarak bahsetmek doğru değildir fakat içerisinde görüntü
işlemeye yönelik temel algoritmaları barındırmaktadır.Dördüncü nesil ve
çok amaçlı bir programlama dilidir. Akademik araştırmalarınızda,
performansın önemli olmadığı durumlarda temel görüntü işlemleri için
tercih edebilirsiniz.Matlab kullanarak OpenCV Kütüphanesi ile etkileşimli
olarak da uygulamalarda geliştirmek mümkündür.
- Halcon: Endüstriyel projeler için tercih
edilen, kendi içerisinde geliştirme ortamının yanı sıra çeşitli
programlama dilleri (C, C++, VS C++, C#, VB.NET) için kütüphanesi bulunan,
yapay görme (machine vision) odaklı ticari bir yazılımdır. İçerisinde
birçok hazır fonksiyon bulundurur bu sayede hızlı uygulamalar
geliştirilebilir. OpenCV açık kaynak kodlu, ücretsiz bir kütüphanedir ve
computer vision odaklıdır.Bu yönleri ile Halcon’dan ayrılmaktadır.
- OpenFrameworks: Açık kaynak olarak geliştirilen
bu kütüphane C++ programlama dili için geliştirilen bu proje OS
X, Linux, Embedded Linux (ARM), iOS, Android platformlarında
çalışabilmektedir. OpenCV kütüphanesinin bir çok algoritmasını kullanır ve
temel çıkış amacı kolay ve hızlı uygulama geliştirmektir.
Örneğin OpenCV ile 2t sürede gerçekleştirdiğiniz bir işi 1t sürede
gerçekleştirebilirsiniz, bunun temel sebebi ise bir çok fonksiyonu
aracılığıyla standart hale getirilmiş olan işleri tek satır ile
yapabilmesidir (Nesne tespiti,takibi renk belirleme, karşılaştırma vb.).
- CIMG: Açık kaynak kodlu bir görüntü işleme kütüphanesidir.
Windows, Linux ve OS X platformu üzerinde çalışmaktadır. Sadece C++ dili
için desteği bulunmaktadır fakat yazılmış wrapperlar ile Java ve Python
ile de uygulama geliştirilebilmektedir. Birçok algoritmayı
barındırmaktadır fakat OpenCV kadar performanslı ve geniş bir algoritma
altyapısına sahip değildir.
- Fiji: Java platformu için geliştirilmiş açık
kaynak kodlu GPL lisansına sahip bir görüntü işleme kütüphanesidir.
Windows, Linux ve MAC OSX Intel 32-bit veya 64-bit üzerinde çalışır.
Bilimsel görüntü analizi için geliştirilmiştir. Genetik, hücre biyolojisi,
nöro-bilim gibi alanlar için özelleştirilmiş algoritmalara sahiptir.
Endrov,
ImageJ, Lead tools, Pink, Image Magick, Boost ise görüntü işleme
kütüphanelerinden bazılarıdır.
Yorumlar
Yorum Gönder