You are on page 1of 42

T.C.

SEYH

BILEC
IK

EDEBALI NIVERS
ITES
I
IK
FAKLTESI
MHENDISL
I BLM
ISAYAR

IG
BILG
MHENDISL

I KULLANILARAK OPEN CV
RASPBERRY PI PYTHON DIL

SISTEM

KTPHANESIYLE
RENK VE MESAFE TAKIP
I
Ayse CAL
IRME

BIT
ALISMASI

DANISMANI

: Do. Dr. Metin KESLER

BILEC
IK
12 Ocak 2017

T.C.

SEYH

BILEC
IK

EDEBALI NIVERS
ITES
I
IK
FAKLTESI
MHENDISL
I BLM
ISAYAR

IG
BILG
MHENDISL

I KULLANILARAK OPEN CV
RASPBERRY PI PYTHON DIL

SISTEM

KTPHANESIYLE
RENK VE MESAFE TAKIP
I
Ayse CAL
IRME

BIT
ALISMASI

DANISMANI

: Do. Dr. Metin KESLER

BILEC
IK
12 Ocak 2017

IR
IM

BILD
Bu kitaptaki btn bilgilerin etik davrans ve akademik kurallar erevesinde elde edildigini ve yazm kurallarna uygun olarak hazrlanan bu alsmada bana ait olmayan her
trl ifade ve bilginin kaynagna eksiksiz atf yapldgn 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
Ayse CAL
Tarih:17.03.2017

ii

ZET

IRME

BIT
ALISMASI

I KULLANILARAK OPEN CV
RASPBERRY PI PYTHON DIL

SISTEM

KTPHANESIYLE
RENK VE MESAFE TAKIP
I
Ayse CAL
Bilecik Seyh

Edebali niversitesi
Mhendislik Fakltesi
Bilgisayar Mhendisligi Blm
Dansman: Do. Dr. Metin KESLER
2017, 43 Sayfa

Jri yeleri

Imza

.....................................

.....................

.....................................

.....................

.....................................

.....................

Proje alsmamda Python dilini kullanarak Open CV ktphanesiyle grnt isleme zerine alstm.Bunlar hem Raspberry Pi zerinde hemde Windows tabanl sistem gelistirerek yaptm.Raspberry
Pinin GPIO pinlerini kullanarak grnty alglayp led yakmasn ve Ultrasonik sensr yardmyla mesafe lmesini sagladm.Windowsda GPIO paketlerini kullanamayacagm iin sanki
GPIO paketleri varms gibi alglamasn sagladm.Ultrasonik sensr iinde aysn gereklertirdim.

iii

ABSTRACT

THESIS
COLOR AND DISTANCE TRACKING SYSTEM WITH RASPBERRY PI
PYTHON LIBRARY OPENED CV LIBRARY
Ayse CAL
Bilecik Seyh

Edebali University
Engineering Faculty
Department of Computer Engineering
Advisor: Do. Dr. Metin KESLER
2017, 43 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

NSZ
Bitirme alsmamn basndan sonuna kadar emegi geen ve beni bu konuya ynlendiren sayg deger hocam ve dansmanm Sayn Metin KESLER sayn Murat ZALPe ve
alsmalarmda yardmc olan Mr.Adrian Rosebrocke tm katklarndan ve hi eksiltmedigi desteginden dolay tesekkr ederim.
Ayse CAL
12 Ocak 2017

INDEK

I
ILER
NSZ

SEK

ILLER
TABLOSU

viii

IS
1 GIR
1.1

Grnt Isleme ile Ilgili Baz Terim ve Tanmlar . . . . . . . . . . . . . .

I
2 PYTHON PROGRAMLAMA DIL
2.1

Python Nedir ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 OPEN CV
3.1

4
6

OpenCV Bilesenleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 RASPBERRY PI

7
9

4.1

Raspberry Pi 1 Hakknda . . . . . . . . . . . . . . . . . . . . . . . . . .

10

4.2

Rasberry Pi ye OpenCV ve Python Kurulumu . . . . . . . . . . . . . . .

12

SENSRLER
5 ULTRASONIK

17

6 TEMEL VIDEO
ISLEMLER

18

6.1

Gerek Zamanl Grntde Kenar Bulma . . . . . . . . . . . . . . . . .

18

6.2

Cisimlerin Seklini

Belirleme ve Renk Alglama . . . . . . . . . . . . . .

19

6.3

Renk Takibi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

6.4

Renk Takibi ve Led Yakma . . . . . . . . . . . . . . . . . . . . . . . . .

20

6.5

Led Yakma ve Mesafe Alglama . . . . . . . . . . . . . . . . . . . . . .

21

