T.C. BILEC I˙ LECIK I˙ K SEYH ¸ EDEBALI˙ ÜNIVERS I˙VERSITES I˙ TESI˙ MÜHENDISL I˙ SLIK I˙K FAKÜLTESI˙ ˘ I˙ BÖLÜMÜ ˙ ISAYAR ˙ ˙ I˙G BILG MÜHENDISL
RASPBERRY PI˙ PYTHON DIL I˙ LI˙ KULLANILARAK OPEN CV ˙ ˙ SISTEM ˙ KÜTÜPHANES IYLE RENK VE MESAFE TAK IP I˙ Ay¸se se ÖCAL ˙ IRME ˙ BIT ÇALI¸SMASI SMASI
DANI¸SMANI : Doç. Dr. Dr. Metin KESLER BILEC I˙ LECIK I˙K 12 Ocak 2017
T.C. BILEC I˙ LECIK I˙ K SEYH ¸ EDEBALI˙ ÜNIVERS I˙VERSITES I˙ TESI˙ MÜHENDISL I˙ SLIK I˙K FAKÜLTESI˙ ˘ I˙ BÖLÜMÜ ˙ ISAYAR ˙ ˙ I˙G BILG MÜHENDISL
RASPBERRY PI˙ PYTHON DIL I˙ LI˙ KULLANILARAK OPEN CV ˙ ˙ SISTEM ˙ KÜTÜPHANES IYLE RENK VE MESAFE TAK IP I˙ Ay¸se se ÖCAL ˙ IRME ˙ BIT ÇALI¸SMASI SMASI
DANI¸SMANI : Doç. Dr. Dr. Metin KESLER BILEC I˙ LECIK I˙K 12 Ocak 2017
BILD I˙LDIR I˙RIM I˙ M Bu kitaptaki bütün bilgilerin etik davranı¸s ve akademik kurallar çerçevesinde elde edildi˘ digini g˘ ini ve yazım kurallarına uygun olarak hazırlanan bu çalı¸smada çalı¸smada bana ait olmayan her türlü ifade ve bilginin kayna gına g˘ ına eksiksiz atıf yapıldı gını g˘ ını bildiririm.
DECLARATION I hereby declare that all information in this document has been obtained and presented in accordance with academic rules and ethical conduct. I also declare that, as required by these rules and conduct, I have fully cited and referenced all materials and results that are not original to this work.
˙ Imza Ay¸se se ÖCAL Tarih:17.03.2017
ii
ÖZET ˙ IRME ˙ BIT ÇALI¸SMASI SMASI RASPBERRY PI˙ PYTHON DIL I˙ LI˙ KULLANILARAK OPEN CV ˙ ˙ SISTEM ˙ KÜTÜPHANES IYLE RENK VE MESAFE TAK IP I˙ Ay¸se se ÖCAL Bilecik Seyh S¸ eyh Edebali Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisli gi g˘ i Bölümü Danı¸sman: sman: Doç. Dr. Metin KESLER 2017, 43 2017, 43 Sayfa Sayfa Jüri Jüri Üyeleri Üyeleri
Imza I˙mza
. .. .. .. .. . .. .. .. . .. .. .. .. .. .. . .. .. .. .
. .. .. .. . .. .. .. . .. .. ..
. .. .. .. .. . .. .. .. . .. .. .. .. .. .. . .. .. .. .
. .. .. .. . .. .. .. . .. .. ..
. .. .. .. .. . .. .. .. . .. .. .. .. .. .. . .. .. .. .
. .. .. .. . .. .. .. . .. .. ..
Proje Proje çalı¸ çalı¸smamda smamda Python Python dilini dilini kullana kullanarak rak Open Open CV kütüpha kütüphanes nesiyl iylee görüntü görüntü i¸sleme sleme üzerin üzerinee çalı¸stım.B stım.Bunl unları arı hem Raspber Raspberry ry Pi üzerin üzerinde de hemde hemde Windows indows tabanl tabanlıı sistem sistem geli¸ geli¸stirerek stirerek yaptım.Raspber yaptım.Raspberry ry Pi’nin GPIO pinlerini kullanarak görüntüyü algılayıp led yakmasını ve Ultrasonik sensör yardımıyla mesafe ölçmesini sa˘ sagladım.Windows’da g˘ ladım.Windows’da GPIO paketlerini kullanamayacagım g˘ ım için sanki GPIO paketleri varmı¸s gibi algılamasını sa gladım.Ultrasonik g˘ ladım.Ultrasonik sensör içinde aysını gerçeklertirdim.
iii
ABSTRACT THESIS COLOR AND DISTANCE TRACKING SYSTEM WITH RASPBERRY PI PYTHON LIBRARY OPENED CV LIBRARY Ay¸se se ÖCAL Bilecik Seyh S¸ eyh Edebali University Engineering Faculty Department of Computer Engineering Advisor: Doç. Dr. Metin KESLER 2017, 43 2017, 43 Pages Pages Jury
Sign
. .. .. .. .. . .. .. .. . .. .. .. .. .. .. . .. .. .. .
. .. .. .. . .. .. .. . .. .. ..
. .. .. .. .. . .. .. .. . .. .. .. .. .. .. . .. .. .. .
. .. .. .. . .. .. .. . .. .. ..
. .. .. .. .. . .. .. .. . .. .. .. .. .. .. . .. .. .. .
. .. .. .. . .. .. .. . .. .. ..
I worked on image processing with Open CV library using Python language. I did this by developing Windows based system both on Raspberry Pi. I enabled Raspberry Pi to detect the image using GPIO pins and measure the distance with the help of ultrasonic sensor. I can not use GPIO packages on Windows I realized that GPIO packages existed as if I had done it. I realized the light inside the ultrasonic sensor.
iv
ÖNSÖZ Bitirme çalı¸smamın smamın ba¸sından sından sonuna kadar eme gi g˘ i geçen ve beni bu konuya yönlendiren saygı deger g˘ er hocam ve danı¸smanım smanım Sayın Metin KESLER sayın Murat ÖZALP’e ve çalı¸smalarımda smalarımda yardımcı olan Mr.Adrian Rosebrock’e tüm katkılarından ve hiç eksiltmedi˘ digi g˘ i deste˘ desteginden g˘ inden dolayı te¸sekkür sekkür ederim.
Ay¸se se ÖCAL 12 Ocak 2017
v
IÇ I˙ÇINDEK I˙NDEKILER I˙LER ÖNSÖZ
v
SEK S¸ EKI˙ LLER TABLOSU
viii
1 GIR I˙RI˙S¸
1
1.1 1.1 Görü Görünt ntüü ˙I¸ Isleme s¸ leme ile ˙Ilgili Ilgili Bazı Terim ve Tanımlar Tanımlar . . . . . . . . . . . . . .
˙ I˙ 2 PYTHON PYTHON PROGRA PROGRAMLAM MLAMA A DIL
1
4
2.1 2.1 Pytho Pythonn Nedir Nedir ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 OPEN CV
4
6
3.1 3.1 Open OpenCV CV Bile¸ Bile¸senleri senleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 RA RASP SPBE BERR RRY Y PI˙
7
9
4.1 Raspberr Raspberryy Pi 1 Hakkında Hakkında . . . . . . . . . . . . . . . . . . . . . . . . . .
10
4.2 Rasberry Rasberry Pi ’ye ’ye OpenCV OpenCV ve Python Python Kurulu Kurulumu mu . . . . . . . . . . . . . . .
12
5 ULTR ULTRAS ASON ONI˙ K SENSÖRLER
17
6 TEMEL MEL VIDEO I˙ DEO ˙ISLEMLER ¸ I˙
18
6.1 Gerçek Gerçek Zaman Zamanlı lı Görüntü Görüntüde de Kenar Kenar Bulma Bulma . . . . . . . . . . . . . . . . . 18 6.2 6.2 Cisi Cisiml mler erin in Seklini ¸ Belirleme ve Renk Algılama . . . . . . . . . . . . . .
19
6.3 6.3 Renk Renk Takibi akibi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
6.4 Renk Renk Takib Takibii ve ve Led Led Yakma . . . . . . . . . . . . . . . . . . . . . . . . .
20
6.5 Led Yakma ve Mesafe Mesafe Algılama Algılama . . . . . . . . . . . . . . . . . . . . . .
21
6.6 Windows’ indows’da da Cisim Algılama Algılama . . . . . . . . . . . . . . . . . . . . . . . .
22
6.7 Windows’t indows’taa Renk Renk ve Mesafe Mesafe Algıla Algılama ma . . . . . . . . . . . . . . . . . . .
22
7 EKLER
24
7.1 Ek-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
7.2 Ek-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
7.3 Ek-3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
7.4 Ek-4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
vi
KAYNAKLAR
33
ÖZGEÇMI˙S¸
34
vii
SEK S¸ EKILLER I˙LLER TABLOSU Sekil ¸ 1.1 1.1 Görü Görünt ntüü ˙I¸sleme sleme . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
Sekil ¸ 2.1 2.1 Pyth Python on Dili Dili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
Sekil ¸ 3.1 3.1 Open Open CV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
Sekil ¸ 3.2 OPen OPen CV Sürüml Sürümleri eri
. . . . . . . . . . . . . . . . . . . . . . . . .
7
Sekil ¸ 4.2 Raspb Raspberr erryy Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
Sekil ¸ 4.1 Raspb Raspberr erryy Pi B . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
Sekil 4 Sekil ¸ 4.2 .2 Rasberry Rasberry Pi GPIO Pin Diyagram Diyagramıı Sekil ¸ 4.3 Putty Terminal erminal Ekranı Ekranı
. . . . . . . . . . . . . . . . . . 12
. . . . . . . . . . . . . . . . . . . . . . . .
13
Sekil 4 Sekil ¸ 4.4 .4 Numpy Numpy paketini paketininn import import Edilmesi Edilmesi . . . . . . . . . . . . . . . . . .
15
Sekil ¸ 4.5 Open Open CV import import ˙I¸ I¸slemi slemi
16
. . . . . . . . . . . . . . . . . . . . . . .
Sekil 5 Sekil ¸ 5.1 .1 Ultrasonik Ultrasonik Sensör Sensör ile Mesafe Mesafe Algıla Algılama ma
. . . . . . . . . . . . . . . 17
Sekil ¸ 6.1 Kamereda Kameredann Kenar Kenar Bulma Bulma . . . . . . . . . . . . . . . . . . . . . . . Sekil ¸ 6.2 Sekil S¸ ekil Tespiti
19
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Sekil 6 Sekil ¸ 6.3 .3 Cisim ve Sari Renk Takibi akibi . . . . . . . . . . . . . . . . . . . . . .
20
Sekil 6. Sekil ¸ 6.44 Renk Takibi akibi ve ve Led Led Yakma . . . . . . . . . . . . . . . . . . . . . .
21
Sekil ¸ 6.5 Led Yakma ve Mesafe Takibi
. . . . . . . . . . . . . . . . . . . . 21
Sekil ¸ 6.6 Windo Windows ws Cisim Algılama Algılama . . . . . . . . . . . . . . . . . . . . . . 22 Sekil ¸ 6.6 Windo Windows ws Mesafe Mesafe Algılama Algılama . . . . . . . . . . . . . . . . . . . . . .
viii
23
1 GIR I˙RI˙S¸ Görün Görüntü tü i¸sleme sleme isim (Almanca (Almanca Bildbearb Bildbearbeitu eitung) ng) ölçülmü¸ ölçülmü¸s veya veya kayded kaydedilm ilmi¸ i¸s olan olan elek elekttronik (dijital) görüntü verilerini, elektronik ortamda (bilgisayar ve yazılımlar yardımı ile) amaca uygun ¸sekilde sekilde de˘ degi¸ g˘ i¸stirmeye stirmeye yönelik yapılan bilgisayar çalı¸sması. sması. Görüntü i¸sleme, sleme, verilerin, yakalanıp ölçme ve de gerlendirme g˘ erlendirme i¸sleminden sleminden sonra, ba¸ska ska bir aygıtta okunabilir bir biçime dönü¸stürülmesi stürülmesi ya da bir elektronik ortamdan ba¸ska ska bir elektronik ortama aktarmasına yönelik bir çalı¸sma sma olan "Sinyal i¸slemeden" slemeden" farklı bir i¸slemdir. slemdir. Görüntü i¸ssleme, daha çok, kaydedilmi¸s olan, mevcut görüntüleri i¸slemek, slemek, yani mevcut resim ve grafikleri, de˘ degi¸ g˘ i¸stirmek, stirmek, yabancıla¸stırmak stırmak ya da iyile¸stirmek stirmek için kullanılır. Daha çok foto gg˘ rafçılık ve grafik-Tasarım grafik-Tasarım alanlarında kullanılır.
1.1 1.1 Görü Görünt ntü ü ˙I¸ Isleme s¸ leme ile ˙Ilgili Ilgili Bazı Terim ve Tanımlar Resim Filtresi : Çekim sırasında kullanılmayan foto graf g˘ raf filtreleri ile elde edilen görüntü zenginli gini, g˘ ini, çekimden sonra kullanma imkânı sunan sanal bilgisayar araçlarıdır.
Dönü¸stürme stürme : Bir dosya biçimini, ba¸ska ska bir dosya biçimine dönü¸stürmek stürmek için kullanılan yazılımlara, dönü¸stürme stürme yazılımı denir. Bu sayede, belli bir program ile yapılmı¸s olan bir belge, ba¸ska ska bir bilgisayar programı ile açılıp kullanılabilir. Bir belgenin farklı bir yazılım kullanılarak açılabilmesi, ancak bu ¸sekilde sekilde mümkündür.
Makro : Kaydedilmi¸s bilgisayar komutları dizisine makro denir. denir. Makro sayesinde, üç be¸s adımda yapılabilen i¸slemler, slemler, tek bir komuta indirgenmi¸s olur. ve aynı i¸slem slem tekrar yapılmak istendiginde, g˘ inde, bu i¸slemi slemi yapmak için, kaydedilmi¸s olan makro kullanılır. bu sayede, birçok adımda yapılabilen bir i¸slem, slem, tek bir komutla (makro ile) yapılmı¸s olur.
Ölçeklendirme : Resim ve grafikler, orantılı ya da orantısız olarak büyültüp küçültülebilir buna ölçeklendirme denir. 1
Döndürme : Resim ve grafikler, yatay ve dikey olarak ya da kullanıcının istek ve ihtiyacına baglı g˘ lı olarak, kendi ekseni etrafında, belli bir açı dahilinde çevirilebilir. Buna döndürme denir.
Katman : Görüntü i¸sleme sleme yazılımlarında, alttaki nesnenin görünmesini engellemeyen, engellemeyen, saydam sanal" yüzeylere katman denir. Katmanlar, Özellikle, fotomontaj, kolaj çalı¸smaçalı¸smalarında ve resmim üzerine yazı eklenmesi sırasında, rahat çalı¸sma sma imkânı sa˘ saglar. g˘ lar.
Örtüleme : Bazı bölümleri, çalı¸smanın smanın dı¸sında sında tutmak için, Resimin bazı bölümleri kapatılabilir. Bu i¸sleme sleme örtme ya da maskeleme denir. Örtüler (Maskeler) resmin verilen komuttan etkilenmemsini veya bazı resim bölümlerinin gizlenmesini sa glar. g˘ lar.
Yansıtma : Resimler, yatay ve dikey olarak, aynadaki görüntüye benzer ¸sekilde ¸sekilde ters çevrilebilir. Buna yansıtma denir.
Devirme : Perspektif hatalarını resimlerin ileri geri düzeltilmesi ile elde edilir. buna devirme denir.
Renk düzeltmesi : Resimler üzerindeki ı¸sık sık ve renk tonları de gi¸ g˘ i¸stirilebilir. stirilebilir. I¸ I˙saretleme s¸ aretleme : Resmin belli bir bölümünün i¸slem slem için hedef gösterilmesine i¸saretleme saretleme denir. Verilen komut sadece i¸saretli saretli olan bölümü etkiler.
Sihirli de˘ degnek g˘ nek : Resim üzerindeki en küçük resim elemanına Piksel denir. Sihirli de gg˘ nek, resim elemanlarını seçmeye yarayan bir i¸saretleme saretleme aracıdır.
Fırça : Resim çizmek için kullanılan sanal araca fırça denir. Fırça, görüntü i¸sleme i¸sleme yazılımlarında, standart araçlardan biri olmu¸stur. stur. Ucu ve kalınlıgı g˘ ı istek ve ihtiyaca ba glı g˘ lı olarak, kullanıcı tarafından de gi¸ g˘ i¸stirilebilir. stirilebilir. Bazı programlarda, programlarda, dolgu deseni ile il e çizim yapmaya da imkân verir. 2
Silgi : Yapılan yanlı¸sları, sları, düzeltmek ya da ¸sekilleri sekilleri iste˘ istege g˘ e göre biçimlendirmek için kullanılan silme aracına silgi denir. kalınlı gı g˘ ı ve rengi kullanıcı tarafından de gi¸ g˘ i¸stirilebilir. stirilebilir.
Sekil ¸ 1.1: Görüntü i¸sleme sleme
3
2 PYTH PYTHON ON PROG PROGRA RAML MLAM AMA A DIL I˙LI˙ 2.1 2.1 Pyth Python on Ne Nedi dirr ? Python, nesne yönelimli, yorumlamalı, birimsel (modüler) ve etkile¸simli simli yüksek seviyeli bir programlama dilidir. dilidir.
Girintilere dayalı basit sözdizimi, dilin ö grenilmesini g˘ renilmesini ve akılda kalmasını kolayla¸stırır. stırır. Bu da ona söz diziminin ayrıntıları ile vakit yitirmeden programlama yapılmaya ba¸slanaba¸slanabilen bir dil olma özelligi g˘ i kazandırır.
Modüler yapısı, sınıf dizgesini (sistem) ve her türlü veri alanı giri¸sini sini destekler. Hemen hemen her türlü platformda çalı¸sabilir. sabilir. (Unix , Linux, Mac, Windows, Amiga, Symbian). Python ile sistem programlama, kullanıcı arabirimi programlama, a g˘ programlama, uygulama ve veritabanı yazılımı programlama gibi birçok alanda yazılım geli¸stirebilirsiniz. geli¸stirebilirsiniz. Büyük yazılımların hızlı bir sekilde s¸ ekilde prototiplerinin üretilmesi ve denenmesi gerekti gi g˘ i durumlarda da C ya da C++ gibi dillere tercih edilir.
Python, Guido Van Rossum adlı Hollandalı bir programcı tarafından yazılmı¸s yazılmı¸s bir programlama dilidir. Geli¸stirilmesine stirilmesine 1990 yılında ba¸slanan slanan Python; C ve C++ gibi programlama dillerine kıyasla; •
daha kolay ö grenilir, g˘ renilir,
•
program geli¸stirme stirme sürecini kısaltır,
•
bu programlama dillerinin aksine ayrı bir derleyici programa ihtiyaç duymaz,
•
hem daha okunaklıdır, okunaklıdır, hem de daha temiz bir sözdizimine sahiptir. sahiptir. 4
Python’un bu ve buna benzer özellikleri sayesinde dünya çapında ün sahibi büyük kurulu¸slar slar (Google, Yahoo! ve Dropbox gibi) bünyelerinde her zaman Python programcılarına ihtiyaç duyuyor. Mesela pek çok büyük ¸sirketin Python bilen programcılara i¸s olana˘ olanagı g˘ ı sundu˘ sundugunu, g˘ unu, Python’un ba¸s geli¸stiricisi stiricisi Guido Van Rossum’un 2005 ile 2012 yılları arasında Google’da çalı¸stı˘ stıgını, g˘ ını, 2012 yılının sonlarına do gru g˘ ru ise Dropbox ¸sirketine sirketine geçtigini g˘ ini söylersek, bu programlama dilinin önemi ve geçerlili gi g˘ i herhalde daha belirgin bir ¸sekilde sekilde ortaya çıkacaktır.
Bu arada, her ne kadar Python programlama dili ile ilgili ço gu g˘ u görsel malzemenin üzerinde bir yılan resmi görsek de, Python kelimesi aslında ço gu g˘ u ki¸sinin sinin zannetti gi g˘ i gibi piton yılanı anlamına gelmiyor. Python Programlama Dili, ismini Guido Van Rossum’un çok sevdigi, g˘ i, Monty Python adlı altı ki¸silik silik bir ˙Ingiliz komedi grubunun Monty Python’s Flying Circus adlı gösterisinden alıyor. alıyor.
Sekil ¸ 2.1: Python dili
5
3 OPEN CV OpenCV (Open Source Computer Vision) açık kaynak kodlu görüntü i¸sleme i¸sleme kütüphanesidir. 1999 yılında ˙Intel Intel tarafından geli¸stirilmeye stirilmeye ba¸slanmı¸ slanmı¸s daha sonra Itseez, Willow, Nvidia, AMD, Google gibi ¸sirket sirket ve toplulukların deste gi g˘ i ile geli¸sim sim süreci devam etmektedir. ˙Ilk sürüm olan OpenCV alfa 2000 yılında piyasaya çıkmı¸stır. stır. ˙Ilk etapta C programlama dili ile geli¸stirilmeye stirilmeye ba¸slanmı¸ slanmı¸s ve daha sonra birçok algoritması C++ dili ile geli¸stirilmi¸ stirilmi¸stir. stir. Open source yani açık kaynak kodlu bir kütüphanedir ve BSD lisansı ile altında geli¸stirilmektedir. stirilmektedir.
BSD lisansına sahip olması bu kütüphaneyi istedi giniz g˘ iniz projede ücretsiz olarak kullanabilece˘ lanabileceginiz g˘ iniz anlamına gelmektedir. OpenCV platform ba gımsız g˘ ımsız bir kütüphanedir, bu sayede Windows, Linux, FreeBSD, Android, Mac OS ve iOS platformlarında çalı¸sabilçalı¸sabilmektedir. C++, C, Python, Java, Matlab, EmguCV kütüphanesi aracılı gıyla g˘ ıyla da Visual Basic.Net, ve Visual C++ dilleri ile topluluklar tarafından geli¸stirilen stirilen farklı wrapperlar aracılı˘ aracılıgıyla g˘ ıyla Perl ve Ruby programlama dilleri ile kolaylıkla OpenCV uygulamaları geli¸sgeli¸stirilebilir.
Sekil ¸ 3.1: Open CV
2016-05-27 tarihli güncelleme, OpenCV geli¸stirici stirici Itseez firması Intel tarafından satın alındı. OpenCV geli¸stirmesine stirmesine Intel çatısı altından devam edece gini g˘ ini duyurdu.
OpenCV kütüphanesi içerisinde görüntü i¸slemeye slemeye (image processing) ve makine ö gg˘ 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 6
sınıflandırma, plaka tanıma, üç boyutlu görüntü üzerinde i¸slem i¸slem yapabilme, görüntü karsıla¸ s¸ ıla¸stırma, stırma, optik karakter tanımlama OCR (Optical Character Recognition) gibi i¸slemler rahatlıkla yapılabilmektedir. yapılabilmektedir.
Sekil ¸ 3.2: OPen CV sürümleri
3.1 3.1 Open OpenCV CV Bile¸ Bile¸senleri senleri OpenCV kütüphanesini daha iyi anlamak için mimarisinden ve OpenCV’yi olu¸sturan olu¸sturan bile¸senlerden senlerden 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¸slemleri slemleri için gerekli bile¸senleri senleri barındırır. barındırır.
HighGui : Resim görüntüleme, pencereleri pencereleri yönetme ve grafiksel kullanıcı arabirimleri için gerekli olabilecek metotları barındırır. 3.0 öncesi sürümlerde dosya s istemi üzerinden resim dosyası okuma ve yazma i¸slemlerini slemlerini yerine getiren metotları barındırmaktaydı.
Imgproc : Filtreleme operatörleri, kenar bulma, nesne belirleme, renk uzayı yönetimi, renk yönetimi ve e¸sikleme sikleme gibi neredeyse tüm fonksiyonları içine alan bir pakettir. 3 ve sonra sürümlerde bazı fonksiyonlar de gi¸ g˘ i¸smi¸ smi¸s olsada 2 ve 3 sürümünde de bir çok fonksiyon aynıdır. 7
Imgcodecs : Dosya sistemi üzerinden resim ve video okuma/yazma i¸slemlerini slemlerini yerine getiren metotları barındırmaktadır. barındırmaktadır.
Videoio : Kameralara ve video cihazlarına eri¸smek smek 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. içerisindeydi.
8
4 RA RASP SPBE BERR RRY Y PI˙ Raspberry Pi Birle¸sik sik Krallık’ta Raspberry Pi Vakfı akfı tarafından tarafından okullarda bilgisayar bilimini ö˘ ögretmek g˘ retmek amacılıgıyla g˘ ıyla geli¸stirilmi¸ stirilmi¸s kredi kartı büyüklü günde g˘ ünde tek kartlı bir bilgisayardır. Fiyatı modeline göre de gi¸ g˘ i¸siklik siklik gösterir ve 5 ile35 arasındadır. Raspberry Pi 2 modeli Subat S¸ ubat 2015’te çıkmı¸stır.Sonraki stır.Sonraki model Raspberry Pi Zero, Kasım 2015’te çıkmı¸sstır. Son model olan Raspberry Pi 3 ise Subat ¸Subat 2016’da çıkmı¸stır. stır.
Raspberry Pi bilgisayarı Element Premier Farnell, RS Components ve Egoman firmaları tarafından imal edilmektedir. edilmektedir. Bu firmalar Raspberry Pi bilgisayarını Internet üzerinde satmaktadırlar. satmaktadırlar. Egoman, Çin ve Tayvan Tayvan’da ’da satılan bir sürümünü satmaktadır ve rengi kırmızı olup FCC/CE etiketlerini ta¸sımaz, sımaz, bunun dı¸sında sında di˘ digerlerinden g˘ erlerinden hiçbir farkı bulunmabulunmamaktadır.
Raspberry Pi, ilk modellerinde ARM1176JZF-S 700 MHz merkezi i¸slem i¸slem birimini içeren Broadc Broadcom om BCM283 BCM28355 mikroç mikroçipi ipi üzerin üzerinee kurulm kurulmu¸ u¸stur stur. Daha Daha sonra sonra piyasa piyasaya ya çıkan çıkan RaspRaspberry Pi 2 modelinde Broadcom Broadcom BCM2836 kullanmı¸stır. stır. VideoCore VideoCore IV GPU grafik i¸ i slem s¸ lem birimine sahiptir. Booting ve veri depolaması için SD kart kullanır. Üzerinde USB 2.0 portları, HDMI video çıkı¸sı, sı, ses çıkı¸sı, sı, MIPI kamera giri¸si, si, GPIO arayüzü ve 5V MicroUSB güç giri¸si si bulunmaktadır.
Vakfın web sitesinden Raspbian (Debian Wheezy tabanlı), Pidora (Fedora tabanlı), Snappy Ubuntu Core veya desteklenen di ger g˘ er i¸sletim sletim sistemleri indirilebilir. Sitesi dı¸sınsındaki Pardus ARM, Arch Linux ARM ve Windows 10 IoT Core i¸sletim i¸sletim sistemlerini de destekler. Python programlama dili ile programlanabildi gi g˘ i gibi BBC Basic, C ve Perl programlama dilleri de kullanılabilmektedir. kullanılabilmektedir.
17 Aralık 2012 tarihinde Raspberry Pi Vakfı, IndieCity ve Velocix firmalarıyla i¸sbirli i¸sbirli˘gi g˘ i yaparak kullanıcıların uygulama programları indirebilmeleri için Pi Store’u açmı¸slardır. Kullanıcıların, Kullanıcıların, Raspbian i¸ i sletim s¸ letim sisteminde bulunan bir uygulamayı kullanarak çe¸sitli sitli ka9
tegorilerdeki tegorilerdeki uygulamaları bularak indirmeleri mümkündü ve kullanıcıların geli¸ geli ¸stirdikleri stirdikleri uygulamalar uygulamalar da onaylandıktan onaylandıktan sonra di ger g˘ er kullanıcıların kullanımına sunuluyordu. Ancak 1 Subat ¸ 2016 itibarıyla Pi Store, Raspberry Pi Vakfı tarafından bazı sorunlar yüzünden kapatılmı¸stır. stır.
Sekil ¸ 4.2: Raspberry Pi
4.1 Raspbe Raspberry rry Pi 1 Hakkın Hakkında da
•
Mevcut Raspberry Raspberry Pi Model B’de 26 GPIO pini vardır.
•
Mevcut Raspberry Pi’de 2 adet USB2.0 portu var.
•
Micro SD Kart: Açık konu¸smak smak gerekirse normal SD kart Raspberry Pi’de bence çok kaba duruyordu. Model B+’da SD kart yerine Mikro SD’ye geçilmi¸s geçilmi¸s olması cihazın hem daha kibar, hem de çarpmalara kar¸sı kar¸sı vs. kartın daha güvenli olmasını sa˘ saglayacak. g˘ layacak.
•
Daha az güç tüketimi : Mevcut Model B, bilindi gi g˘ i üzere 1W enerji kullanmakta idi, Model B+’da regülatör degi¸ g˘ i¸simi simi ile bu de˘ deger g˘ er 0.5W’a kadar dü¸stü. stü. Bu da artık yarı yarıya daha az enerji harcaması, adaptörlerden dolayı akım yetmezli gi g˘ i gibi pek çok sorunun önüne geçilecek anlamına geliyor. 10
Sekil ¸ 4.1: Raspberry Pi B
•
Daha iyi ses çıkı¸sları sları: Analog ses çıkı¸sları sları dip gürültüsünden etkilenmekte, ve de kirli sese neden olabilmekteydi. Devrede yapılan de gi¸ g˘ i¸siklik siklik ile bu sorun giderildi.
•
Daha derli bir board/devre düzeni : USB ba˘ baglantıları g˘ lantıları board’ın kenarlarına hizalandı, kompozit video 3.5mm jack ile beraber oldu, ve de dikdörtgen ¸seklinde ¸seklinde 4 tane ba˘ baglantı g˘ lantı deligi g˘ i ayarlandı.
11
Sekil ¸ 4.2: Rasberry Pi GPIO pin diyagramı
4.2 Rasberr Rasberryy Pi Pi ’ye ’ye OpenC OpenCV V ve ve Pytho Python n Kurulu Kurulumu mu •
1. Adım : Raspberry Pi Rasbian Rasbian Kurulumu : ˙Internet üzerinden Rasbian i¸sletim sletim sistemi indirilerek SD Card’a imaj atılarak yüklenir.
•
2.Adım: ˙I¸ I¸sletim sletim sistemi kurulduktan sonra Pi güncellenir ve Python kurulumu yapılır.
•
3. Adım : Numpy kütüphanesi kurulur. 12
•
4. Adım Open CV kütüphanesi kütüphanesi kurulur. kurulur.
•
5. Adım : ˙Import Import i¸slemi slemi gerçekle¸stirilir. stirilir.
Sekil ¸ 4.3: Putty terminal ekranı
Putty’den terminal açıldı gında, g˘ ında, yüklü paketleri güncelleyip yükselttikten sonra Raspberry Pi’yi güncellenerek ba¸slayaca˘ slayacagız. g˘ ız. $ sudo apt-get update $ sudo apt-get upgrade $ sudo rpi-update •
Gerekli geli¸stirici stirici araçlarını ve paketlerini yükleyin.
$ sudo apt-get install build-essential cmake pkg-config •
Gerekli görüntü G / Ç paketlerini kurun. Bu paketler, JPEG, PNG, TIFF, vb. Gibi çe¸sitli sitli resim dosyası formatlarını yüklemenize izin verir.
$ sudo apt-get install libjpeg8-dev libjpeg8-dev libtiff4-de l ibtiff4-devv libjasper-dev libpng12-dev •
GTK geli¸stirme stirme kitaplı˘ kitaplıgını g˘ ını yükleyin. Bu kütüphane, Grafik Kullanıcı Arayüzlerini (GUI’ler) olu¸sturmak sturmak için kullanılır ve OpenCV’nin highgui kütüphanesi için ekranınızdaki görüntüleri görmenizi sa glar. g˘ lar. 13
$ sudo apt-get install libgtk2.0-dev •
Gerekli video G / Ç paketlerini kurun. Bu paketler OpenCV kullanarak video dosyalarını yüklemek için kullanılır. kullanılır.
$ sudo s udo apt-get install libavcodec-de libavcodec-devv libavformat-dev libavformat-dev libswscale-dev libswscale-dev libv4l-dev libv4l-dev •
OpenCV içinde çe¸sitli sitli i¸slemleri slemleri optimize etmek için kullanılan kitaplıkları yüklenir. yüklenir.
$ sudo apt-get install libatlas-base-dev gfortran •
pip kurulumu
$ wget https://bootstrap.pypa.io/get-pip.p https://bootstrap.pypa.io/get-pip.pyy $ sudo python get-pip.py •
Virtualenv ve virtualenvwrapper’ı kurulur.
$ sudo pip install virtualenv virtualenv virtualenvwrapper virtualenvwrapper $ sudo rm rm -rf /.cache/p /.cache/pip ip •
Ardından, Ardından, / .profil .profilee dosya dosyanızı nızı a¸sa˘ sagıdaki g˘ ıdaki satırları içerecek ¸sekilde sekilde güncellenir.
# virtualenv and virtualenvwrapper export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper /usr/local/bin/virtualenvwrapper.sh .sh •
.profile dosyanızı yeniden yüklenir. yüklenir.
$ source /.profile •
Bilgisayarınızın görme sanal ortamını krurulur. krurulur.
$ mkvirtualenv cv •
Simdi ¸ Python 2.7 geli¸stirme stirme araçlarını kuralabilir. 14
$ sudo apt-get install python2.7-dev python2.7-dev •
OpenCV Python ba glamaları, g˘ lamaları, resimleri çok boyutlu NumPy dizileri olarak temsil etti˘ ettiginden g˘ inden NumPy’yi de yüklemeliyiz.
$ pip install numpy
Sekil ¸ 4.4: Numpy paketinin import edilmesi
•
OpenCV’yi indirin ve paketini açın
$ wget -O opencv-2.4.10.zip http://sourceforge.net/projects/opencvlibrary/files/opencvunix/2.4.10/opencv-2.4.10.zip/download $ unzip opencv-2.4.10.zip opencv-2.4.10.zip $ cd opencv-2.4.10 opencv-2.4.10 •
Kurulumu ayarlanması
$ mkdir build $ cd build $ cmake cmake -D CMAKE_B CMAKE_BUILD_ UILD_TYPE TYPE=RELE =RELEASE ASE -D CMAKE_IN CMAKE_INST STALL_ ALL_PREF PREFIX=/u IX=/usr/loc sr/local al -D BUILD_NE BUILD_NEW_PY W_PYTHON THON_SUP _SUPPOR PORT=ON T=ON -D INSTALL_ INSTALL_C_EX C_EXAMPL AMPLES=O ES=ON N -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON .. •
OpenCV’yi derlenmesi. 15
$ make •
Son olarak, OpenCV’yi kurabiliriz.
$ sudo make install $ sudo ldconfig •
Ancak, Ancak, Open Open Virtual irtualCV’ CV’yi yi cv sanal sanal ortamı ortamımız mızda da kulla kullanma nmakk için için öncel öncelikl iklee OpenC OpenCV’y V’yii site-packages dizinimize sembolik olarak ba glamamız g˘ lamamız gerekir.
$ cd /.virtuale /.virtualenv nvs/cv/ s/cv/lib/p lib/pytho ython2.7 n2.7/site/site-pack packages ages// $ ln -s /usr/local /usr/local/lib/p /lib/pytho ython2.7 n2.7/site/sitepackages/cv2.so packages/cv2.so cv2.so $ ln -s /usr/local/lib/python2.7/site-packa /usr/local/lib/python2.7/site-packages/cv ges/cv.py .py cv.py •
Sonunda OpenCV ve Python kurulumlarımıza bir test sürü¸sü yapabiliriz.
$ workon cv $ python » import cv2 » cv2.__version__ cv2.__version__
Sekil ¸ 4.5: Open CV import i¸slemi slemi
16
5 ULTR ULTRAS ASON ONIK I˙K SENSÖRLER Ultrasonik ses dalgaları 20 kHz ile 500 kHz arasında frekanslara sahip ses dalgalarıdır. Bizim duyabildi gimiz g˘ imiz 300 Hz-14000 Hz bandının üzerindedirler. üzerindedirler. Ultrasonik sensörler ultrasonik ses dalgaları yayan ve bunların engellere çarpıp geri dönmesine kadar geçen süreyi hesaplayarak aradaki uzaklı gı g˘ ı belirleyebilen sensörlerdir. sensörlerdir.
Bu sensörlerde bu kadar yüksek frekanslarda ses dalgalarının yayılmasının nedeni ; bu frekanslardaki dalgaların düzgün do grusal g˘ rusal sekilde s¸ekilde ilerlemeleri , enerjilerinin yüksek olması ve sert yüzeylerden kolayca yansımasıdır.
Sekil ¸ 5.1: Ultrasonik sensör ile mesafe algılama
Ultrasonik sensörlerin algılama menzili uygun ko¸sullarda sullarda 30 metreye varabilir. Ultrasonik sensörlerde iki adet transducer bulunur. Bunlardan biri ultrasonik speaker di geri g˘ eri de ultrasonik mikrofondur. Elektronik devre ile ultrasonik speaker’dan ses dalgasının yayılma anı ile bu ses dalgasının engele çarpıp yansıyarak ultrasonik mikrofon tarafından algılanması arasındaki zaman ölçülür ve bu zamanın ikiye bölünüp ses hızı ile çarpılması sonucunda da engel ile ultrasonik sensör arasındaki mesafe hesaplanır. Robotlarda genellikle 40 kHz’lik ultrasonik sensörler kullanılmaktadır. kullanılmaktadır.
17
6 TEMEL VIDEO I˙DEO ˙ISLEMLER S¸ LEMLERI˙ 6.1 Gerçek Gerçek Zamanlı Zamanlı Görüntüd Görüntüdee Kenar Kenar Bulma Kameradan alınan iki video karesi içerisinde kamera hareket vektörünü bulmamız gerekiyor. Burda OpenCV fonksiyonlarından GoodFeaturesToTrack fonksiyonu kullanılarak birinci video karesinde karesinde ki kö¸se se noktaları tespit ediliyor. Burda sözü geçen bir video karesinde bilgisayar ekranının kö¸seleri seleri masanın kö¸seleri seleri gibi kavramlardır. Edgeler de gilg˘ ildir.
Canny kenar dedektörü, John F. Canny tarafından tarafından 1986 yılında geli¸stirilmi¸ geli¸stirilmi¸stir. stir. Ve hala yaygın olarak bugün görüntü i¸sleme sleme de varsayılan varsayılan kenar dedektörleri olarak kullanılır.
Canny kenar algılama algoritması 5 adımda incelenir. incelenir. •
1. Adım : Yüksek frekanslı gürültü çıkarmak için bir Gauss filtre kullanarak düzgün görüntü elde edilir
•
2.Adım: : Görüntünü Görüntününn e˘ egim g˘ im yo˘ yogunlu˘ g˘ unlugu g˘ u hesaplanır.
•
3. Adım :Kenar algılama da "false" yanıtları kaldırmak için maksimum bastırma uygulanır.
•
4. Adım Egim g˘ im de˘ degerlerine g˘ erlerine bir alt ve üst sınır kullanarak e¸sikleme sikleme uygulanır. uygulanır.
•
5. Adım : Güçlü kenarlarına ba glı g˘ lı olmayan zayıf kenarları baskılayarak kenarlar elde edilir.
Kenar bulma uygulamasının ekran çıktısı ¸sekildeki sekildeki gibidir. gibidir. 18
Sekil ¸ 6.1: Kameredan kenar bulma
6.2 6.2 Cisi Cisiml mler erin in Seklini ¸ Belirleme ve Renk Algılama Cisimlerin seklini s¸ eklini belirlerken kullanılanan resimde ki üçgen, kare, dikdörtgen gibi nesnelerin varlıklarını belirledik.Daha sonra bunların üzerine ne olduklarını yazdırdık.
Bu örnek için detect_shapes programını yazdık.
Sekil ¸ 6.2: Sekil S¸ ekil tespiti 19
6.3 Renk Renk Takibi akibi
Belirlenen cisimlerin takip edilmesi için HSV renk uzayından renk kodlarını bularak cisimlerin renginin algılanıp takip edilmesini sa gladık. g˘ ladık.
˙Ilk örnek Ilk örnekte te sadec sadecee sarı sarı rengin rengin tespit tespitii yapılm yapılmı¸ ı¸stır.Di˘ stır.Diger g˘ er renkle renklerin rinde de HSV renk renk uzayı uzayınd ndan an renk kodları bulunarak yapılması sa glanmı¸ g˘ lanmı¸stır. stır.
Sekil ¸ 6.3: Cisim ve sari renk takibi
6.4 Renk Takibi ve Led Yakma
Rengi belirledikten sonra kullanılacak pinleri ayarladık. Daha sonra kameredan cismi algılayarak rengini tespit ettik ve led yakımını sa gladık. g˘ ladık. 20
Sekil ¸ 6.4: Renk takibi ve led yakma
6.5 Led Yakma ve Mesafe Mesafe Algılama Algılama Ultrasonik sensör ekleyerek rengi belirlenen nesnenin uzaklık mesafesini algıladık.
Sekil ¸ 6.5: Led yakma ve mesafe takibi 21
6.6 Windows Windows’da ’da Cisim Algılama Algılama
Windows’da Python, Open CV programlarını indirip komut ekranında gerekli programları kurduktan sonra Raspberry Pi’ye ihtayaç duymadan ¸sekilleri ¸sekilleri belirleyip görüntü i¸sleme sleme yapılabilir ve kamera modülleri daha hızlı çalı¸stırılır. stırılır.
Sekil ¸ 6.6: Windows Windows cisim algılama
6.7 Windows Windows’ta ’ta Renk ve Mesafe Mesafe Algılama Algılama
Pytho Pythonn içeris içerisine ine klasör klasör olu¸sturul sturulara arakk GPIO GPIO kütüp kütüpha hanes nesii kulla kullanıl nılabi abilir lir hale hale getiri getirilir lir yani yani bir nevi Windows GPIO paketi varsayıp i¸slemi slemi yazılımsal olarak hata vermeden gerçekle¸stirir. stirir. 22
Sekil ¸ 6.6: Windows Windows mesafe algılama
23
7 EKLER 7.1 Ek-1 •
Kenarları Bulma
import numpy as np import sys sys.path.append(’/usr/local/lib/py sys.path.append(’/usr/local/lib/python2.7/site-pac thon2.7/site-packages’) kages’) import cv2 cap = cv2.VideoCapture(0) while(1): _, frame = cap.read() hsv = cv2.cvtColor(frame, cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) lower = np.array([30,150,50]) np.array([30,150,50]) upper = np.array([255,255,180]) np.array([255,255,180]) mask = cv2.inRange(hsv, lower, upper) res = cv2.bitwise_and(frame,frame, mask= mask) kenar = cv2.Canny(frame,100,2 cv2.Canny(frame,100,200) 00) cv2.imshow(’Kenarlari’,kenar) if cv2.waitKey(1) & 0xFF == ord(’q’): break cv2.destroyAllWindows() cap.release()
24
7.2 Ek-2 •
Cisim Algılama
import cv2 class ShapeDetector: ShapeDetector: def __init__(self): pass def detect(self,c): shape = "Kimligi Belirsiz" peri = cv2.arcLength(c, cv2.arcLength(c, True) approx = cv2.approxPolyDP(c, cv2.approxPolyDP(c, 0.04 * peri, True) if len(approx) == 3: shape = "Ucgen" elif len(approx) == 4: (x,y,w,h) = cv2.boundingRect(approx) ar = w / float(h) shape = "Kare" if ar >= 0.95 and ar <= 1.05 else "Dikdortgen" elif len(approx) == 5: shape = "Besgen"
else: shape = "Daire" return shape
•
Cisim Algılama Sınıfı Kenar Kenar Bulma Projesinde Kullanıldı.
from shapedetector import ShapeDetector ShapeDetector import argparse import imutils 25
import cv2 ap = argparse.ArgumentPa argparse.ArgumentParser() rser() ap.add_argument("-i", ap.add_argument("-i", "–image", required=True, help="path to the input image") args = vars(ap.parse_args()) vars(ap.parse_args()) image = cv2.imread(args["image"]) cv2.imread(args["image"]) resized = imutils.resize(image, width=300) ratio = image.shape[0] / float(resized.shape[0]) gray = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY) blurred = cv2.GaussianBlur(gray cv2.GaussianBlur(gray,, (5, 5), 0) thresh = cv2.threshold(blurred, cv2.threshold(blurred, 60, 255, cv2.THRESH_BINAR cv2.THRESH_BINARY)[1] Y)[1]
cnts = cv2.findContours(thresh.cop cv2.findContours(thresh.copy(), y(), cv2.RETR_EXTERN cv2.RETR_EXTERNAL, AL, cv2.CHAIN_APPRO cv2.CHAIN_APPROX_SIMPL X_SIMPL cnts = cnts[0] if imutils.is_cv2() else cnts[1] sd = ShapeDetector() for for c in cnts cnts::
M = cv2. cv2.mo mome ment nts( s(c) c)
cX = int((M["m10"] / M["m00"]) * ratio) cY = int((M["m01"] / M["m00"]) * ratio) shape = sd.detect(c)
7.3 Ek-3 •
Sarı Rengi Belirleme ve Cismin Kenarlarını Belirtme
# -*- coding: utf-8 -*from collections import deque import numpy as np import sys sys.path.append(’/usr/local/lib/py sys.path.append(’/usr/local/lib/python2.7/site-pac thon2.7/site-packages’) kages’) import argparse 26
import imutils import cv2 import RPi.GPIO as GPIO import time #kayıtları ayri¸stirma stirma i¸slemi slemi yapılır. yapılır.
GPIO.setwarnings(False) ap = argparse.ArgumentPa argparse.ArgumentParser() rser() ap.add_argument("-v", ap.add_argument("-v", "–video", help="path to the (optional) video file") ap.add_argument("-b", ap.add_argument("-b", "–buffer", "–buffer", type=int, default=32, help="max buffer buffer size") args = vars(ap.parse_args()) vars(ap.parse_args()) cv2.VideoCapture()
# ’Ye¸sil’ sil’ alanın alt ve üst sınırlarını tanımlayın # HSV renk alanındaki top yellowLower yellowLower = (20, ( 20, 100, 100) yellowUpper = (30, 255, 255)
# Izlenen noktaların listesini ba¸slatmak, slatmak, çerçeve sayacı, # Ve koordinat deltaları pts = deque(maxlen=args["b deque(maxlen=args["buffer"]) uffer"])
# Bir video yolu saglanmadıysa, g˘ lanmadıysa, referans alın # Web kamerasına if not args.get("video", args.get("video", True): camera = cv2.VideoCapture(0) else: camera = cv2.VideoCapture(args["video"])
27
while True: # Geçerli çerçeveyi çerçeveyi yakala (grabbed, frame) = camera.read() camera.read()
# Bir video izliyoruz ve bir çerçeve kapmadıysak, # Sonra videonun sonuna ula¸stık stık if args.get("video") and not grabbed: break
# Çerçeveyi Çerçeveyi yeniden boyutlandırın, boyutlandırın, bulanıkla¸stırın stırın ve HSV’ye dönü¸stürün stürün
# Renk alanı
frame = imutils.resize(frame, width=480) # blurred = cv2.GaussianBlur(frame, (11, 11), 0) hsv = cv2.cvtColor(frame, cv2.cvtColor(frame, cv2.COLOR_BGR2HSV_ cv2.COLOR_BGR2HSV_FULL) FULL) # Renk ’ye¸sil’ sil’ için bir maske olu¸sturun, sturun, ardından gerçekle¸stirin stirin # Bir dizi küçük dilimi ve erozyonu kaldırmak için # Maske içinde lekeler kaldı
mask = cv2.inRange(hsv, yellowLower, yellowUpper) mask = cv2.erode(mask, None, iterations=2) mask = cv2.dilate(mask, None, iterations=2) # Maskede kontur bulur ve geçerli olanı ba¸slatır ba¸slatır
# (X, y) topun ortası 28
cnts = cv2.findContours(mask.cop cv2.findContours(mask.copy(), y(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2] center = None
# Yalnızca kontur bulunursa devam edin if len(cnts) > 0: # Maskede en büyük konturu bulup kullan. # En az çevreleyen çevreleyen çevreyi hesaplamak ve # Centroid c = max(cnts, key=cv2.contourArea) key=cv2.contourArea) ((x, y), radius) = cv2.minEnclosingCircle(c) M = cv2.moments(c) center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
# Yalnızca Yalnızca yarıçap minimum bir boyutla kararsa devam edin if radius > 10: # Çerçeve üzerinde daire ve centroid çizin, # Sonra izlenen puanların rın liste listesi sini ni günc güncel elle leyi yinn
cv2. cv2.ci circ rcle le(fr (fram ame, e, (int (int(x (x), ), int( int(y) y)), ), int( int(ra radi dius us), ), (0, (0, 255, 255,
255), 2) cv2.circle(frame, center, 5, (0, 0, 255), -1) pts.appendleft(center) for i in xrange(1, len(pts)): if pts[i - 1] is None or pts[i] is None: continue thickness = int(np.sqrt(args["buffer"] / float(i + 1)) * 2.5) cv2.line(frame, pts[i - 1], pts[i], (0, 0, 255), thickness) cv2.imshow("Frame", cv2.imshow("Frame", frame) key = cv2.waitKey(1) cv2.waitKey(1) & 0xFF if key == ord("q"): break camera.release() cv2.destroyAllWindows() 29
7.4 Ek-4 •
Sarı Rengi GPIO’da 23 numaralı Pine Ba glayıp g˘ layıp Led Yakma
# -*- coding: utf-8 -*from collections import deque import numpy as np import sys sys.path.append(’/usr/local/lib/py sys.path.append(’/usr/local/lib/python2.7/site-pac thon2.7/site-packages’) kages’) import argparse import imutils import cv2 import RPi.GPIO as GPIO import time #kayıtları ayri¸stirma stirma i¸slemi slemi yapılır. yapılır. GPIO.setwarnings(False) ap = argparse.ArgumentPa argparse.ArgumentParser() rser() ap.add_argument("-v", ap.add_argument("-v", "–video", help="path to the (optional) video file") ap.add_argument("-b", ap.add_argument("-b", "–buffer", "–buffer", type=int, default=32, help="max buffer buffer size") args = vars(ap.parse_args()) vars(ap.parse_args()) cv2.VideoCapture() # ’Ye¸sil’ sil’ alanın alt ve üst sınırlarını tanımlayın # HSV renk alanındaki top yellowLower = (20, 100, 100) yellowUpper = (30, 255, 255) # Izlenen noktaların listesini ba¸slatmak, slatmak, çerçeve sayacı, # Ve koordinat deltaları pts = deque(maxlen=args["b deque(maxlen=args["buffer"]) uffer"]) # Bir video yolu saglanmadıysa, g˘ lanmadıysa, referans alın 30
# Web kamerasına if not not args. args.ge get("v t("vide ideo", o", True): rue):
camera camera = cv2.V cv2.Vide ideoCa oCaptu pture( re(0) 0)
# Aksi takdirde, video dosyasına bir referans tut else: camera = cv2.VideoCapture(args["video"]) # Döngü devam et while True: # Geçerl Geçerlii çerçe çerçeve veyi yi yakala yakala
(grabb (grabbed, ed, frame frame)) = camer camera.r a.rea ead() d()
# Bir video izliyoruz ve bir çerçeve kapmadıysak, # Sonra videonun sonuna ula¸stık stık if args.get("video") and not grabbed: break # Çerçeveyi yeniden boyutlandırın, bulanıkla¸stırın ve HSV’ye dönü¸stürün stürün # Renk alanı frame = imutils.resize(frame, width=480) hsv = cv2.cvtColor(frame, cv2.cvtColor(frame, cv2.COLOR_BGR2HSV_F cv2.COLOR_BGR2HSV_FULL) ULL) # Renk ’ye¸sil’ sil’ için bir maske olu¸sturun, sturun, ardından gerçekle¸stirin stirin # Bir dizi küçük dilimi ve erozyonu kaldırmak için # Maske içinde lekeler kaldı mask = cv2.inRange(hsv, yellowLower, yellowUpper) mask = cv2.erode(mask, None, iterations=2) mask = cv2.dilate(mask, None, iterations=2)
# Maskede kontur bulur ve geçerli olanı ba¸slatır slatır # (X, y) topun ortası cnts = cv2.findContours(mask.cop cv2.findContours(mask.copy(), y(), cv2. cv2.RE RETR TR_E _EXT XTER ERN NAL, AL,
cv2. cv2.CH CHAI AIN_ N_AP APPR PRO OX_SI X_SIMP MPLE LE)[ )[-2 -2]]
center = None def BlinkSari(numTimes, speed): GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) # Sarirenk için for i in range(0, numTimes):
31
GPIO.output(23, GPIO.output(23, True) print ’Sari’ time.sleep(speed) GPIO.output(23, GPIO.output(23, False) time.sleep(speed) GPIO.cleanup() # Yalnızca kontur bulunursa devam edin if len(cnts) > 0: BlinkSari(1, 1) c = max(cnts, key=cv2.contourArea) key=cv2.contourArea) ((x, y), radius) = cv2.minEnclosingCircle(c) M = cv2.moments(c) center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"])) # Yalnızca Yalnızca yarıçap minimum bir boyutla kararsa devam edin if radius > 10: # Çerçeve üzerinde daire ve centroid çizin, # Sonra izlenen puanların listesini güncelleyin cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2) cv2.circle(frame, center, 5, (0, 0, 255), -1) pts.appendleft(center) for i in xrange(1, len(pts)): if pts[i - 1] is None or pts[i] is None: continue thickness = int(np.sqrt(args["buffer"] / float(i + 1)) * 2.5) cv2.line(frame, pts[i - 1], pts[i], (0, 0, 255), thickness) cv2.imshow("Frame", cv2.imshow("Frame", frame) key = cv2.waitKey(1) cv2.waitKey(1) & 0xFF if key == ord("q"): break camera.release() cv2.destroyAllWindows() 32
KAYNAKLAR https://pythonprogramming.n ramming.net/canny-edge-detecti et/canny-edge-detection-gradients-py on-gradients-py [1] https://pythonprog
[2] http://www.pyimagesearch.com/2016/05/02/ accessing-rpi-gpio-and-gpio-zero-with-opencv-python/
[3] http://www.pyimagesearch.com/2015/09/14/ ball-tracking-with-opencv/
[4] http://raspberrypi.stackexchange.com/questions/34119/ gpio-library-on-windows-while-developing
[5] http://www.pyimagesearch.com/2015/02/23/ install-opencv-and-python-on-your-raspberry-pi-2-and-b/ http://www.thirdeyevis.com/ evis.com/pi-page-2.php pi-page-2.php [6] http://www.thirdey
[7] https://community.dur.ac.uk/m.j.r.bordewich/rpi/ BrickPiRobot.html
[8] https://github.com/MagnusBordewich/ObjectTracking/blob/ master/RaspberryPi/1-capture_image.py
33