6.6

Windowsda Cisim Alglama . . . . . . . . . . . . . . . . . . . . . . . .

22

6.7

Windowsta Renk ve Mesafe Alglama . . . . . . . . . . . . . . . . . . .

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

ZGEMIS

34

vii


SEK

ILLER
TABLOSU
Sekil

1.1

Grnt Isleme . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Sekil

2.1

Python Dili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Sekil

3.1

Open CV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Sekil

3.2

OPen CV Srmleri

. . . . . . . . . . . . . . . . . . . . . . . . .

Sekil

4.2

Raspberry Pi

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

Sekil

4.1

Raspberry Pi B . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

Sekil

4.2

Rasberry Pi GPIO Pin Diyagram

. . . . . . . . . . . . . . . . . .

12

Sekil

4.3

Putty Terminal Ekran

. . . . . . . . . . . . . . . . . . . . . . . .

13

Sekil

4.4

Numpy paketinin import Edilmesi . . . . . . . . . . . . . . . . . .

15

Sekil

4.5

Open CV import Islemi

16

Sekil

5.1

Ultrasonik Sensr ile Mesafe Alglama

. . . . . . . . . . . . . . .

17

Sekil

6.1

Kameredan Kenar Bulma . . . . . . . . . . . . . . . . . . . . . . .

19

Sekil

6.2

Sekil

Tespiti

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

Sekil

6.3

Cisim ve Sari Renk Takibi . . . . . . . . . . . . . . . . . . . . . .

20

Sekil

6.4

Renk Takibi ve Led Yakma . . . . . . . . . . . . . . . . . . . . . .

21

Sekil

6.5

Led Yakma ve Mesafe Takibi

. . . . . . . . . . . . . . . . . . . .

21

Sekil

6.6

Windows Cisim Alglama

. . . . . . . . . . . . . . . . . . . . . .

22

Sekil

6.6

Windows Mesafe Alglama . . . . . . . . . . . . . . . . . . . . . .

23

. . . . . . . . . . . . . . . . . . . . . . .

viii

IS
GIR

Grnt isleme isim (Almanca Bildbearbeitung) llms veya kaydedilmis olan elektronik (dijital) grnt verilerini, elektronik ortamda (bilgisayar ve yazlmlar yardm ile)
amaca uygun sekilde degistirmeye ynelik yaplan bilgisayar alsmas. Grnt isleme,
verilerin, yakalanp lme ve degerlendirme isleminden sonra, baska bir aygtta okunabilir bir biime dnstrlmesi ya da bir elektronik ortamdan baska bir elektronik ortama
aktarmasna ynelik bir alsma olan "Sinyal islemeden" farkl bir islemdir. Grnt isleme, daha ok, kaydedilmis olan, mevcut grntleri islemek, yani mevcut resim ve grafikleri, degistirmek, yabanclastrmak ya da iyilestirmek iin kullanlr. Daha ok fotograflk ve grafik-Tasarm alanlarnda kullanlr.

1.1

sleme ile Ilgili

Grnt I
Baz Terim ve Tanmlar

Resim Filtresi : ekim srasnda kullanlmayan fotograf filtreleri ile elde edilen grnt zenginligini, ekimden sonra kullanma imkn sunan sanal bilgisayar aralardr.

Dnstrme : Bir dosya biimini, baska bir dosya biimine dnstrmek iin kullanlan yazlmlara, dnstrme yazlm denir. Bu sayede, belli bir program ile yaplms
olan bir belge, baska bir bilgisayar program ile alp kullanlabilir. Bir belgenin farkl
bir yazlm kullanlarak alabilmesi, ancak bu sekilde mmkndr.

Makro : Kaydedilmis bilgisayar komutlar dizisine makro denir. Makro sayesinde, bes admda yaplabilen islemler, tek bir komuta indirgenmis olur. ve ayn islem tekrar yaplmak istendiginde, bu islemi yapmak iin, kaydedilmis olan makro kullanlr. bu sayede,
birok admda yaplabilen bir islem, tek bir komutla (makro ile) yaplms olur.

leklendirme : Resim ve grafikler, orantl ya da orantsz olarak byltp kltlebilir buna leklendirme denir.
1

Dndrme : Resim ve grafikler, yatay ve dikey olarak ya da kullancnn istek ve ihtiyacna bagl olarak, kendi ekseni etrafnda, belli bir a dahilinde evirilebilir. Buna dndrme denir.

Katman : Grnt isleme yazlmlarnda, alttaki nesnenin grnmesini engellemeyen,


saydam sanal" yzeylere katman denir. Katmanlar, zellikle, fotomontaj, kolaj alsmalarnda ve resmim zerine yaz eklenmesi srasnda, rahat alsma imkn saglar.

rtleme : Baz blmleri, alsmann dsnda tutmak iin, Resimin baz blmleri
kapatlabilir. Bu isleme rtme ya da maskeleme denir. rtler (Maskeler) resmin verilen
komuttan etkilenmemsini veya baz resim blmlerinin gizlenmesini saglar.

Yanstma : Resimler, yatay ve dikey olarak, aynadaki grntye benzer sekilde ters
evrilebilir. Buna yanstma denir.

Devirme : Perspektif hatalarn resimlerin ileri geri dzeltilmesi ile elde edilir. buna
devirme denir.

Renk dzeltmesi : Resimler zerindeki sk ve renk tonlar degistirilebilir.

saretleme : Resmin belli bir blmnn islem iin hedef gsterilmesine isaretleme
I
denir. Verilen komut sadece isaretli olan blm etkiler.

Sihirli degnek : Resim zerindeki en kk resim elemanna Piksel denir. Sihirli degnek, resim elemanlarn semeye yarayan bir isaretleme aracdr.

Fra : Resim izmek iin kullanlan sanal araca fra denir. Fra, grnt isleme yazlmlarnda, standart aralardan biri olmustur. Ucu ve kalnlg istek ve ihtiyaca bagl
olarak, kullanc tarafndan degistirilebilir. Baz programlarda, dolgu deseni ile izim yapmaya da imkn verir.
2

Silgi : Yaplan yanlslar, dzeltmek ya da sekilleri istege gre biimlendirmek iin


kullanlan silme aracna silgi denir. kalnlg ve rengi kullanc tarafndan degistirilebilir.

Sekil

1.1: Grnt isleme

I
PYTHON PROGRAMLAMA DIL

2.1

Python Nedir ?

Python, nesne ynelimli, yorumlamal, birimsel (modler) ve etkilesimli yksek seviyeli bir programlama dilidir.

Girintilere dayal basit szdizimi, dilin grenilmesini ve aklda kalmasn kolaylastrr.


Bu da ona sz diziminin ayrntlar ile vakit yitirmeden programlama yaplmaya baslanabilen bir dil olma zelligi kazandrr.

Modler yaps, snf dizgesini (sistem) ve her trl veri alan girisini destekler. Hemen
hemen her trl platformda alsabilir. (Unix , Linux, Mac, Windows, Amiga, Symbian).
Python ile sistem programlama, kullanc arabirimi programlama, ag programlama, uygulama ve veritaban yazlm programlama gibi birok alanda yazlm gelistirebilirsiniz.
Byk yazlmlarn hzl bir sekilde prototiplerinin retilmesi ve denenmesi gerektigi durumlarda da C ya da C++ gibi dillere tercih edilir.

Python, Guido Van Rossum adl Hollandal bir programc tarafndan yazlms bir programlama dilidir. Gelistirilmesine 1990 ylnda baslanan Python; C ve C++ gibi programlama dillerine kyasla;
daha kolay grenilir,
program gelistirme srecini ksaltr,
bu programlama dillerinin aksine ayr bir derleyici programa ihtiya duymaz,
hem daha okunakldr, hem de daha temiz bir szdizimine sahiptir.
4

Pythonun bu ve buna benzer zellikleri sayesinde dnya apnda n sahibi byk kuruluslar (Google, Yahoo! ve Dropbox gibi) bnyelerinde her zaman Python programclarna ihtiya duyuyor. Mesela pek ok byk sirketin Python bilen programclara is olanag
sundugunu, Pythonun bas gelistiricisi Guido Van Rossumun 2005 ile 2012 yllar arasnda Googleda alstgn, 2012 ylnn sonlarna dogru ise Dropbox sirketine getigini
sylersek, bu programlama dilinin nemi ve geerliligi herhalde daha belirgin bir sekilde
ortaya kacaktr.

Bu arada, her ne kadar Python programlama dili ile ilgili ogu grsel malzemenin
zerinde bir ylan resmi grsek de, Python kelimesi aslnda ogu kisinin zannettigi gibi
piton ylan anlamna gelmiyor. Python Programlama Dili, ismini Guido Van Rossumun
ok sevdigi, Monty Python adl alt kisilik bir Ingiliz komedi grubunun Monty Pythons
Flying Circus adl gsterisinden alyor.

Sekil

2.1: Python dili

OPEN CV
OpenCV (Open Source Computer Vision) ak kaynak kodlu grnt isleme ktpha-

nesidir. 1999 ylnda Intel tarafndan gelistirilmeye baslanms daha sonra Itseez, Willow,
Nvidia, AMD, Google gibi sirket ve topluluklarn destegi ile gelisim sreci devam etmektedir. Ilk srm olan OpenCV alfa 2000 ylnda piyasaya kmstr. Ilk etapta C programlama dili ile gelistirilmeye baslanms ve daha sonra birok algoritmas C++ dili ile
gelistirilmistir. Open source yani ak kaynak kodlu bir ktphanedir ve BSD lisans ile
altnda gelistirilmektedir.

BSD lisansna sahip olmas bu ktphaneyi istediginiz projede cretsiz olarak kullanabileceginiz anlamna gelmektedir. OpenCV platform bagmsz bir ktphanedir, bu
sayede Windows, Linux, FreeBSD, Android, Mac OS ve iOS platformlarnda alsabilmektedir. C++, C, Python, Java, Matlab, EmguCV ktphanesi araclgyla da Visual
Basic.Net, ve Visual C++ dilleri ile topluluklar tarafndan gelistirilen farkl wrapperlar
araclgyla Perl ve Ruby programlama dilleri ile kolaylkla OpenCV uygulamalar gelistirilebilir.

Sekil

3.1: Open CV

2016-05-27 tarihli gncelleme, OpenCV gelistirici Itseez firmas Intel tarafndan satn
alnd. OpenCV gelistirmesine Intel ats altndan devam edecegini duyurdu.

OpenCV ktphanesi ierisinde grnt islemeye (image processing) ve makine grenmesine (machine learning) ynelik 2500den fazla algoritma bulunmaktadr. Bu algoritmalar ile yz tanma, nesneleri ayrt etme, insan hareketlerini tespit edebilme, nesne
6

snflandrma, plaka tanma, boyutlu grnt zerinde islem yapabilme, grnt karslastrma, optik karakter tanmlama OCR (Optical Character Recognition) gibi islemler
rahatlkla yaplabilmektedir.

Sekil

3.2: OPen CV srmleri

3.1

OpenCV Bilesenleri

OpenCV ktphanesini daha iyi anlamak iin mimarisinden ve OpenCVyi olusturan


bilesenlerden bahsetmek istiyorum.

Core : OpenCVnin temel fonksiyonlar ve matris, point, size gibi veri yaplarn bulundurur. Ayrca grnt zerine izim yapabilmek iin kullanlabilecek metotlar ve
XML islemleri iin gerekli bilesenleri barndrr.

HighGui : Resim grntleme, pencereleri ynetme ve grafiksel kullanc arabirimleri


iin gerekli olabilecek metotlar barndrr. 3.0 ncesi srmlerde dosya sistemi zerinden
resim dosyas okuma ve yazma islemlerini yerine getiren metotlar barndrmaktayd.

Imgproc : Filtreleme operatrleri, kenar bulma, nesne belirleme, renk uzay ynetimi,
renk ynetimi ve esikleme gibi neredeyse tm fonksiyonlar iine alan bir pakettir. 3 ve
sonra srmlerde baz fonksiyonlar degismis olsada 2 ve 3 srmnde de bir ok fonksiyon ayndr.
7

Imgcodecs : Dosya sistemi zerinden resim ve video okuma/yazma islemlerini yerine


getiren metotlar barndrmaktadr.

Videoio : Kameralara ve video cihazlarna erismek ve grnt almak ve grnt yazmak iin gerekli metotlar barndrr. OpenCV 3 srm ncesinde bu paketteki birok
metot video paketi ierisindeydi.

RASPBERRY PI
Raspberry Pi Birlesik Krallkta Raspberry Pi Vakf tarafndan okullarda bilgisayar bi-

limini gretmek amaclgyla gelistirilmis kredi kart byklgnde tek kartl bir bilgisayardr. Fiyat modeline gre degisiklik gsterir ve 5ile35 arasndadr. Raspberry Pi 2
modeli Subat

2015te kmstr.Sonraki model Raspberry Pi Zero, Kasm 2015te kmstr. Son model olan Raspberry Pi 3 ise Subat

2016da kmstr.

Raspberry Pi bilgisayar Element Premier Farnell, RS Components ve Egoman firmalar tarafndan imal edilmektedir. Bu firmalar Raspberry Pi bilgisayarn Internet zerinde
satmaktadrlar. Egoman, in ve Tayvanda satlan bir srmn satmaktadr ve rengi krmz olup FCC/CE etiketlerini tasmaz, bunun dsnda digerlerinden hibir fark bulunmamaktadr.

Raspberry Pi, ilk modellerinde ARM1176JZF-S 700 MHz merkezi islem birimini ieren Broadcom BCM2835 mikroipi zerine kurulmustur. Daha sonra piyasaya kan Raspberry Pi 2 modelinde Broadcom BCM2836 kullanmstr. VideoCore IV GPU grafik islem
birimine sahiptir. Booting ve veri depolamas iin SD kart kullanr. zerinde USB 2.0
portlar, HDMI video ks, ses ks, MIPI kamera girisi, GPIO arayz ve 5V MicroUSB g girisi bulunmaktadr.

Vakfn web sitesinden Raspbian (Debian Wheezy tabanl), Pidora (Fedora tabanl),
Snappy Ubuntu Core veya desteklenen diger isletim sistemleri indirilebilir. Sitesi dsndaki Pardus ARM, Arch Linux ARM ve Windows 10 IoT Core isletim sistemlerini de
destekler. Python programlama dili ile programlanabildigi gibi BBC Basic, C ve Perl
programlama dilleri de kullanlabilmektedir.

17 Aralk 2012 tarihinde Raspberry Pi Vakf, IndieCity ve Velocix firmalaryla isbirligi


yaparak kullanclarn uygulama programlar indirebilmeleri iin Pi Storeu amslardr.
Kullanclarn, Raspbian isletim sisteminde bulunan bir uygulamay kullanarak esitli ka9

tegorilerdeki uygulamalar bularak indirmeleri mmknd ve kullanclarn gelistirdikleri


uygulamalar da onaylandktan sonra diger kullanclarn kullanmna sunuluyordu. Ancak
1 Subat

2016 itibaryla Pi Store, Raspberry Pi Vakf tarafndan baz sorunlar yznden


kapatlmstr.

Sekil

4.2: Raspberry Pi

4.1

Raspberry Pi 1 Hakknda

Mevcut Raspberry Pi Model Bde 26 GPIO pini vardr.


Mevcut Raspberry Pide 2 adet USB2.0 portu var.
Micro SD Kart: Ak konusmak gerekirse normal SD kart Raspberry Pide bence
ok kaba duruyordu. Model B+da SD kart yerine Mikro SDye geilmis olmas
cihazn hem daha kibar, hem de arpmalara kars vs. kartn daha gvenli olmasn
saglayacak.
Daha az g tketimi: Mevcut Model B, bilindigi zere 1W enerji kullanmakta
idi, Model B+da reglatr degisimi ile bu deger 0.5Wa kadar dst. Bu da artk
yar yarya daha az enerji harcamas, adaptrlerden dolay akm yetmezligi gibi pek
ok sorunun nne geilecek anlamna geliyor.
10

Sekil

4.1: Raspberry Pi B

Daha iyi ses kslar: Analog ses kslar dip grltsnden etkilenmekte, ve de
kirli sese neden olabilmekteydi. Devrede yaplan degisiklik ile bu sorun giderildi.
Daha derli bir board/devre dzeni: USB baglantlar boardn kenarlarna hizaland, kompozit video 3.5mm jack ile beraber oldu, ve de dikdrtgen seklinde 4 tane
baglant deligi ayarland.

11

Sekil

4.2: Rasberry Pi GPIO pin diyagram

4.2

Rasberry Pi ye OpenCV ve Python Kurulumu

1. Adm : Raspberry Pi Rasbian Kurulumu : Internet zerinden Rasbian isletim sistemi indirilerek SD Carda imaj atlarak yklenir.
2.Adm: Isletim sistemi kurulduktan sonra Pi gncellenir ve Python kurulumu yaplr.
3. Adm : Numpy ktphanesi kurulur.
12

4. Adm Open CV ktphanesi kurulur.


5. Adm : Import islemi gereklestirilir.

Sekil

4.3: Putty terminal ekran

Puttyden terminal aldgnda, ykl paketleri gncelleyip ykselttikten sonra Raspberry Piyi gncellenerek baslayacagz.
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo rpi-update
Gerekli gelistirici aralarn ve paketlerini ykleyin.
$ sudo apt-get install build-essential cmake pkg-config
Gerekli grnt G / paketlerini kurun. Bu paketler, JPEG, PNG, TIFF, vb. Gibi
esitli resim dosyas formatlarn yklemenize izin verir.
$ sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev
GTK gelistirme kitaplgn ykleyin. Bu ktphane, Grafik Kullanc Arayzlerini
(GUIler) olusturmak iin kullanlr ve OpenCVnin highgui ktphanesi iin ekrannzdaki grntleri grmenizi saglar.
13

$ sudo apt-get install libgtk2.0-dev


Gerekli video G / paketlerini kurun. Bu paketler OpenCV kullanarak video dosyalarn yklemek iin kullanlr.
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
OpenCV iinde esitli islemleri optimize etmek iin kullanlan kitaplklar yklenir.
$ sudo apt-get install libatlas-base-dev gfortran
pip kurulumu
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
Virtualenv ve virtualenvwrapper kurulur.
$ sudo pip install virtualenv virtualenvwrapper
$ sudo rm -rf /.cache/pip
Ardndan, / .profile dosyanz asagdaki satrlar ierecek sekilde gncellenir.
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
.profile dosyanz yeniden yklenir.
$ source /.profile
Bilgisayarnzn grme sanal ortamn krurulur.
$ mkvirtualenv cv
Simdi

Python 2.7 gelistirme aralarn kuralabilir.


14

$ sudo apt-get install python2.7-dev


OpenCV Python baglamalar, resimleri ok boyutlu NumPy dizileri olarak temsil
ettiginden NumPyyi de yklemeliyiz.
$ pip install numpy

Sekil

4.4: Numpy paketinin import edilmesi


OpenCVyi indirin ve paketini an
$ 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
$ cd opencv-2.4.10
Kurulumu ayarlanmas
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local
-D BUILD_NEW_PYTHON_SUPPORT=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON ..
OpenCVyi derlenmesi.
15

$ make
Son olarak, OpenCVyi kurabiliriz.
$ sudo make install
$ sudo ldconfig
Ancak, Open VirtualCVyi cv sanal ortammzda kullanmak iin ncelikle OpenCVyi
site-packages dizinimize sembolik olarak baglamamz gerekir.
$ cd /.virtualenvs/cv/lib/python2.7/site-packages/ $ ln -s /usr/local/lib/python2.7/sitepackages/cv2.so cv2.so $ ln -s /usr/local/lib/python2.7/site-packages/cv.py cv.py
Sonunda OpenCV ve Python kurulumlarmza bir test srs yapabiliriz.
$ workon cv
$ python
import cv2
cv2.__version__

Sekil

4.5: Open CV import islemi

16

SENSRLER
ULTRASONIK
Ultrasonik ses dalgalar 20 kHz ile 500 kHz arasnda frekanslara sahip ses dalgalar-

dr. Bizim duyabildigimiz 300 Hz-14000 Hz bandnn zerindedirler. Ultrasonik sensrler


ultrasonik ses dalgalar yayan ve bunlarn engellere arpp geri dnmesine kadar geen
sreyi hesaplayarak aradaki uzaklg belirleyebilen sensrlerdir.

Bu sensrlerde bu kadar yksek frekanslarda ses dalgalarnn yaylmasnn nedeni ;


bu frekanslardaki dalgalarn dzgn dogrusal sekilde ilerlemeleri , enerjilerinin yksek
olmas ve sert yzeylerden kolayca yansmasdr.

Sekil

5.1: Ultrasonik sensr ile mesafe alglama

Ultrasonik sensrlerin alglama menzili uygun kosullarda 30 metreye varabilir. Ultrasonik sensrlerde iki adet transducer bulunur. Bunlardan biri ultrasonik speaker digeri
de ultrasonik mikrofondur. Elektronik devre ile ultrasonik speakerdan ses dalgasnn yaylma an ile bu ses dalgasnn engele arpp yansyarak ultrasonik mikrofon tarafndan
alglanmas arasndaki zaman llr ve bu zamann ikiye blnp ses hz ile arplmas sonucunda da engel ile ultrasonik sensr arasndaki mesafe hesaplanr. Robotlarda
genellikle 40 kHzlik ultrasonik sensrler kullanlmaktadr.

17


TEMEL VIDEO
ISLEMLER

6.1

Gerek Zamanl Grntde Kenar Bulma

Kameradan alnan iki video karesi ierisinde kamera hareket vektrn bulmamz gerekiyor. Burda OpenCV fonksiyonlarndan GoodFeaturesToTrack fonksiyonu kullanlarak birinci video karesinde ki kse noktalar tespit ediliyor. Burda sz geen bir video
karesinde bilgisayar ekrannn kseleri masann kseleri gibi kavramlardr. Edgeler degildir.

Canny kenar dedektr, John F. Canny tarafndan 1986 ylnda gelistirilmistir. Ve hala
yaygn olarak bugn grnt isleme de varsaylan kenar dedektrleri olarak kullanlr.

Canny kenar alglama algoritmas 5 admda incelenir.


1. Adm : Yksek frekansl grlt karmak iin bir Gauss filtre kullanarak dzgn
grnt elde edilir
2.Adm: : Grntnn egim yogunlugu hesaplanr.
3. Adm :Kenar alglama da "false" yantlar kaldrmak iin maksimum bastrma
uygulanr.
4. Adm Egim degerlerine bir alt ve st snr kullanarak esikleme uygulanr.
5. Adm : Gl kenarlarna bagl olmayan zayf kenarlar basklayarak kenarlar
elde edilir.

Kenar bulma uygulamasnn ekran kts sekildeki gibidir.


18

Sekil

6.1: Kameredan kenar bulma

6.2

Cisimlerin Seklini

Belirleme ve Renk Alglama

Cisimlerin seklini belirlerken kullanlanan resimde ki gen, kare, dikdrtgen gibi nesnelerin varlklarn belirledik.Daha sonra bunlarn zerine ne olduklarn yazdrdk.

Bu rnek iin detect_shapes programn yazdk.

Sekil

6.2: Sekil

tespiti
19

6.3

Renk Takibi

Belirlenen cisimlerin takip edilmesi iin HSV renk uzayndan renk kodlarn bularak
cisimlerin renginin alglanp takip edilmesini sagladk.

Ilk rnekte sadece sar rengin tespiti yaplmstr.Diger renklerinde HSV renk uzayndan
renk kodlar bulunarak yaplmas saglanmstr.

Sekil

6.3: Cisim ve sari renk takibi

6.4

Renk Takibi ve Led Yakma

Rengi belirledikten sonra kullanlacak pinleri ayarladk. Daha sonra kameredan cismi
alglayarak rengini tespit ettik ve led yakmn sagladk.
20

Sekil

6.4: Renk takibi ve led yakma

6.5

Led Yakma ve Mesafe Alglama

Ultrasonik sensr ekleyerek rengi belirlenen nesnenin uzaklk mesafesini algladk.

Sekil

6.5: Led yakma ve mesafe takibi


21

6.6

Windowsda Cisim Alglama

Windowsda Python, Open CV programlarn indirip komut ekrannda gerekli programlar kurduktan sonra Raspberry Piye ihtaya duymadan sekilleri belirleyip grnt
isleme yaplabilir ve kamera modlleri daha hzl alstrlr.

Sekil

6.6: Windows cisim alglama

6.7

Windowsta Renk ve Mesafe Alglama

Python ierisine klasr olusturularak GPIO ktphanesi kullanlabilir hale getirilir yani
bir nevi Windows GPIO paketi varsayp islemi yazlmsal olarak hata vermeden gereklestirir.
22

Sekil

6.6: Windows mesafe alglama

23

EKLER

7.1

Ek-1

Kenarlar Bulma

import numpy as np
import sys
sys.path.append(/usr/local/lib/python2.7/site-packages)
import cv2
cap = cv2.VideoCapture(0)
while(1):
_, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
lower = np.array([30,150,50])
upper = np.array([255,255,180])
mask = cv2.inRange(hsv, lower, upper)
res = cv2.bitwise_and(frame,frame, mask= mask)
kenar = cv2.Canny(frame,100,200)
cv2.imshow(Kenarlari,kenar)
if cv2.waitKey(1) & 0xFF == ord(q):
break
cv2.destroyAllWindows()
cap.release()

24

7.2

Ek-2

Cisim Alglama
import cv2
class ShapeDetector:
def __init__(self):
pass
def detect(self,c):
shape = "Kimligi Belirsiz"
peri = cv2.arcLength(c, True)
approx = 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 Alglama Snf Kenar Bulma Projesinde Kullanld.

from shapedetector import ShapeDetector


import argparse
import imutils
25

import cv2
ap = argparse.ArgumentParser()
ap.add_argument("-i", "image", required=True, help="path to the input image")
args = vars(ap.parse_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, (5, 5), 0)
thresh = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY)[1]

cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE


cnts = cnts[0] if imutils.is_cv2() else cnts[1]
sd = ShapeDetector()
for c in cnts:

M = cv2.moments(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 Kenarlarn Belirtme

# -*- coding: utf-8 -*from collections import deque


import numpy as np
import sys
sys.path.append(/usr/local/lib/python2.7/site-packages)
import argparse
26

import imutils
import cv2
import RPi.GPIO as GPIO
import time
#kaytlar ayristirma islemi yaplr.

GPIO.setwarnings(False)
ap = argparse.ArgumentParser()
ap.add_argument("-v", "video", help="path to the (optional) video file")
ap.add_argument("-b", "buffer", type=int, default=32, help="max buffer size")
args = vars(ap.parse_args())
cv2.VideoCapture()

# Yesil alann alt ve st snrlarn tanmlayn


# HSV renk alanndaki top
yellowLower = (20, 100, 100)
yellowUpper = (30, 255, 255)

# Izlenen noktalarn listesini baslatmak, ereve sayac,


# Ve koordinat deltalar
pts = deque(maxlen=args["buffer"])

# Bir video yolu saglanmadysa, referans aln


# Web kamerasna
if not args.get("video", True):
camera = cv2.VideoCapture(0)
else:
camera = cv2.VideoCapture(args["video"])

27

while True: # Geerli ereveyi yakala


(grabbed, frame) = camera.read()

# Bir video izliyoruz ve bir ereve kapmadysak,


# Sonra videonun sonuna ulastk
if args.get("video") and not grabbed:
break

# ereveyi yeniden boyutlandrn, bulanklastrn ve HSVye dnstrn

# Renk alan

frame = imutils.resize(frame, width=480)


# blurred = cv2.GaussianBlur(frame, (11, 11), 0)
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV_FULL)
# Renk yesil iin bir maske olusturun, ardndan gereklestirin
# Bir dizi kk dilimi ve erozyonu kaldrmak iin
# Maske iinde 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 geerli olan baslatr

# (X, y) topun ortas


28

cnts = cv2.findContours(mask.copy(),
cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
center = None

# Yalnzca kontur bulunursa devam edin


if len(cnts) > 0:
# Maskede en byk konturu bulup kullan.
# En az evreleyen evreyi hesaplamak ve # Centroid
c = max(cnts, key=cv2.contourArea)
((x, y), radius) = cv2.minEnclosingCircle(c)
M = cv2.moments(c)
center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))

# Yalnzca yarap minimum bir boyutla kararsa devam edin


if radius > 10: # ereve zerinde daire ve centroid izin, # Sonra izlenen puanlarn listesini gncelleyin

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", frame)
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
camera.release()
cv2.destroyAllWindows()
29

7.4

Ek-4

Sar Rengi GPIOda 23 numaral Pine Baglayp Led Yakma

# -*- coding: utf-8 -*from collections import deque


import numpy as np
import sys
sys.path.append(/usr/local/lib/python2.7/site-packages)
import argparse
import imutils
import cv2
import RPi.GPIO as GPIO
import time
#kaytlar ayristirma islemi yaplr.
GPIO.setwarnings(False)
ap = argparse.ArgumentParser()
ap.add_argument("-v", "video", help="path to the (optional) video file")
ap.add_argument("-b", "buffer", type=int, default=32, help="max buffer size")
args = vars(ap.parse_args())
cv2.VideoCapture()
# Yesil alann alt ve st snrlarn tanmlayn # HSV renk alanndaki top yellowLower
= (20, 100, 100)
yellowUpper = (30, 255, 255)
# Izlenen noktalarn listesini baslatmak, ereve sayac,
# Ve koordinat deltalar
pts = deque(maxlen=args["buffer"])
# Bir video yolu saglanmadysa, referans aln
30

# Web kamerasna
if not args.get("video", True):

camera = cv2.VideoCapture(0)

# Aksi takdirde, video dosyasna bir referans tut else:


camera = cv2.VideoCapture(args["video"])
# Dng devam et while True:
# Geerli ereveyi yakala

(grabbed, frame) = camera.read()

# Bir video izliyoruz ve bir ereve kapmadysak,


# Sonra videonun sonuna ulastk
if args.get("video") and not grabbed:
break
# ereveyi yeniden boyutlandrn, bulanklastrn ve HSVye dnstrn # Renk alan
frame = imutils.resize(frame, width=480)
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV_FULL)
# Renk yesil iin bir maske olusturun, ardndan gereklestirin
# Bir dizi kk dilimi ve erozyonu kaldrmak iin
# Maske iinde 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 geerli olan baslatr


# (X, y) topun ortas
cnts = cv2.findContours(mask.copy(),
cv2.RETR_EXTERNAL,

cv2.CHAIN_APPROX_SIMPLE)[-2]

center = None
def BlinkSari(numTimes, speed):
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
# Sarirenk iin
for i in range(0, numTimes):

31

GPIO.output(23, True)
print Sari
time.sleep(speed)
GPIO.output(23, False)
time.sleep(speed)
GPIO.cleanup()
# Yalnzca kontur bulunursa devam edin
if len(cnts) > 0:
BlinkSari(1, 1)
c = max(cnts, key=cv2.contourArea)
((x, y), radius) = cv2.minEnclosingCircle(c)
M = cv2.moments(c)
center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
# Yalnzca yarap minimum bir boyutla kararsa devam edin
if radius > 10:
# ereve zerinde daire ve centroid izin,
# Sonra izlenen puanlarn listesini gncelleyin
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", frame)
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
camera.release()
cv2.destroyAllWindows()
32

KAYNAKLAR

[1] https://pythonprogramming.net/canny-edge-detection-gradients-pyt
[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/
[6] http://www.thirdeyevis.com/pi-page-2.php
[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

You might also like