You are on page 1of 85

T.

C
NAMIK KEMAL ÜNİVERSİTESİ
ÇORLU MÜHENDİSLİK FAKÜLTESİ
ELEKTRONİK VE HABERLEŞME
MÜHENDİSLİĞİ BÖLÜMÜ

LİSANS BİTİRME ÇALIŞMASI ADI


OTONOM ARAÇ UYGULAMASI

HAZIRLAYAN

BERKAN SOFU
1140605605

DANIŞMAN
Yrd.Doç.Dr. Hasan DEMİR

Haziran 2021
i
i
ONAY

Berkan SOFU tarafından hazırlanan “OTONOM ARAÇ UYGULAMASI” adlı


tez çalışması Namık Kemal Üniversitesi Çorlu Mühendislik Fakültesi Elektronik
Ve Haberleşme Mühendisliği Bölümünde Lisans Bitirme Çalışması olarak kabul
edilmiştir.

....../....../2021

Adı Soyadı İmza

Danışman : Yrd.Doç.Dr HASAN DEMİR

i
ETİK BEYAN

Namık Kemal Üniversitesi Çorlu Mühendislik Fakültesi Elektronik Ve Haberleşme


Mühendisliği Bölümünde Lisans Bitirme Çalışması Yazım Kurallarına uygun
olarak hazırladığım bu tez çalışmasında;

Lisans Bitirme Çalışmamda sunduğum bilgi ve dokümanları akademik kurallar etik


çerçevesinde elde ettiğimi,
Tüm bilgi, belge, değerlendirme ve sonuçları bilimsel etik ve ahlak kurallarına
uygun olarak sunduğumu,
Lisan Bitirme Çalışmamda özgün verilerim dışında kalan ve tezde yararlanılan
eserlerin tümüne uygun atıfta bulunarak kaynak gösterdiğimi,
Kullanılan verilerde herhangi bir değişiklik yapmadığımı,
Lisans Bitirme Çalışmasında sunduğum çalışmanın özgün olduğunu ve başka bir
yerde sunmadığımı,
Lisans Bitirme Çalışmasında sunduğum çalışmanın herhangi bir bölümünü bu
üniversite veya başka bir üniversitede Lisans Bitirme Çalışması olarak
sunmadığımı,
Lisans Bitirme Çalışması ve yazımı sırasında patent ve telıf haklarını ihlal edici bir
davranışımın olmadığını
Beyan ederim.

Berkan SOFU
27.06.2021

ii
ÖZET
Bu tez çalışmasında, RC (Radio Control) otonom bir araç üzerine yerleştirilen kamera modülü ile
Yapay Sinir Ağlarını kullanılarak, aracın iki şerit arasında kalabilmesi amaçlanmıştır.480 x 320
çözünürlüğü, görüntü verileri ile elde edilerek, Python programlama dili ve çevresel kütüphaneler
ile çok katmanlı algılayıcı öğrenim metoduyla belirleyip geri besleme(back prop) yöntemi
kullanılıp Otonom aracın görüntü işleme teknikleri kullanılıp uygulaması yapılmıştır.

Anahtar kelime: Otonom Araç, Python, Raspberry pi, Arduino, Yapay Sinir Ağları

iii
ABSTRACT
In this thesis, by using Artif 1icial Neural Networks algorithms with the camera modüle placed on
an RC autonomous vehicle it is aimed to keep the vehicle between the lanes. By obtaining 480x320
resolution image data with Artif 1icial Neural Networks, a microcomputer, The image processing
techniques of the autonomous vehicle were used and applied on the Python programming language
and environmental libraries using the feedback method determined by the multi-layered perceptron
learning method.

Keywords: Autonomous vehicles, Python, Raspberry pi, Arduino, Artif 1icial Neural Networks

iv
ÖNSÖZ
Otonom araç bitirme çalışmam da bana desteklerinden dolayı danışmanım
Yrd.Doç.Dr. Hasan Demir’e teşekkür ederim.

v
İÇİNDEKİLER
ONAY.................................................................................................................................................................... İ
ETİK BEYAN ...................................................................................................................................................... İİ
ÖZET .................................................................................................................................................................. İİİ
ABSTRACT ........................................................................................................................................................ İV
ÖNSÖZ ................................................................................................................................................................ V
İÇİNDEKİLER ..................................................................................................................................................... İ
ŞEKİL LİSTESİ ................................................................................................................................................. İİİ
1. GİRİŞ ........................................................................................................................................................... 1
2. MATERYAL VE METHOD ....................................................................................................................... 2

2.1. OTONOM ARAÇ NEDİR ..................................................................................................... 3


2.2. OTONOM ARACIN AVANTAJLARI .................................................................................... 4
2.3. OTONOM ARACIN DEZAVANTAJLARI .............................................................................. 5
2.4. OTONOM ARAÇ ÇALIŞMA PRENSİBİ ................................................................................ 6
3. ARDUİNO NEDİR ...................................................................................................................................... 8

3.1. ARDUİNO ÇALIŞMA PRENSİBİ .......................................................................................... 8


3.2. ARDUİNO İLE KUMANDA DEVRESİ ................................................................................ 14
3.3. RASPBERRY Pİ ................................................................................................................ 15
3.4. RP KURULUMU ............................................................................................................... 16
3.5. KAMERA MODÜLÜ .......................................................................................................... 23
4. YAPAY SİNİR AĞLARI İLE TAHMİN ...................................................................................................25

4.1. YAPAY ZEKA İLE TAHMİN ............................................................................................. 26


4.1.1. Yapay Zeka Nedir ............................................................................................................................. 26
4.2. YAPAY SİNİR AĞI ........................................................................................................... 27
4.2.1. Geri Dönüşümlü Ağlar ve Diğer Yapay Sinir Ağları ...................................................................... 28
4.2.2. Yapay Sinir Ağlarının Donanımı..................................................................................................... 29
4.2.3. Yapay Sinir Ağlarının Genel Özellikleri ......................................................................................... 30
5. RC OTONOM ARACIN YAZILIM TASARIMI ......................................................................................31

5.1. PYTHON .......................................................................................................................... 32


5.2. PYCHARM ....................................................................................................................... 32
5.3. LİNUX(RASPBİAN) ........................................................................................................... 33
5.4. ANACONDA 3 .................................................................................................................. 33
5.5. TENSORFLOW ................................................................................................................ 34
5.6. OPENCV ......................................................................................................................... 34
5.7. NUMPY ........................................................................................................................... 37
5.8. PYGAME .......................................................................................................................... 37
5.9. PİLLOW-PYTHON IMAGE IMAGES ................................................................................. 37
5.10. PİCAMERA ...................................................................................................................... 37
6. MLP(AUTO)TRAİNİNG ...........................................................................................................................37

6.1. OTOPİLOT EĞİTİM ......................................................................................................... 39

i
6.2. KASKAT SINIFLANDIRICI ............................................................................................... 41
KAYNAKÇA ......................................................................................................................................................45
EKLER ...............................................................................................................................................................48
MALİYET ANALİZİ .........................................................................................................................................71
ÖZGEÇMİŞ ........................................................................................................................................................73

ii
ŞEKİL LİSTESİ
1.1 Otonom Aracın Genel Çalışma Prensibi
3.1 Otonom Aracın Teknolojileri
4.1 Arduino Kumanda Kodu
4.2 Arduino Kumanda Kodlarının Devamı
4.3 Arduino Kumanda Kodlarının Devamı
4.4 Arduino Kumanda Devresi Kodu
4.5 Arduino Kumanda Devresi Kodu Devamı
4.6 Arduino Kumanda Devresi Kodu Devamı
4.7 Arduino Yardımıyla Kumanda Devresinin Kontrolü
4.8 Raspberry pi 3
4.9 Raspberry pi 3 Pinleri
4.10 Raspbian İşletim Sistemi Çeşitleri
4.11 Giriş Bilgileri
4.12 Wireless Network Watcher Giriş Sayfası
4.13 Giriş Sayfası
4.14 Rp Komut Ekranı
4.15 Rp Ayarlar Ekranı
4.16 Raspberry pi Çerve Birimleri Ayarlama Ekranı
4.17 Winscp Bağlantı Ekranı
4.18 Rp Uyumlu Kamera Modülü
5.1 Tahminleme Yöntemleri
5.2 Tek Gizli Katmana Sahip Birçok Katmanlı Algılayıcı Modeli
6.1 Yıllara Göre Opencv
7.1 Mlp Training
7.2 Npz Dosyası
7.3 Dosyaların Kayıt Edildiği Yer
7.4 Eğitim Aşaması
7.5 Otonom Sürüşte Eğitilen Yapay Zekanın Arduino Komut Göndermesi
7.6 Kaskat Sınıflandırıcı Kodu
7.7 Kaskat Sınıflandırıcının Davranış Fonksiyonu

iii
7.8 Stop tabelasının kadrajı

iv
1. GİRİŞ

Akıllı sistemler, günlük hayatın birçok alanında hızlı bir ilerleme kaydetmiş ve bir asrı
aşkın süredir otomotiv endüstrisi tarihinin en ilgi çekici araştırma konularından biri haline
gelmiştir. Akıllı park etme, hız ve şerit kontrolü gibi teknolojiler ve bu sistemler için geliştirilen
acil fren sistemleri araçlarda yerini almıştır.[10]

İnsansız (kendi kendini süren) araçlar bu gelişmelerin son noktasıdır ve birçok kuruluş
bunları inceliyor ve hızlı bir şekilde kullanabiliyor. Sürücüsüz arabalar, iki ideal lokasyon
arasında insan müdahalesi olmadan seyahat ederek güvenlik, konfor, enerji tasarrufu gibi
konulara pek çok katkı sağlıyor.

Otomotiv Mühendisliği Topluluğu (SAE) araç otomasyonunu 6 seviyede


değerlendirir.İlk seviye 0, tamamen sürücü tarafından kontrol edilen bir araçtır ve seviye 5,
tamamen bilgisayar tarafından kontrol edilen kendi kendine giden bir arabadır.[12]

Günümüzde son kullanıcıların kullandığı araçlar en fazla 2. Sınıf veya 3. Sınıf olarak
sınıflandırılmaktadır. Sürücüsüz bir arabanın çalışma döngüsü, dahili ve harici sensörlerden bilgi
alınmasıyla başlar. Sapma oranı ve tekerlek hız sensörleri gibi dahili sensörler aracın iç algısı
(propriosepsiyon) hakkında bilgi verirken, radar, lidar, GPS gibi harici sensörler aracın dış
algısını (dış algı) karar verme mekanizmasına iletilmektedir.[13]

Dahili sensörler aracın yönünü (sallanma, yalpalama vb.), hızını ve ivmesini


belirlerken, harici sensörler dış ortama göre konumunu belirler. Tespit aşamasında sensörlerden
gelen ham veriler yorumlanarak araçların, yolların ve mevcut engellerin konumu hakkında
anlamlı bilgiler üretilir. [14,15]

Literatürde hareket planlama aşamaları küresel, yerel ve davranışsal olmak üzere üç


kategoriye ayrılmaktadır. [16,17].

Küresel planlama, başlangıç noktası ile bitiş noktası arasındaki en iyi yolu bulmaya
odaklanarak, aracın yolunu rota ve görev planlaması açısından inceler. Yerel planlama, dönüş
ve engellerden kaçınma gibi daha küçük görevleri üstlenir. Son yıllarda bilgi işlem hızının
gelişmesiyle birlikte daha fazla iş yapabilen davranış planlaması, araçlara geçici koşullar altında
manevra yapma gibi yetenekler kazandırmayı hedefliyor. İş döngüsünün son aşaması olan
kontrol ve tahrik aşamasında, araç planlandığı gibi hareket etmesi için gerektiği gibi sürülür.
Tüm çalışma döngüsü Şekil 1.1'de gösterilmektedir.18]

1
Şekil 1.1:Otonom aracın genel çalışma prensibi [11]

2. MATERYAL VE METHOD

Kullanılan teknolojiler ve kütüphaneler:

1.Raspberry pi 3

2.Raspberry pi 3 ve 4 uyumlu kamera modülü

3.Raspberry pi 4 alüminyum soğutucu kasa

4.Arduino uno r3

5.Pyhton

6.Pycharm

7.Linux(raspbian)

8.Anaconda 3

9.OpenCV

10.NumPy

11.Pygame

12.Struct

13.Socket

14.Pyserial

15.VNC

2
OTONOM ARAÇ TARİHÇESİ

"Özerklik" kelimesi, Yunanca auto ve nomos kelimelerinin birleşimidir. Türkçemizde


"özerklik" ve "özerklik" gibi değerlik sözcükleri olmasına rağmen günümüzün oldukça
etkileşimli dünyasında, dilimizde "özerklik" sözcüğü kullanılmaya başlanmıştır. Genel olarak,
her özerk sistem özerktir. Tabii ki, farklı özyönetim seviyeleri olabilir (sadece emirlere uymak
ve kendiliğinden kararlar vermek gibi). Otomotiv otonom sistemlerinin tarihi, 1478'de mekanik
sistemlere ve 1920'de elektronik ve yazılım içeren sistemlere kadar uzanabilir. Aşağıdaki
resimde görülen resim, Leonardo Da Vinci tarafından 1478 yılında tasarlanan ilk araç kontrol
sistemine aittir. Saat yayları ve tekerleklerden oluşan sistem, programlama yapıldıktan sonra
üzerine kurulu herhangi bir araç yaklaşık 40 metre sabit bir rotada tutulabilmektedir.

Teknolojik gelişim açısından 2017 yılından itibaren farklı kullanım senaryolarında


(sürücü asistanı vb.) sürücüsüz arabalar hayatımıza girecek.2020 yılına kadar tamamen
sürücüsüz arabalar yollarda olacak. 2025 yılına kadar otonom araç pazarının büyüklüğünün
yaklaşık 42 milyar ABD dolarına, otomobil pazarının ise yaklaşık 500 milyar ABD dolarına
ulaşacağı tahmin edilmektedir. Eylül 2017'de Amerika Birleşik Devletleri'nde 1.500 kişilik bir
tüketici anketinin sonuçlarına göre, katılımcıların yarısı 5 yıl içinde sürücü destekli yarı otonom
bir araca sahip olmak istediğini belirtirken, katılımcıların %44'ü bunu if 1ade etti. Tam otomatik
sürücüsüz araba almak istiyorlar.

Tüm bu veriler, sürücüsüz otomobillerin önümüzdeki birkaç yıla damgasını vuracak


teknolojilerden biri olacağını gösteriyor. Bu araçları kullanmanın sosyal ve ekonomik etkisi,
kültür, yaşam kalitesi, GSYİH düzeyi vb. Bu faktörler dikkate alındığında ülkeden ülkeye
farklılık göstereceği açıktır. Yapılan değerlendirmelere göre sürücüsüz otomobillerin Türkiye'de
tanıtılması toplumumuzun günlük yaşamını etkileyecek yenilikler getirecek, ülke hukuk
sisteminde, işsizlik rakamlarında ve terör eylemlerinin yöntemlerinde dalgalanmalara neden
olacaktır.[1]

2.1. Otonom Araç Nedir

Otonom araç, diğer adıyla bilinen sürücüsüz araç bir noktadan başlayıp diğer noktaya
insan müdahalesi olmadan güvenli bir biçimde verilen komutları harfiyen yerine getiren yapıdır.

Otonom hareketli sistemi; dış dünyayı sisteme dâhil etmeyi sağlamakta olan algılayıcı
ediciler, edinilen bilgiler yönünde eyleme karar veren bir mikro sorgulayıcı devresi ve Otonom
hareket eylemini yönlendiren hakimiyet yazılımından oluşmaktadır. İnsansız vasıta sistemi;

3
seyrüsefer sistemi, mâni algılayıcı etme sistemi, görme sistemi, hakem sistemi ve vasıta hakimiyet
sistemi gibi sistemlerden oluşabilmektedir. İnsansız kara araçları, son yıllarda yaşanan teknolojik
büyümelerin ışığında, popülerliği giderek çoğalan bir akademik çalışma ve mühendislik uygulama
alanı haline gelmiştir.

2.2. Otonom Aracın Avantajları


Kendi kendini süren arabalar yeni bir uygulama olarak karşımıza çıkıyor.Geleneksel
arabalardan farklı olarak, çeşitli farklı teknolojilerin bir araya gelmesiyle gerçeğe yakın hale
gelecek. Her ne kadar otomobil üreticileri ana üreticiler olsa da, otonom araçlarda elektronik
ekipman yoğunluğunun artması ve otonom araçlardaki bilgi sistemlerinin iletişim açısından dış
dünya ile entegre edilmesi gerekmesi ile birlikte; üretim, kurulum ve bilgisayarlarına yönelik
hizmetlerin hazırlanması ve çevresel donanım ve yazılım Bu yazılımlar tarafından toplanan
verileri depolayan bulut bilişim sisteminin koordinasyonu, veri akışı için gerekli kablosuz veya
uydu İnternet erişimi ve altyapıyı oluşturan şirket, bu sistemleri birbirine bağlamak için tesislere
ihtiyaç duyacaktır.
Bu durumda sürücüsüz otomobiller özellikle standartların sağlanması açısından birçok
yeni iş kolunun ortaya çıkmasına zemin hazırlayacak ve piyasa ekonomik olarak canlanacak.
Daha sonraki aşamada ise akıllı arabaların kaza riskini tamamen ortadan kaldıracak bir akıllı
şehir kurulması hedeflemektedir.[2]
Bu aşamada otonom araçların da katkısıyla yeni iş kolları geliştirilecek. Otonom
araçların standartlarının geleneksel arabaların standartlarından daha önemli olmasını sağlamak.
Bunun temel nedeni, otonom araçların kullandığı yazılım, donanım ve altyapının küresel ölçekte
aynı standartlara ve koordinasyona sahip olması gerektiğidir. Aksi takdirde, kendi kendini süren
arabaları uygulamak mümkün olmayacaktır.
Bu zorunluluk nedeniyle tüm ülkeler trafik sinyal sistemleri, trafik kontrolü, kameralar
ve trafikle ilgili tüm alanlarda standartlar sağlayacak ve aynı zamanda temel haklardan biri
olarak kabul edilen internete erişimde de standartlar sağlayacaktır. Bu durumda tüm dünya aynı
anda aynı standartları kullanmak zorunda kalacağından insan yaşam kalitesi artacaktır. Kendi
kendine giden arabalar daha az hata yapmaktadır.
Bu nedenle insan can güvenliğinin korunmasında önemli bir rol oynayacaklardır. Akıllı
sürüş yöntemlerinin kullanılması ile daha az yakıt tüketilecek ve daha az araca ihtiyaç
duyulacaktır. V2V ve V2X sistemleri sayesinde araçlar birbirleriyle haberleşerek trafik akışını
azaltır. Trafik kazalarının oluşmasında önemli rol oynayan kör noktalar, akıllı sistemlerle
ortadan kaldırılacak. Kendi kendine giden araba teknolojisinin gelişmesiyle birlikte aynı arabayı

4
paylaşabilen insanların ortak noktaları artacak ve ihtiyaç duyulan araç sayısı azalacaktır. Araç
sayısı azaldıkça havaya salınan zararlı gazlar da azalacaktır. [3]
Sürücüsüz otomobillerin yaygınlaşmasıyla birlikte tüketici davranışları olumlu ve köklü
değişikliklere uğrayacak. Geliştirilmekte olan bu sistemlerin güvenlik amacıyla kullanılmasıyla
askeri birlikler, ulusal güvenliğin sağlanmasında veya terörle mücadelede daha etkin bir şekilde
kullanabileceklerdir.[4]
2.3. Otonom Aracın Dezavantajları

Her yeni teknolojide olduğu gibi, otonom araçların piyasaya sürülmesi de bazı
istenmeyen sonuçlar doğuracaktır. Kuşkusuz en önemlisi üretim ve hizmet fiyatlarına bağlı
olarak otomobil fiyatlarında ciddi bir artış olacaktır. Bunun temel nedeni, olası trafik kazalarında
araç sürücüsünün kusurunun ortadan kalkacağı ve araç üreticilerinin kusursuz sorumluluk ilkesi
kapsamında tazminat davaları ile karşılaşacakları dolayısıyla bu riskleri fiyatlara girdi olarak
yansıtacak olmalarıdır. Ayrıca bu araçlara kurulabilecek yazılım ve ek donanımlar geleneksel
araçlara göre çok daha gelişmiş olacağından bu da fiyat artışlarına neden olan bir etkendir.
Otonom araçların minimum çalışma standartları çok yüksek olduğu için gelişen teknolojilerin
az gelişmiş bölge ve ülkelerde yaygınlaşması uzun zaman alacaktır.

Bu ülkeler çok büyük kaynaklar ayırarak altyapılarını otonom araçların kullanımına hazır
hale getirmeleri gerekecektir.[5]

Bu süreç uzun zaman alacak ve gelişmiş ülkeler ile diğer ülkeler arasındaki teknoloji
kullanımındaki uçurumu daha da açacaktır. İleri düzeyde, bu alandaki ülke sayısının sınırlı
olduğu düşünüldüğünde ve gelecekte otomobil üretiminin tekelinde olacağı düşünüldüğünde,
orta ölçekli otomobil üreticilerinin rekabeti ortadan kalkacak ve üretilen ürünler haksız rekabeti
yoğunlaştıracaktır. Bu ülkeler tarafından kullanıldıktan sonra diğer ülkelerle tekel oluşturacaktır.

Otonom araçlar sayesinde ilgili bu yeni gelişmeler sonucunda, her teknolojik gelişmede
olduğu gibi, başta araç sürücüleri olmak üzer bir kısım insanlar işlerini kaybedecek, bir bölümü ise
meslek veya çalışma alanı değiştirmek mecburiyetinde kalacaktır. [5]

Sürücüsüz otomobil testte başarılı gibi görünse de hava koşullarının trafiğe uygun
olmadığı, özellikle kar ve kar yağdığında ve internetin olmadığı durumlarda bazı trafik sorunları
ortaya çıkabiliyor. Nasıl ki günümüzde araçların kullandığı otoyolları ve yolları atlı arabalar
kullanamıyorsa, belki gelecekte de klasik araçların geçişini yasaklamak mümkün olacaktır.

5
Bu durumda da kara ulaşımında tek alternatif 1 otonom araçlar olacaktır. Otonom
araçların çözüm üretemediği zamanlarda bir kısmı sıkıntılar yaşanabilecektir. Otonom araçlarda
sürprizlere yer olmadığından klasik araç kullanmaktan zevk alan kişilerin bu alışkanlıklarını
değiştirmeleridir.[6]

Otonom araçların geliştirilmesinde, mevcut durumda, en iyi teknolojiye sahip olan


Google firması her ne kadar bu araçların yazılımlarının siber saldırıya uğraması, ele geçirilmesi
ya da kötü amaçlarla kullanmasının çok zor olduğunu iddia etseler de geliştirilen bu akıllı araçların
yollarda bir trafik canavarına dönüşmesi ya da otonomluk ve mobillik özellikleri kullanılarak
uzaktan herhangi bir hedefe bomba yüklü bir şekilde saldırıda bulunması ya da daha ileri ki bir
aşamada araç içerisinde herhangi bir sürücü olmaksızın araca montajı yapılan ve uzaktan kumanda
edilebilen silahların patlatılmasıyla suikastların işlenmesi ya da toplumsal katliamların yapılması
riski her zaman için var olacaktır. ABD Federal Soruşturma Bürosu (FBI) da bu konudaki
endişelerini dile getirmiştir.[7]

Otonom otomobiller üretim türlerine göre tam otonom ve klasik anlamda sürücü
müdahalesi içermeyen araçlar ve her zaman klasik tarzda sürülebilen araçlar olmak üzere iki
kategoriye ayrılacak. Klasik tarzda sürülebilen bir araçta, kullanıcı sürücü koltuğunda olmasına
rağmen araçtaki elektronik sistem, sürücüyü belirli işlemleri yapmaya veya belirli işlemleri
yapmamaya zorlayacak ve böylece otonom araç diğer araçlarla daha uyumlu Daha sağlıklı
veriler üretmenin ve yoluna devam etmenin sağlıklı bir yolu olacaktır.[8]

Sürücü bu yükümlülüğü teknik ve yasal bir yükümlülük olarak karşılayacaktır. Sürüş


sırasında, sürücü günümüzde olduğu gibi cep telefonu görüşmeleri yapamayacak, metin
mesajları gönderemeyecek veya e-postaları kontrol edemeyecektir.Direksiyonda sabit bir hakim
konumu korumak ve kamerayı gözden kaybetmeden dikkatli bir şekilde sürmek zorunda
kalacaktır. arabadaki sistem. iletişim. Bu durumda araç kullanmayı sevenler için elverişsiz bir
duruma neden olacaktır.[4]

2.4. Otonom Araç Çalışma Prensibi

Otonom vasıtalarda taşıtın seyir hakimiyeti insanda değil Otonom sistemde diğer
bir deyişle bir cins otomatik kaptandadır. Bu hakimiyet taşıtın şerit içinde yakalanmasından
gidilecek yere göre dönüş manevralarının reelleştirilmesine, öndeki vasıtayı takip mesafesinin
ayarlanmasından trafik kaidelerine uyulmasına kadar oldukça işlevi kapsamaktadır.
İnsan sürücülerin sahip oldukları maharetlerin Otonom hakimiyete aktarılabilmesi, Otonom
sürücünün insan sürücüde olan hünerlere sahip olabilmesi için en az onun kadar görüşe sahip

6
olması, diğer bir deyişle trafikte çevresinde büyüyen hadiseleri en az insan sürücü gibi algılayıcı
edebilmesi gerekir.

Bugün mevcut olan farklı sensör teknolojilerinin kendi avantajları ve dezavantajları


vardır. Bu nedenle farklı sensörler kullanılmaktadır, böylece seyir bilgisayarı onlardan gelen
bilgileri entegre ederek sensör füzyonu hız sabitleme fonksiyonlarını gerçekleştirebilir. İnsansız
araçlarda sensörler kullanılmaktadır. Otonom sürüş, çok çeşitli teknolojileri ve altyapıyı,
işlevleri ve ortamları, kullanım senaryolarını ve iş senaryolarını ve ürün ve hizmetleri kapsar.
Bu gelişmeler için tek bir zaman çizelgesi yoktur: bazıları bugün burada, bazıları çok uzakta
olabilir ve bazıları belirli teknolojik yeniliklere veya belirli politika seçimlerine bağlı olacaktır.
Daha da önemlisi, araç otomasyonu, otomasyon ve bağlantıda daha büyük bir devrimin
parçasıdır. Bu devrimlerin en son işaretleri - kişisel bilgisayarlar, cep telefonları ve İnternet -
birleşti ve şimdi fiziksel çevreyi algılayan ve işleyen makinelerle bütünleştirildi.

Bu makineler sadece kendi kendini süren arabaları değil, aynı zamanda dronları, kişisel
bakım robotlarını, 3D yazıcıları, izleme ekipmanlarını vb. içerir. İnsan gibi otomatikleştirilmiş
bir araç, bilgi toplamalı, bu bilgilere dayanarak bir karar vermeli ve bu kararı uygulamalıdır.
Bilgi, araç donanımından, fiziksel altyapıdan, fiziksel dijital altyapıdan ve dijital altyapıdan
gelir; bunların herhangi biri kamu veya özel olabilir. Bu teknolojilerin çoğu günümüzde
mevcuttur ve araçlara, bazı durumlarda, test durumlarında ve çeşitli sürüş ortamlarında
minimum sürücü girdisi kullanan veya hiç olmayan araçlara rehberlik edebilir.[9]

7
Şekil 2.1:Otonom araç teknolojileri.[9]

Birçok şirket, yüksek düzeyde otomatikleştirilmiş araç prototiplerinin yol testlerini


deniyor veya sürdürüyor ve işlevleri, gelişmiş sensör işleme teknolojisi, uyarlanabilir
algoritmalar, yüksek çözünürlüklü haritalar ve bazı durumlarda araçların konuşlandırılması
nedeniyle hızla gelişiyor. Birçok şirket, yolda yüksek düzeyde otomatikleştirilmiş araba
prototiplerini deniyor veya sürekli olarak test ediyor ve gelişmiş sensör işleme teknolojisi,
uyarlanabilir algoritmalar ve yüksek çözünürlüklü haritalar sayesinde işlevleri hızla gelişiyor.
Otonom araçlar, otonom sürüş modunda neredeyse tamamen Amerika Birleşik Devletleri'ni
geride bırakmıştır.[9]

3. ARDUİNO NEDİR

Arduino, projeleri geliştirmek için dizayn edilmiştir ve elektronik donanım ve yazılımı


geliştirmek için bir platform üstünde girdileri ve çıktıları olan bir elektronik alettir. Arduino
programlama dili ile kaleme alınır ve Arduino da geliştirmiş olduğumuz yazılım dilini Arduino
IDE yolu ile karta aktarılır.

3.1. Arduino Çalışma Prensibi

Arduino'nun analog ve dijital pinleri vardır ve hem analog hem de dijital pinleri
işleyebilir. Arduino'ya bağlı sensörler sayesinde ortamda etkileşime giren giriş sinyallerini elde
etmek ve bu sinyalleri kontrol etmek ve çıkış sinyalleri üretmek için algoritmalar oluşturmak
kolaydır.
8
Aşağıda otonom araba’da kullandığımız kodlar şekil 3.1 de görülmektedir.

Şekil3.1: Arduino Kumanda kodu

9
Şekil 3.2: Arduino Kumanda Kodlarının devamı

10
Şekil 3.3: Arduino Kumanda Kodları Devamı

11
Şekil 3.4: Arduino Kumanda Devresi Kodu

12
Şekil 3.5: Arduino Kumanda Devresi Kodu Devamı

13
Şekil 3.6: Arduino Kumanda Devresi Kodu Devamı

3.2. Arduino İle Kumanda Devresi

Arduino ile kumanda devrei arasındaki ilişkiyi anlatıcak olursak bilgisayardan aracı
kontrol edebilmek için kumandanın yön komutlarına karşılık gelen bağlantı noktalarına yani GPIO
pinlerine karşılık gelen pinlere bağlayıp 5V ve 0V göndererek kontrolünü Şekil 3.7’deki gibi
sağlamaktadır. (İlgili kodlar EK1.’dedir.)

Şekil3.7: Arduino yardımıyla kumanda devresinin kontrolü


14
3.3. Raspberry pi

Raspberry pi eğitim ve hobi amaçlı kullanımlar için tasarlanmış, kredi kartı


büyüklüğünde, düşük maliyetli ve genellikle Linux işletim sistemi ile kullanılan mini bir bilgisayar
olup Şekil 3.8’de gösterilmiştir. Raspberry pi bir bilgisayar olmasının yanında aynı zamanda
fiziksel dünyayı algılayan ve kontrol edebilmek için kullanabileceğimiz basit bir
mikroişlemcidir.[18]

Şekil3.8: Raspberry pi 3[18]

Raspberry pi üzerinde bulunan 40 adet pin sayesinde birçok kontrol uygulaması aynı
anda yürütülebilmektedir. Bluetooth ve wif 1i ile iletişim basit, hızlı ve etkilidir. Dokunmatik
ekran ve kamera modül portu yardımı ile kontrol edilecek sistemin kodlaması ve müdahalesi
kolaylıkla tamamlanabilir. Raspberry pi, sıcaklık ve nem kontrolü, motor kontrolü, ev
otomasyonu gibi birçok kontrol uygulamasını gerçekleştirebilir.19]

Dahili Wi-Fi ve Bluetooth fonksiyonları sayesinde araca uzaktan erişim sağlayabilir.


Sistem 1,2 Ghz, 4 çekirdekli 64 bit ARM Cortex-A53 işlemci birimi ve Broadcom BCM2837
mikroişlemci içerir. 1 GB bellek kapasitesine ve 2 çekirdekli Vıdeocore IV GPU grafik işleme
birimine sahiptir. 4 USB 2.0 bağlantı noktası, 10/100 Mbit/s'yi destekleyen Ethernet bağlantı
noktaları ve HDMI çıkışı vardır. RASPBERRY Pİ kartı, Şekil 3.9'daki pin girişini
göstermektedir.

15
Şekil 3.9: Raspberry pi Pinleri

Raspberry pi Özellikleri:

• 64 bit dört çekirdekli ARMV 8 işlemci


• 1.2 Gigahertz
• 1 Gigabayt Ram
• Dahili Wif 1i-PC024
• Bluetooth 5
• 40’dan fazla GPIO pin
• 4 adet USB 3.0
• Full+ HDMI girişi
• RASPBERRY Pİ Kamera bağlantısı için CSI kamera portu
• Micro SSD
3.4. RP kurulumu

Raspberry pi bir mikrobilgisayar olduğu için işletim sistemini kurmak için kendi
altyapısına ihtiyaç duyar. Raspberry pi'nin ilk kurulumu için minimum 4 GB kapasiteli önceden

16
yüklenmiş bir Micro SD (Secure Digital) kart gereklidir. Gerekli Raspbian işletim sistemi
sunucumuza RASPBERRY Pİ Vakfı resmi web sitesinin
"https://www.raspberrypi.org/downloads/raspbian/" sayfasından indirilir. Raspbian Stretch ve
Raspbian Stretch Lite olmak üzere iki farklı dosya olacak. Lite versiyonunda grafik ekran
arayüzü olmadığı için Raspberry pi 3'ün HDMI çıkışını göremiyoruz. Bu sürüm ileri düzey
kullanıcılar içindir, Raspberry pi'yi komut satırından (terminal) kullanabilirsiniz. Lite sürümü,
projemizde ekran görüntülerine ihtiyaç duymadığımız ve işlemlerin daha hızlı yapılabilmesi için
tercih edilmektedir.

Şekil3.10: Raspberry pi’ın İşletim Sistemi Olan Raspbian

İndirdiğimiz Lite imaj dosyasını .zip formatından çıkartıyoruz. Daha önce hosttan
indirdiğimiz win32diskImager programını açıyoruz ve ardından işletim sistemini SD karta
yazabiliyoruz. Belirtilen lokasyondan imaj dosyamızı seçiyoruz. SD kartımızın bilgisayara
takıldığından emin olduktan sonra cihaz kısmında görebiliriz. Ardından Write butonuna tıklayıp
yazma işlemini başlatıyoruz. Yazma işlemi yaklaşık 2-3 dakika sürer. İşleme. "Yazma başarılı"
yazma işlemini tamamlayın. Yazınızı görmenizi bekliyorum. Raspberry pi'nin ilk başlatıldığında
wi-fi'ye giriş yapabilmesi için kullanılacak özel bir dosya oluşturabiliriz.

Windows'ta, SD kartı taktıktan sonra diskin iki sürücüsü ve iki bölümü vardır. Genel
bir FAT türüyle biçimlendirilecek ilk etiket, etiketi önyüklenebilir hale getirir. Bu sürücü, ilk
açılışta Wi-Fi'mizi bulmamıza ve açmamıza yardımcı olacak bazı dosyaları düzenleyeceğimiz
yerdir. Windows'ta metin düzenleyici olan Notepad'i açıp aşağıda paylaştığımız kodu wi-fi'ımıza
göre yapıştırıp düzenlememiz gerekiyor. Şekil 3.11'de gösterildiği gibi;

17
Şekil 3.11: Giriş Bilgileri

Bağlanacağımız ağın kimliği bu bölüme yazılmalıdır. Bu alana "HW-4G-MobileWIFI-


9C1C" projesinde kullanılan Huawei mobil modemin kimliği yazılır. Bu alan modemimizin şif
1resi ile değiştirilmelidir. Değişiklik tamamlandıktan sonra dosya adı "wpa_supplicant.conf"
olur. Adı değiştirilerek kaydedilmelidir. Bu dosya SD kart üzerindeki
"/etc/wpa_supplicant/wpa_supplicant.conf" klasörüne taşınmalıdır. Yukarıda bahsettiğimiz
talimatları uyguladıktan sonra artık Raspberry pi'miz Wi-Fi ağımıza bağlanmıştır, öncelikle SD
kartımızı hosttan çıkarıp Raspberry pi işlemimizin micro SD girişine takabiliriz. RASPBERRY
Pİ çalışmamız USB kablosu ile mobil güç adaptörü bağlanarak yürütülmektedir.Şimdi SSH
üzerinden bağlanmak için Raspberry pi'nin IP adresini bulmanız gerekiyor.

Bu bağlantıların yapılabilmesi için Windows üzerinde çeşitli programların çalıştırılması


gerekmektedir. İlk olarak, IP adresini bulmak için ana bilgisayar ve RASPBERRY Pİ aynı
modeme bağlı olmalıdır. Raspberry pi'nin IP kimliği, host üzerinde "Wireless Network
Observerz" programı çalıştırılarak elde edilir. Aynı modeme bağlı farklı ağların IP tanımları
Şekil 3.12'de gösterilmiştir.

Şekil 3.12: Wireless Giriş Sayfası

18
Program çalıştıktan sonra ekrana "192.168.8.110" RASPBERRY Pİ IP adresi gelir. Bu
adres farklı giriş saatlerinde değişecektir. IP adresini öğrendikten sonra Raspberry pi ile SSH
bağlantısı sağlamak için Putty programı tercih edilir. Windows üzerinde Putty programını
çalıştırdıktan sonra karşınıza Şekil 3.13'deki gibi hoş geldiniz arayüzü çıkacaktır.

Şekil 3.13: Giriş Sayfası

Putty login arayüzü göründükten sonra "Host Name" kısmına Raspberry pi'nin IP
adresini giriniz ardından SSH alanı seçilecektir. bağlantı türü olarak. "Aç" düğmesine tıklanarak
Raspberry pi komut terminaline erişim sağlanacaktır. Giriş komutu ekranı Şekil 3.14'te
gösterilmiştir.

19
Şekil 3.14:RP Komut Ekranı

Raspberry pi kişisel bir mini bilgisayar olduğu için ilk giriş ekranında "Login as:"
kullanıcı adı ve "Password:" şif 1resini soracaktır. Raspbian işletim sistemini ilk kez kurarken
"Login ID: pi" ve "Password: ahududu" bilgileri hazırlanacaktır. Raspberry pi'ye eriştikten sonra
yapılacak ilk şey şif 1re bölümünü değiştirip ayarlar bölümüne gidip projede kullandığımız
GPIO giriş ve çıkış pinleri, I 2C bağlantı girişi ve Pi kamera seçeneklerini aktif 1 hale
getirmektir. Komut satırından "sudo raspi-config" girildiğinde ayarlar giriş ekranına ulaşılır.
Şekil 3.15, RASPBERRY Pİ ayarı giriş ekranını göstermektedir.

20
Şekil 3.15:RP Ayarlar Ekranı

• Kullanıcı şif 1resini değiştir: RASPBERRY Pİ'nin kullanıcı adı ve şif 1resinin
değiştirildiği kısımdır.
• Ana bilgisayar adı: Bu, Raspberry'nin ağ taramasında bulacağı ad değişikliğinin
parçasıdır.
• Önyükleme seçenekleri: Bu bölümde, Raspbian işletim sistemini kullanarak
Raspberry pi'nin farklı önyükleme modlarını seçebilirsiniz.
• Yerelleştirme seçenekleri: RASPBERRY Pİ'nin dilinin ve bölgesel konumunun
değiştirildiği kısımdır.
• Arayüz seçeneği: Bu ayar, Raspberry pi'ye harici olarak bağlanacak çevresel
aygıtların aktif 1 veya pasif 1 konfigürasyonunu sağlar.
• Hız Aşırtma: Raspberry pi'nin performansını artırmak için kullanılan bir ayardır.
• • Gelişmiş seçenekler: Bunlar, gelişmiş seçenekleri yapılandırmaya yönelik
ayarlardır.
• Güncelleme: Bunlar, Raspberry pi'yi güncellememizi sağlayan araçlardır.
• Raspi-config hakkında: Kullandığımız konfigürasyon sistemi hakkında bilgi
verir.

RASPBERRY Pİ ayar kısmından "Arayüz Seçenekleri" kısmına girerek kullanacağımız


gerekli donanımı aktif 1 etmemiz gerekiyor. Şekil 3.16 da, çevresel aygıt ayar ekranını
gösterilmektedir.
21
Şekil 3.16: RASPBERRY Pİ Çevre Birimleri Ayarlama Ekranı

• Kamera: Bu, RASPBERRY PI anakart üzerindeki CSI konektörüne bağlı


kameranın etkinleştirildiği alandır.
• RASPBERRY PI'nin ağ üzerinden farklı sistemlerle haberleşebilmesi için gerekli
olan SSH bağlantısının parçasıdır.
• VNC: Raspian işletim sistemiyle birlikte gelen VNC uzaktan erişim programın aktif
1 edildiği bölümdür.
• SPI: SPI ile bağlanan diğer donanımların RASPBERRY PI üzerinde çalışabilmesi
için gerekli giriş ve çıkış pinlerinin aktif 1leştirildiği alandır.
• I2C: RASPBERRY PI'nin I2C bağlantılı cihazlarla haberleşebilmesi için gerekli
giriş ve çıkış pinlerinin aktif 1 hale getirildiği alandır.
• Serial: Bu kısımda GPIO pinleri arasında yer alan UART pini uzaktan bağlantı
sağlanarak komut satırına girilebilmesi için aktif 1 hale getirilir.
• 1-Wire: Donanım 1 telli protokolü kullanan sensörün RASPBERRY PI ile
haberleşebilmesi için gerekli bağlantıyı etkinleştiren kısımdır.
• Remote GPIO: RASPBERRY PI'nin giriş-çıkış pinlerini bir ağ bağlantısı
üzerinden kontrol eden Raspberry pi.GPIO adlı servis sayesinde oluşturulur.

22
Şekil 3.17: WinSCP Bağlantı Ekran

Raspberry pi üzerinde tüm ayarlamalar yapıldıktan sonra SSH bağlantısı üzerinden


dosya paylaşımını sağlayan "WinSCP" programı kullanılarak host üzerinde bulunan gelişmiş
metin editör programı "notepade++" üzerine yazılan kodun Raspberry pi home klasörüne daha
hızlı aktarılması sağlanır. Şekil 3.17, WinSCP bağlantı ekranını göstermektedir. Host üzerinde
oluşturduğumuz "manage.py" ve "config.py" Python uzantı kod dosyalarını Raspberry pi ana
klasörü WinSCP programında /home/pi/ alt başlığı altında yeni oluşturduğumuz "d2" klasörüne
aktarıyoruz. Detaylı kod ekte verilmiştir.Bütün bu işlemler tamamlandıktan sonra işlem gücü
düşük olduğundan RC sürücüsüz araba ile ana bilgisayarda kullanacağımız görüntü veri
dosyalarının işlenmesi için bir Python ortamının oluşturulması gerekmektedir. Raspberry pi
üzerinde tüm ayarlamaları yaptıktan sonra host üzerinde bulunan "notepade++" gelişmiş metin
düzenleyici programı üzerine yazdığımız kod, daha hızlı Miniconda Python 3.6 64-bit
sürümünün Raspberry pi home klasörü ve https sitesinden Windows kurulum dosyaları :/
/conda.io/miniconda.html Kurulum tamamlandı. Başlat menüsünden Anaconda terminal satırı
açılarak Python Anaconda ortamı için aşağıdaki komutlar girilmelidir. Anaconda terminalini
kapatıp tekrar açtığımızda, Python kütüphanesi ile eşleştirmeyi yeniden etkinleştirmek için
"aktif 1 eşeği etkinleştir" komutunu yazmamız gerekiyor.

3.5. Kamera modülü

23
Otonom aracın, otomatik eğitimi aşamasında görüntülerin alınabilmesi için şerit
çizgilerin yolların araç üzerinden canlı olarak ana bilgisayara vıdeo aktarımını ve fotoğraf aktarımı
yapılabilmesi için RP modeli ile uyumlu ve yüksek çözünürlüğe sahip RP için dizayn edilmiştir.
(İlgili kodlar EK.2‘dedir)

Kamera modülünün özellikleri şunlardır:

• Sensör tipi: Omni Vision OV6547 Color CMOS QSXGA (5 Megapixel)


• Sensör Boyutu: 3.67 x 2.74 (mm) (1 / 4” format)
• Pixel Sayısı: 2592 x 1944
• Pixel Boyutu: 1.4 x 1.4 (um)
• Lens: f=3.6, f/2.9 (mm)
• Atış :1/4 5M
• Diyafram: 2.9
• Odak uzaklığı: 3.29
• FOV:65 derece
• Sabit Odak: 1 m- Sonsuz
• Görüş Açısı: 54 x 41 açılı
• Görüş Alanı: 2m’de 2.0 x 1.33m
• Tam çerçeve SLR lens eşdeğeri: 35mm
• Stream: 1080p x 30fps, 720p x 60fps, 480p x 60fps II 90fps
• Çalışma sıcaklığı: -30°C ~ 70°C

24
Şekil 3.18:RP uyumlu kamera modülü

4. YAPAY SİNİR AĞLARI İLE TAHMİN

Tahmin, TDK sözlüğünde geçen Arapça bir etimoloji olup, akıl, sezgi veya belirli
verilere dayanarak meydana gelebilecek bir şeyi veya olayı tahmin etmek olarak tanımlanır.
Tahmin, teknik alanlarda ve günlük hayatta kullanılan önemli bir süreçtir. Yaya olarak karşıdan
karşıya geçerken beynimiz sol ve sağ araçların hızlarını ve aramızdaki mesafeyi hızlı bir şekilde
algılayacaktır. Yoldan geçmek veya tehlike olmadığına dair bir sinyal beklemek de bir tahmin
işlemidir. Burada geçmişte öğrenilen ve uygulanan bilgilere dayalı olarak anlık bir tahmin
yapılır. Ticari işlemler, doktorların hastalıkları, finans kurumlarının parite durumu ve hava
mühendislerinin hava durumu tahminleri, süreç içinde teknik olarak benzer olan tahminlere
örnektir.

Yapılan tahminlerin eksiksiz ve kusursuz biçimde gerçekleşmesi hiçbir zaman


beklenmez. Tahmin başarı oranı eldeki veri miktarına ve sonuca etki eden faktörlerin belirlemesine
bağlıdır. Tanımda da bahsedildiği üzere tahmin istenilen sonuca göre sezgi ya da veriye dayanır.
Tahmin, nitel (kalitatif 1) ve nicel (kantitatif 1) yöntem olmak üzere iki farklı biçimde
gerçekleştirilir. Nitel tahmin yöntemleri sezgisel olup önyargı içerebilir ve tümevarımı
amaçlamaktadır. Uzman görüşü alınması, delphi tekniği, anket yöntemi, senaryo yazımı ve pazar
araştırması nitel tahmin yöntemlerine örnek olarak gösterilebilir. Nicel tahmin yöntemleri ise
geçmişteki tercihlerin ve sonuçların gelecekte de benzeri olarak devam edeceğini öngörüp
verilerin matematiksel olarak değerlendirildiği, tümdengelimi amaçlayan objektif 1 tahmin
yöntemidir. Bazı kaynaklarda nicel yöntemler zaman serisine dayalı yöntemler ve sebep sonuç

25
ilişkisine dayalı yöntemler olmak üzere iki ana başlıkta incelense de günümüzde teknolojik
ilerleme ile yapay zekâ alt başlıktan üçüncü ana başlık haline gelmiştir. Yapay zekâ ile tahmin bir
sonraki başlıkta incelenecektir.[20]

4.1. Yapay Zeka ile Tahmin

Bugün sıkça bahsedilen yapay zekâ teknolojisi, önümüzdeki birkaç yıl içinde günlük
hayatımızda da rol oynayacak. Yapay zekanın arkasındaki gerçek, uzak veya yakın gelecekte
neler olabileceğini tahmin etmek için geçmiş veya şimdiki verileri kullanabilmesidir. Yapay
zekâ tahmini; yapay sinir ağları, bulanık mantık ve genetik algoritmalar olmak üzere üç farklı
şekilde üretilebilir. Nicel tahmin yöntemleri Şekil 4.1.'de görsel olarak başlıklarına göre
sınıflandırılmıştır.

Şekil 4.1: Tahminleme yöntemleri [20]

4.1.1. Yapay Zeka Nedir

Yapay zekanın nihai amacı, insan gibi düşünen ve hareket eden makineler
geliştirmektir. Yapay zekanın tanımını daha iyi anlamak için önce zekanın ne olduğunu
tanımlamamız gerekiyor. Hikmet, dilimize Arapça'dan girmiştir, sözlük anlamına bakarsak;
TDK, insanın düşünme, akıl yürütme, nesnel gerçekleri algılama, yargılama ve sonuç çıkarma

26
yeteneğinin tümü olarak tanımlamaktadır. İngilizce ve Fransızca'da Intelligence, Latince'den
türetilen ve "anlayış" anlamına gelen "zeka" kelimesine karşılık gelir. Yapay zekanın 16
alanındaki kurucu bilim adamlarından biri olan Nils J. Nilsson'a göre, "Varlıkların çevrelerinde
normal ve öngörülebilir şekilde çalışmasını sağlayan kalitedir" 71 farklı akıllı tanım yer
almaktadır

Algoritma, girdiyi çıktıya dönüştürmek için yürütülecek bir dizi komuttur. Ancak bazı
işler için bilinen bir algoritma yoktur. Makine öğrenimi, bir bilgisayarı standartlara göre
performansını artırmak için programlamak için örnek verilerin veya geçmiş deneyimlerin
kullanılmasıdır.

Yapay öğrenme yalnızca bir veri tabanı uygulaması değil, yapay zekânın da bir parçasıdır.
Değişen bir ortamdaki etmenin zeki olarak nitelendirilebilmesi için deneyimlerinden
öğrenebilmesi gerekir. Tüm bu bilgiler ışığında yapay zekâyı daha iyi tanımlayabilir ve amacını
daha iyi anlayabiliriz.[20]

4.2. Yapay Sinir Ağı

Yapay Sinir Ağları (Yapay Sinir Ağları) veya kısaca Sinir Ağları (YSA), ağırlıklı
bağlantılarla birbirine bağlanan işlem elemanlarından oluşan, insan beyninden ilham alan paralel
dağıtılmış bilgi işleme yapılarıdır. En önemli özelliği ise yaşayarak öğrenebilmesidir. Yapay
sinir ağları geliştirmenin amacı, insan beyninin öğrenme yoluyla yeni bilgi edinme, yeni bilgi
oluşturma ve keşfetme gibi yeteneklerini herhangi bir yardım almadan otomatik olarak
gerçekleştirmesidir. Sinir ağları, bilgi ve öğrenme arasında bir ilişki kurma yeteneğine sahiptir.
Yapay sinir ağlarının temel işlevleri şu şekilde belirtilebilir:

• Öngörü (Prediction) veya tahminleme : İleriki satışlar, hava tahminleri, at yarışları,


çevresel risk, …
• Sınıflandırma (Classif 1ication) ve Kümeleme (Clustering) : Müşteri profilleri, tıbbi
teşhis, ses ve şekil tanıma, hücre tipleri …
• Kontrol (Control) : Erken uyarı için uçaklarda ses ve titreşim düzeyleri, …

Veri ilişkilendirme, veri kavramsallaştırma ve veri filtreleme için de kullanılabilir.


Endüstriyel uygulamalar, finansal uygulamalar, askeri ve savunma uygulamaları, tıp ve sağlık
uygulamaları, mühendislik uygulamaları, robotik, görüntü işleme, örüntü tanıma, yapay sinir
ağlarının yanı sıra iletişim endüstrisi ve eğlence tahmini gibi özel uygulama alanları da

27
bulunmaktadır. Yapay sinir ağı birimi temel olarak girdi, ağırlık, toplam fonksiyon ve çıktıdan
oluşmaktadır.

Şekil 5.2: Tek gizli katmana sahip birçok katmanlı algılayıcı modeli.[21]

İnternette yapay sinir ağları için birçok yazılım kütüphanesi ve simülasyon ortamı
bulunmaktadır. Bazıları sadece kütüphane kısmını içerse de, bazıları da yapay sinir ağları
tasarlamak için araçlar içerir. Bu tür araçlar, özellikle ileri düzey konuları anlamayanlar için
yazılıma kolayca sinir ağları ekleyebilir.[21]

4.2.1. Geri Dönüşümlü Ağlar ve Diğer Yapay Sinir Ağları

Daha önce tartışılan ağların en temel özelliklerinden biri, ileri beslemeli ağlar
olmalarıdır. Yani bu ağlardaki süreç elemanları çıktılarını bir sonraki katmana veya dış dünyaya
gönderir. Bu elemanların çıktısı geri dönüştürülemez. Çıkışı, süreç elemanları için girdi olarak
kullanılmaz. Bu bölümde önce geri dönüştürülebilir ızgarayı tanıtın ve Elman ızgarasını ayrıntılı
olarak açıklayın. Daha sonra yapay sinir ağlarının diğer yaygın modelleri kısaca açıklanacaktır.

Tersinir bir ağda, süreç elemanının çıktısı sadece ileriye değil, geriye de gönderilir.
Genel olarak konuşursak, tamamen tersine çevrilebilir ve kısmen tersine çevrilebilir ağlardan
bahsedilebilir. Elman file parçası geri dönüşümlü filenin en güzel örneğidir. Elman ağının
tasarımı bilinen CCA ağına benzer ve genelleştirilmiş Delta kuralına göre eğitilir.

Bu ağlarda MCA ağlarından farklı olarak çıkarım elemanları adı verilen süreç
elemanları bulunmaktadır. Bu elemanların görevi, ara katman elemanının çıktısını girdi olarak
ağa geri göndermektir. Ağ çıkışını hesaplama formülü bu bölümde verilmiştir. Ara katman öğesi
ile içerik öğesini birleştiren bağlantının ağırlığı sabittir ve 1'e eşittir. Bu nedenle, ağın eğitim
sürecinde, ağa beklenen çıktı ile gerçek çıktı arasındaki hata yayılımında bu bağlantılar dikkate

28
alınmaz, dolayısıyla ÇKA ağının öğrenmesi burada da uygulanabilir. Günümüzde yaygın olarak
kullanılan diğer ağlara örnekler:

• Hopfield ağı
• Conterpropogation ağı
• Cognition ve Neocognition
• SOM ağı

Hopfield ağının en temel özelliği, tüm süreç elemanlarının birbirine bağlı olmasıdır. Ağ
bağlantı değeri bir enerji fonksiyonu olarak kaydedilir. İki tür model vardır. Ayrık ve sürekli
Hopfield ağı. Bu ağlar özellikle geleneksel yöntemlerle çözülmesi zor olan optimizasyon
problemlerinin çözümü için uygundur.

Yayılma önleyici ağ ise Kohonen ve Grosberg'in öğrenme kurallarının birleştirilmesiyle


oluşturulmuş bir ağdır. Her iki öğrenme kuralının da kendi avantajları vardır. Bu ağlar özellikle
şekil tanıma problemlerinde başarıyla kullanılabilir.

Öte yandan, bilişsel makine ve yeni bilişsel makine ağı, insan beyninin görsel
sisteminde görevleri üstlenmek için geliştirilmiş ağlardır. Bu ağlar iki katmandan oluşmaktadır.
Birinci katman bağlantı alanlarına, ikinci katman ise rekabet alanlarına bölünmüştür. Bu ağlarda
iki tür süreç öğesi vardır: uyarıcı ve engelleme. Bileşenin çıkışı, kendisine ulaşan uyarı ve
yasaklama sinyallerine göre belirlenir. Bu ağlar esas olarak sorunları belirlemek için kullanılır.

SOM ağı, öğretmen olmadan öğrenilebilen ve sınıflandırma problemlerine başarıyla


uygulanmış bir ağdır. Ağın bir girdi katmanı ve bir çıktı katmanı vardır. Çıktı katmanındaki
süreç elemanları birbiriyle rekabet eder ve kazanan eleman girdinin kategorisini gösterir. Ağın
çıktı katmanı bir düzlem olarak ele alınır ve her kazanan süreç öğesinin komşularını göstermek
için bir komşuluk alanı oluşturulur. Mahalledeki tüm unsurlar kazanan unsurla birlikte
değerlendirilir.

Son olarak, bu bölüm hibrit ve yakınsanmış ağlara odaklanacaktır. Burada, sorunu


birlikte çözmek için birden fazla ağ sağlanır. Bir sonraki bölümde kompozit ağların nasıl
tasarlanacağını ve problemlere nasıl çözümler ürettiklerini göstereceğiz.

4.2.2. Yapay Sinir Ağlarının Donanımı

Günümüzde çoğu yapay sinir ağı uygulaması yazılım teknolojileri olarak kabul
edilmektedir. Belirli bir yazılım modelini uyguladı ve sorunu seri bir bilgisayarda çalıştırarak

29
çözmesini istedi. Paralellik gibi yapay sinir ağlarının bazı özelliklerini göstermek için özel
donanım teknolojisine ihtiyaç vardır. Yapay sinir ekipmanı ticari olarak aşağıdaki alanlarda
kendini gösterir:

• Optik karakter tanıma


• Ses tanıma
• Trafik izleme
• Veri madenciliği ve filtreleme

Yapay Sinir ağları için özel donanım geliştirmenin birçok faydası vardır. Bunları
arasında şunlar sayılabilir.

• Hız: Birçok uygulamada sistemin karar verme hızı çok önemlidir. Günümüzün en
hızlı seri işlemcileri bile, özellikle çok sayıda giriş parametresi gerektiğinde ve ağ ölçeği çok
büyük olduğunda gerçek zamanlı kullanım ve öğrenme için uygun değildir. Sistemi gerçek
zamanlı olarak kullanabilmek için sistemin hızını artıracak özel donanımların kullanılması
gerekebilir. Örneğin paralel bağlanan işlemciler yardımıyla uygulamaların hızı artırılabilir.
• Güvenilirlik: Özel donanım sayesinde sistemin güvenilirliği artırılabilir. Özellikle
donanım hataları kontrol altına alınacağı için sisteme olan güven artacaktır.
• Özel çalışma koşulları: Özellikle sistemin boyutu ve ağırlığı açısından en uygun
durumun seçilmesini sağlamak için donanımı soruna göre tasarlayın.

Yapay sinir ağlarının araştırılması ve bu kitapta anlatılan modeller genellikle yazılım


olarak geliştirilir ve seri makinelerde çalıştırılır. Bu ağların başarılı bir şekilde uygulanması ve
paralel çalışması özel donanım gerektirir. Bu konuda derinlemesine araştırmalar yapılıyor ve
ticari bir sistem oluşturuluyor. Bu cihazlar kontrol edildiğinde genel olarak 3 tip cihaz olduğu
görülmektedir. Bunlar:

• Dijital yapay sinir ağı donanımları


• Analog yapay sinir ağı donanımları
• Karma donanımlar

Bunların her birinin kendi avantajları ve dezavantajları vardır.Tasarımcılar zamana,


maliyete ve sorunun doğasına göre kendileri için en uygun donanımı seçebilirler.

4.2.3. Yapay Sinir Ağlarının Genel Özellikleri

30
Bu bölümde yapay sinir ağlarının uygulamaları anlatılmaktadır. Genel olarak aşağıdaki
alanlarda uygulamalara rastlandığı if 1ade edilmiştir.

• Endüstriyel uygulamalar
• Finansal uygulamalar
• Askeri ve savunma uygulamaları
• Sağlık uygulamaları

Bu alanlarda teşhis, sınıflandırma, tahmin, kontrol, veri ilişkilendirme, veri filtreleme,


yorumlama gibi alanlarda yapay sinir ağları kullanılmaktadır. Hangi şebekenin hangi problem
için daha uygun olduğunu belirlemek için ağın öznitelikleri ile problemin özniteliklerini
karşılaştırmak gerekir. Her ağın çok iyi olduğu bazı işlevleri vardır. Örneğin, CKA ağlarının
tahmin problemlerinde çok iyi sonuçlar üretebildiği iyi bilinmektedir. Bu özelliklerden yola
çıkarak probleme uygun ağ belirlenebilir. Yapay sinir ağlarının bazı avantajları ve dezavantajları
vardır. Bunlar bölümde listelenmiştir.

Yapay sinir ağlarından yararlanabilmek için araştırmaların yapılması ve eksikliklerinin


önüne geçebilecek sistemler oluşturulması gerekmektedir. Diğer sistemlerle karşılaştırıldığında
yapay sinir ağlarının geliştirilmesi çok kolaydır. Piyasada ticari olarak temin edilebilen
simülatörler bulunmaktadır. Bu sistemlere sadece örnekler verilmiş ve ağın topolojisi
belirlenmiştir. Simülatörün kendisi işimi yaptı. Bu simülatörlerin test fonksiyonları da vardır.
Öğrenciler ayrıca ağın performansını da belirleyebilirler.

5. RC OTONOM ARACIN YAZILIM TASARIMI

Otonom aracın manevra ve hareket kabiliyetlerinin sağlanması için gerekli yazılım,


kütüphane ve kalibrasyon ayarları kontrol edilmiştir.Anlık görüntüler kaydedilerek görüntü veri
dosyaları oluşturulmakta, bu dosyalar ana bilgisayarda işlenmekte ve otonom sürüş eğitimi
gerçekleştirilmektedir. . Ayrıntılı kod için eke bakın. Kullandığımız mikrobilgisayar türü
RASPBERRY Pİ olduğu için açık kaynaklı Python programlama dilini kullanıyoruz. MatLAB,
Visual Studio, Opencv gibi görüntü işleme teknolojisinde kullanılan birçok programlama dili ve
kitaplık bulunmaktadır. Kendi kendine sürüş eğitimi aşamasında, Google mühendisleri
tarafından geliştirilen Python programlama dili ile uyumlu TensorFlow, Keras, Tornado ve
birçok temel kütüphane ile kullanıldı.

Sinir ağı sistemi, besleme için TensorFlow ve Keras'ı kullanır. Sistemin eğitim aşaması,
sistem pistte defalarca manuel olarak kullanılarak ve ardından kendi başına kullanmasına izin

31
verilerek çalışılmıştır. Kendi kendine giden arabalarımızı farklı yol ve koşullarda eğitmek için
pygame oyun platformu üzerine kurulan simülasyon programı üzerinde deneyler yapılmıştır.

5.1. Python
Python, Guido Van Rossum adlı Hollandalı bir programcı tarafından yazılmış bir
programlama dilidir. 1990 yılında gelişimi başlayan Python; C ve C++ gibi programlama dilleri
ile karşılaştırırsak aşağıdaki sonuçları alabiliriz.
• Öğrenmesi daha kolay.
• Program geliştirme sürecini kısaltır ve yazmayı hızlandırır.
• Daha okunaklı ve düzenli kod ve söz dizimine sahiptir.
• C ve C++ programlama dillerinden farklı olarak ayrı bir derleyici gerekmez.

Python, işlemleri hızlı bir şekilde gerçekleştirmenizi, sisteme entegre olmanızı ve rol
oynamanızı sağlayan bir programlama dilidir. Windows, Linux/Unix ve MacOS işletim
sistemlerinde çalışmasının yanı sıra Java ve .NET sanal makinelerine de taşınabilir. Python, açık
kaynak kodlu, özgür lisanslı ve özgür bir yazılım olduğu için birçok geliştirici tarafından her
zaman tercih edilmiştir. Nesne yönelimli programlama, işlevsel veya yapılandırılmış
programlama gibi çoklu programlama paradigmalarını destekler.

Python dilini öne çıkaran unsurlardan bir diğeri ise bilimsel araştırmalarda tercih edilmesi
ve hızlı bir yapısına sahip olmasıdır. Bir başka yönden incelediğimizde RASPBERRY Pİ ve
Arduino benzeri programlanabilir elektronik kartlar ile uyumlu bir alt yapıya sahip olmasıdır.[25]

Bilimsel araştırmalarda yaygın olarak kullanılan Python için çeşitli bilim dallarında
kullanıma hazır özel kütüphaneler bulunmaktadır. Python kütüphanesinden ne kastettiğimizi
açıklamak için önceden yazılmış ve sık kullanılan program parçaları arşivlenir ve daha sonra
kullanılmak üzere dosyalarda saklanır. Özellikle bu programlama dilini bilgisayarımıza
yüklediğinizde kullandığınız dosyalar kurulum dosyaları ile birlikte bilgisayarımıza yüklenir.
İhtiyacımız olduğunda kod penceremize gerekli yönlendirme tanımlarını girerek ve komutları
çağırarak bu kod parçacıklarını kullanabiliriz, bu sayede işlemlerimiz daha hızlı olacaktır. Bu
kütüphaneler profesyonel bir yazılım ekibi tarafından hazırlanır ve kapsamlı testlerden sonra
açık kaynak oldukları için değişiklik yapma amacımıza uyum sağlayabilirler. Ve geliştirilebilir.

5.2. Pycharm

32
PyCharm, en popüler Python IDE'lerinden biridir. PyCharm, platformlar arası bir
uygulama olarak sağlanır ve Linux, macOS ve Windows platformlarıyla uyumludur. Bugün en
yaygın kullanılan Python IDE'lerinden biridir.

5.3. Linux(raspbian)
Linux (telaffuz: Lin-uks); bir bilgisayar işletim sisteminin en temel çekirdek
yazılımlarından biridir. GNU General Public License sürüm 2 altında yayınlanan ve Linux
Foundation koruması altında geliştirilen ücretsiz bir yazılım projesidir. Linux adı, 1991 yılında
ilk geliştiricisi Linus Torvalds tarafından seçildi. Günümüzde süper bilgisayar işletim
sistemlerinde kullanılan ekipmanlarda, akıllı cihazlarda ve internet altyapısında yaygın olarak
kullanılmaktadır. En popüler olanlardan biri Google tarafından geliştirilen Android işletim
sistemidir.
Ayrıca Linux adı, bu çekirdek ile oluşturulan işletim sistemlerini genel anlamda
tanımlamak için genel bir kısaltma olarak da kullanılır. Örneğin, Linux çekirdeği ve GNU
araçları birleştirildiğinde ve eksiksiz bir işletim sistemi olarak sunulduğunda, buna GNU/Linux
dağıtımı denir, ancak sıradan terimlerle basitçe Linux olarak adlandırılır.
Linux teriminin bu iki farklı kullanımından kaynaklanan karışıklığı önlemek için, Linux
çekirdeği makalesinde çekirdek yazılımı hakkında teknik bilgiler ve Linux dağıtım makalesinde
dağıtım hakkında bilgi verilmiştir.
5.4. Anaconda 3

Python; Python, Anaconda organizasyonu tarafından R programlama dili, veri bilimi ve


bilimsel araştırma ile uğraşan kişiler için geliştirilmiş bir önyükleyicidir. Geliştirilen on kurulum
programı, kullanıcının işini büyük ölçüde kolaylaştırır. Kurulumdan sonra, veri işleme ve
raporlama dahil olmak üzere bu süreçlerle ilgili 100'den fazla kütüphaneye otomatik olarak
erişebilirsiniz.

Aynı zamanda, conda yükleyicisi sayesinde 600'den fazla kitaplık kolayca kurulabilir.
6 milyondan fazla kullanıcısı olan açık kaynaklı Anaconda dağıtımı, Python veri bilimi ve
makine öğrenimi yapmanın en kolay yoludur. Windows, Linux ve MacOS için 250'den fazla
popüler veri bilimi kitaplığı ve sanal ortam yöneticisi içerir. Conda, Scikit-learn, TensorFlow ve
SciPy gibi karmaşık veri bilimi ve makine öğrenimi ortamlarını hızlı ve kolay bir şekilde
kurabilir, çalıştırabilir ve yükseltebilir. Anaconda (Python) bootloader'ı ana bilgisayarımızda
kullanmayı tercih ediyoruz çünkü ihtiyacımız olan kütüphaneleri Python programlama dilinde
tek tek yüklemekle zaman kaybediyor.

33
5.5. TensorFlow

TensorFlow, Google tarafından 2015 yılında piyasaya sürülen ve geliştiricilerin derin


öğrenme modelleri tasarlamasını, üretmesini ve eğitmesini kolaylaştırmayı amaçlayan açık
kaynaklı bir yazılım kitaplığıdır. TensorFlow, Google geliştiricileri tarafından dahili modeller
oluşturmak için kullanılan dahili bir kitaplıktan kaynaklanmıştır ve bir açık kaynak sürümü
vardır. TensorFlow, geliştiricilere sunulan çeşitli seçeneklerden yalnızca biri olmasına rağmen,
düşünceli tasarımı ve kullanım kolaylığı nedeniyle tercih edilmektedir.

TensorFlow, kullanıcıların rastgele hesaplamaları veri akışı grafikleri olarak if 1ade


etmelerini sağlayan üst düzey bir Python kitaplığıdır. Grafikteki düğümler matematiksel
işlemleri temsil eder ve kenarlar bir düğümden diğerine iletilen verileri temsil eder.
TensorFlow'daki veriler, çok boyutlu bir dizi olan bir tensör olarak temsil edilir. Bu bilgi işlem
çerçevesi birçok farklı alanda değerli olsa da, TensorFlow esas olarak uygulama ve
araştırmalarda derin öğrenme için kullanılır. Geliştirme için TensorFlow'u kullanmak için
Python sürümümüzün 3.5.x veya üstü olması gerekir. Kurulumu pip install komutu ile yapılır.

Hepimizin bildiği gibi bu kütüphaneler GPU için de uygundur, NVIDIA marka GPU
kullanıyorsanız GPU sürümünü yüklemeniz gerekir. Kurulum komutu aşağıda gösterilmiştir.

CPU1 Sürümü için;

Pip4 install --upgradee tensorflow

GPU1 Sürümü;

Pip4 install --upgradee tensorflow-gpu1

TensorFlow, doğrudan Linux, MACOS ve Windows üzerine kurulabilir. TensorFlow'un


en temel özelliği, YSA'nın büyük veri kümelerinde hızlı iletimini gerçekleştirebilen çok
katmanlı bir düğüm sistemidir. Bu sayede Google'ın ses, nesne tanıma ve diğer işlevleri
güçlendirilmiştir. Alternatif 1ler arasında Caffe, Torch, Keras, Theano, deeplearning4j vb.
bulunur. Bu bir kütüphanedir.

5.6. OpenCV

OpenCV (Open Source Computer Vision), açık kaynaklı bir görüntü işleme kitaplığıdır.
1999 yılında Intel tarafından geliştirilmiş olup, Itseez, Willow, Nvidia, AMD, Google vb. şirket
ve toplulukların desteği ile geliştirme süreci devam etmektedir. İlk sürüm olan OpenCV alpha
2000 yılında piyasaya sürüldü.

34
Başlangıçta C dilinde geliştirildi ve daha sonra C++'da birçok algoritma geliştirildi.
BSD lisansı altında geliştirilmiş açık kaynak kodlu bir kütüphanedir. BSD lisansına sahip olmak,
bu kütüphaneyi istediğiniz herhangi bir projede ücretsiz olarak kullanabileceğiniz anlamına
gelir. OpenCV, platformdan bağımsız bir kütüphanedir, bu nedenle Windows, Linux, FreeBSD,
Android, Mac OS ve iOS platformlarında çalışabilir. OpenCV uygulamalarını C++, C, Python,
Java, Matlab, EmguCV kitaplıkları, Visual Basic.Net, C# ve Visual C++ dilleri ve farklı
topluluklar tarafından geliştirilen sarmalayıcılar aracılığıyla kolayca geliştirmek için Perl ve
Ruby programlama dillerini kullanabilirsiniz.

Şekil 5.1:Yıllara Göre OpenCV

Alternatif 1 Görüntü İşleme Kütüphaneleri: Görüntü işleme projesinde kullanılacak


kütüphaneyi amacınıza göre seçmeniz çok önemlidir. Bu seçimi yaparken ne yapmak
istediğinize karar vermelisiniz. Örneğin, bir kameradan (usb, ip vb.) görüntü almak için
OpenCV'yi projenize entegre etmeniz gerekmeyebilir. Bu durumu ve OpenCV'nin neden iyi
olduğunu anlamak için alternatif 1 olarak bir görüntü işleme kütüphanesine bakalım.

MATLAB:Matlab'ı görüntü işleme kitaplığı olarak adlandırmak yanlıştır, ancak


görüntü işlemenin temel algoritmalarını içerir ve dördüncü nesil çok amaçlı bir programlama
dilidir. Akademik araştırmalarınızda performans önemli değil, Matlab kullanarak uygulamalar
geliştirmek için temel görüntü işlemeyi seçebilir veya OpenCV kütüphanesi ile etkileşime
geçebilirsiniz.

Halcon: Çeşitli programlama dillerinin (C, C++, VS C++, C#, VB.NET) kütüphaneleri
ve kendi geliştirme ortamı ile yapay görme endüstriyel projeler için tercih edilen ticari
yazılımdır. Hızlı uygulama geliştirme için birçok hazır fonksiyon içerir. OpenCV, bilgisayar
vizyonuna odaklanan açık kaynaklı ücretsiz bir kütüphanedir. Halcon'dan bu açılardan farklıdır.

35
OpenFrameworks: Proje, C++ programlama dili için açık kaynaklı bir kitaplık olarak
geliştirildi ve OS X, Linux, Embedded Linux (ARM), iOS ve Android platformlarında
çalışabilir. OpenCV kütüphanesinin birçok algoritmasını kullanır ve temel amacı, uygulamaları
kolay ve hızlı bir şekilde geliştirmektir. Örneğin, OpenCV'yi 2t'de 1t'lik bir işi tamamlamak için
kullanabilirsiniz, çünkü temel olarak birçok işlevi (nesne algılama, renk izleme algılama,
karşılaştırma vb.) standartlaştırılmış işi tek satırda tamamlayabilir.

CIMG: Açık kaynaklı bir görüntü işleme kütüphanesidir. Windows, Linux ve OS X


platformları için uygundur. Yalnızca C++'ı destekler, ancak sarmalayıcılar yazarak uygulama
geliştirmek için Java ve Python'u da kullanabilirsiniz. Birçok algoritma içerir ancak OpenCV'nin
performansına ve kapsamlı algoritma altyapısına sahip değildir.

Fiji: Java platformu için geliştirilmiş açık kaynak kodlu GPL lisanslı görüntü işleme
kitaplığıdır. Windows, Linux ve MAC OSX Intel 32-bit veya 64-bit üzerinde çalışır. Bilimsel
görüntü analizi için geliştirilmiştir. Özel algoritmalar genetik, hücre biyolojisi, sinirbilim ve
diğer alanlarda kullanılabilir.

OpenCV İçin Platform Ve Geliştirme Ortamı Seçimi

Birçok OpenCV türü, doğrudan grafik kartı sürücülerini kullanır. Grafik sürücüsü
platforma göre değişir. Örneğin OpenCV 3.x sürümü, Windows işletim sisteminde Nvidia
ekran kartı kullanan bazı sistemlerde mavi ekran denen bir hataya neden olacaktır. Bu hata,
grafik kartını kullanan sınıfın belirli işlevleri çalıştırıldığında ortaya çıkıyor.OpenCV Soru-
Cevap web sitesinde birçok kişinin bu sorundan şikayet ettiğini görebilirsiniz. Şu ana kadar
Linux ve Mac platformlarında böyle bir hata oluşmadı.

Gömülü sistemler arasında Raspberry pi, OrangePi, Beaglebone, Banana Pi vb.


bulunur. Karttaki işletim sistemini seçme konusunda daha önceki tecrübelerime dayanarak
Debian Linux fork işletim sisteminin daha verimli olduğu söylenir.

Bu kitaptaki uygulamalar Java programlama dilinin koruması altında Eclipse,


Netbeans ve Android Studio kullanılarak geliştirilmiştir. Java öğrenmeye yeni başlıyorsanız,
bu öneriler tam size göre. Grafik kullanıcı arayüzü (GUI) ile etkileşimli uygulamalar
geliştirmek istiyorsanız Netbeans IDE kullanabilirsiniz. Hızlı kod geliştirme ve grafiksel
olmayan uygulamalar için Eclipse IDE'yi tercih edebilirsiniz. Acemi iseniz, Eclipse IDE ve
Netbeans'i kullanabilirsiniz. Bu kitaptaki mobil Android uygulama örnekleri Android Studio

36
kullanılarak geliştirilmiştir. OpenCV'nin nasıl kurulacağını ve tüm geliştirme ortamları için
nasıl kurulacağını açıklayacaktır.

5.7. NumPy
Bilimsel temelli hesaplamalar yapmak için Python'u kullanabilen bir kütüphanedir.
NumPy'yi kullanarak diziler ve matrisler üzerindeki işlemleri kolayca tamamlamak için Python
dilini kullanabilirsiniz. Ayrıca kütüphanenin bir özelliği olarak, kütüphanenin kendisine özgü
fonksiyonlar (Fourier dönüşümü, lineer cebir işlemleri, tek tip rasgele sayı dağılımı, düzgün
olmayan sayı dağılımı vb.) dahil olmak üzere N boyutlu dizi nesneleri üzerinde çalışabilir, ve
C/C++ ve Fortran kod entegrasyonu, çalışabilen bir kütüphanedir.
5.8. Pygame

RASPBERRY Pİ kullanıcıları tarafından bağlı oldukları bilgisayardaki klavyeye


erişmek için kullanılır ve otonom araçların pistte eğitimleri sırasında klavye üzerinden manuel
kullanıma olanak tanır.

5.9. Pillow-Python Image Images


Python'da fotoğraf dosyalarını oynatmak için tercih edilen modüldür. Kullanımı son
derece basittir, belgelerinin anlaşılması diğerlerinden daha kolaydır ve topluluk olarak daha
büyük bir topluluğa sahiptir.
5.10. Picamera

CSI aracılığıyla PiCamera'nın kontrolünü sağlayın. Bu kütüphane sayesinde Raspberry


pi üzerinde kullandığımız kamera ayarlarına erişim ve değiştirme imkanı sağlamaktadır.

6. MLP(AUTO)TRAİNİNG

Uygulama aşamamızda Raspberry pi ve host bilgisayara gerekli programlar yüklenip


kodu iletildikten sonra direksiyon dönüş açısı ve gaz tepkisi kalibre ve ayarı yapılır, otopilot için
yörünge bilgisi eğitimi, manuel otomatik sürüş eğitimi ve eğitim dosyası iletim Ana bilgisayara
aktarılan ve Python üzerinde Tensorflow kullanılarak veri dosyasının görüntü işleme süreci,
eğitimli otopilot görüntü dosyası Raspberry pi'ye aktarılır ve parkuru kontrol etmek için RC
sürücüsüz arabanın Python üzerindeki davranışı şekil 7.1 de görüldüğü gibidir.

37
Şekil 7.1:MLP training

(İlgili kodlar EK3.’dedir)

38
Şekil7.2: Npz dosyası

6.1. Otopilot Eğitim

İlk önce araca komut göndermek için arduino bağlantımız olan, kamera yayını (stream)
yapan ve her yön tuşlarına bastığımda kameranın görüntüsünde bastığımız tuşu eşleştiren ve eğitim
boyunca yaklaşık 70 fotoğraf çeken bir program kullanılmıştır. Bu programın çıktısı olan komut
başı fotoğraflardan oluşan .npz uzantılı dosyalarını yapay zekayı beslemekte kullanıldı. (İlgili kod
EK4.’dedir.)

Oluşturduğumuz dosyaların isimlerini belirtmek için aşağıda belirtildiği üzere şekil


7.1’de gösterilmiştir
39
Şekil7.3: Dosyaların kayıt edildiği yer

Oluşturduğumuz .xml dosyasını test etmek için sürüş programına atadıktan sonra
eğitilmiş dosyasını arduino ve Raspberry pi vasıtasıyla aracımızı iki çizgi arasında kalmasını
sağlanmıştır.

Düz yolda ileri, virajlarda sağa ileri ve sola ileri olmak üzere 3 komut ile yolu
ortalamaya çalışacak. Yoldan çıkması durumunda kamera açısında ise tekrar iki çizgi arasına
girecektir.

Şekil7.4: Eğitim Aşaması

40
Şekil7.5:Otonom sürüşte eğitilen yapay zekanın arduino komut göndermesi

6.2. Kaskat Sınıflandırıcı


Haarcascade sınıflandırıcıyı opencv kütüphanesinde bulabilirsiniz; bu sorunu çözmek
için Paul Viola ve Michael Jones tarafından oluşturulmuştur. Ayrıca Viola ve Jones nesne
algılama çerçevesi olarak da bilinir. En temel anlamda, önce belirli bir algoritmaya göre
bulmak istediğiniz nesneyi bilgisayara tanıtın ve ardından nesneyi bulmaya çalışmak için
benzer şekillere sahip resim veya vıdeo karelerinin içi taranır.

41
Şekil 7.6:Kaskat Sınıflandırıcı Kodu

42
Şekil 7.7: Kaskat Sınıflandırıcının Davranış Fonksiyonu

43
Şekil 7.8:Stop tabelasının kadrajı

44
KAYNAKÇA
1) Gürtaş, S. (2020). Otonom araç sürüş destek sistemleri ve yapay zeka uygulamaları.
Yayınlanmamış yüksek lisans tezi. Bursa Uludağ Üniversitesi Fen Bilimleri Enstitüsü.

2)Hobday, Simon., (20.09.2015), Driverless cars: applying existing laws to innovative

technologies won’t work,

3)Thierer, Adam., Hagemann, Ryan., (20.09.2015), Removing Roadblocks to Intelligent

Vehicles and Driverless Cars,

4)Dr.YETİM S. , (27.11.2015) , Sürücüsüz Araçlar Ve Getirdiği / Getireceği Hukuki


Sorunlar

5)Godsmark, Paul., Sniman, Gabriel., (20.09.2015), Driving The Market,

Mission Critical, Volume:3, No:2, May 2013 p.20

6)Gillmor, Dan., (20.09.2015), Google’s Driverless Cars Are A Boon For Safety And

Climate, But Not For Privacy

7)Harris, Mark., (20.09.2015), FBI Warns Driverless Cars Could Be Used As

‘Lethal Weapons’

8)Winfield, Alan., (20.09.2015), The Next Big Thing(s) In Robotics, p.41

9)GÜRTAŞ S., (28.01.2020) , OTONOM ARAÇ SÜRÜŞ DESTEK SİSTEMLERİ VE


YAPAY ZEKA UYGULAMALARI p.3

10) Gökaşar, I., & Dündar, S. Sürücüsüz taşıtların trafik akım hızına etkisinin yapay sinir
ağları ile incelenmesi. Akıllı Ulaşım Sistemleri ve Uygulamaları Dergisi, 1(2), 59-75.

45
11)González, D., Pérez, J., Milanés, V., & Nashashibi, F. (2016). A Review of Motion
Planning

Techniques for Automated Vehicles. IEEE Trans. Intelligent Transportation Systems,


17(4),

1135p-1145p.

12)Chung, S.-Y., & Huang, H.-P. (2011). Robot motion planning in dynamic uncertain

environments. Advanced Robotics, 25(6-7), 849p-870p.

13)Du Toit, N. E., & Burdick, J. W. (2012). Robot motion planning in dynamic, uncertain

environments. IEEE Transactions on Robotics, 28(1), 101p-115p.

14)Shladover, S. E., Desoer, C. A., Hedrick, J. K., Tomizuka, M., Walrand, J., Zhang,
W.-B.,

McKeown, N. (1991). Automated vehicle control developments in the PATH program.


IEEE

Transactions on vehicular technology, 40(1), 114p-130p.

15)Behringer, R., & Muller, N. (1998). Autonomous road vehicle guidance from
autobahnen to

narrow curves. IEEE Transactions on Robotics and Automation, 14(5), 810p-815p.

16)Noto, M., & Sato, H. (2000). A method for the shortest path search by extended
Dijkstra

algorithm. IEEE International Conference on Systems, Man, and Cybernetics, 2000.

17)Anderson, S. J., Karumanchi, S. B., & Iagnemma, K. (2012). Constraint-based


planning and

control for safe, semi-autonomous operation of vehicles. Intelligent Vehicles Symposium

(IV), IEEE.

18)Berber, E., (2008), “Mikrodenetleyicili Endüstriyel Otomatik Sıcaklık

Ölçüm ve Kontrol Sistemi”, Yüksek Lisans Tezi, Yıldız Teknik Üniversitesi, Fen
Bilimleri Enstitüsü, İstanbul.

46
19)ÖZCAN F.Ö, YÜCE A. , TAN N. , (24.08.2018), LabVIEW ve Raspberry pi 3
Kullanarak Gerçek Zamanlı Sıcaklık

Ölçüm Sistemi İnöünü Üniversitesi, Mühendislik Fakültesi, Elektrik-Elektronik


Mühendisliği Bölümü, Malatya, Türkiye

20)KIYICI İ., (09.01.2020), AKILLI, OTONOM VE KORUMALI PRİZ , T.C.


PAMUKKALE ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ ELEKTRİK-ELEKTRONİK
MÜHENDİSLİĞİ ANABİLİM DALI

21)Yrd.Doç.Dr. Aybars Uğur, Kınacı A. , (23.12.2006) , Yapay Zeka Teknikleri ve Yapay


Sinir Ağları Kullanılarak Web Sayfalarının Sınıflandırılması TOBB Ekonomi ve Teknoloji
Üniversitesi, Ankara

22) . Bilgin, S., (2008) “Kalp Hızı Değişkenliğinin Dalgacık Dönüşümü ve Yapay Sinir
Ağları Kullanılarak Analizi”, Doktara Tezi, Sakarya Üniversitesi Fen Bilimleri Enstitüsü, Sakarya.

23) Kohonen T., (1987), ‘State Of The Art In Neural Computing’, IEEE First
International Conference on Neural Networks, 1, 79-90.
24) Gülbağ, A., (2006). “Yapay Sinir Ağı ve Bulanık Mantık Tabanlı Algoritmalar ile
Uçucu Organik Bileşiklerin Miktarsal Tayini”, Doktora Tezi, Sakarya Üniversitesi Fen Bilimleri
Enstitüsü, Sakarya.
25)ÖZDEN O.B. Özel Amaçlı Elektrikli Bir Kara Aracının Tasarımı ve Prototipinin
Geliştirilmesi, Afyon Kocatepe Üniversitesi Fen Bilimleri Enstitüsü, 2018

47
EKLER
EK1.
int forward_pin = 6;
int reverse_pin = 7;
int left_pin = 8;
int right_pin = 9;

// Initial command
int command = 0;

// PPWM Durations (in ms)


int on_time = 30;
int off_time = 70;

void setup() {
// Set pins to OUTPUT mode
pinMode(forward_pin, OUTPUT);
pinMode(reverse_pin, OUTPUT);
pinMode(left_pin, OUTPUT);

48
pinMode(right_pin, OUTPUT);

Serial.begin(115200);
}

void loop() {
if 1 (Serial.available() > 0)
{
command = Serial.read();
}
else
{
reset();
}

drive(command);
}

void reset()
{
digitalWrite(forward_pin, HIGH);
digitalWrite(reverse_pin, HIGH);
digitalWrite(left_pin, HIGH);
digitalWrite(right_pin, HIGH);
}

// alternatively try 40/60, 250/500


void forward(int complex)
{
if 1(complex == 0)
{
digitalWrite(reverse_pin, HIGH);
digitalWrite(left_pin, HIGH);
digitalWrite(right_pin, HIGH);

49
}

digitalWrite(forward_pin, LOW);
delay(on_time);
}

// alternatively try: 50/50


void reverse(int complex)
{
if 1(complex == 0)
{
digitalWrite(forward_pin, HIGH);
digitalWrite(left_pin, HIGH);
digitalWrite(right_pin, HIGH);
}

digitalWrite(reverse_pin, LOW);
delay(on_time);
}

void left()
{
digitalWrite(forward_pin, HIGH);
digitalWrite(reverse_pin, HIGH);
digitalWrite(left_pin, LOW);
digitalWrite(right_pin, HIGH);
delay(on_time);
}

void right()
{
digitalWrite(forward_pin, HIGH);
digitalWrite(reverse_pin, HIGH);
digitalWrite(left_pin, HIGH);

50
digitalWrite(right_pin, LOW);
delay(on_time);
}

void forward_right()
{
digitalWrite(reverse_pin, HIGH);
digitalWrite(left_pin, HIGH);
digitalWrite(right_pin, LOW);
forward(1);
}

void forward_left()
{
digitalWrite(reverse_pin, HIGH);
digitalWrite(left_pin, LOW);
digitalWrite(right_pin, HIGH);
forward(1);
}

void reverse_right()
{
digitalWrite(reverse_pin, HIGH);
digitalWrite(left_pin, HIGH);
digitalWrite(right_pin, LOW);
reverse(1);
}

void reverse_left()
{
digitalWrite(reverse_pin, HIGH);
digitalWrite(left_pin, LOW);
digitalWrite(right_pin, HIGH);

51
reverse(1);
}

void drive(int command)


{
switch(command)
{
case 48: reset(); break;
case 49: forward(0); break;
case 50: reverse(0); break;
case 51: right(); break;
case 52: left(); break;
case 53: forward_right(); break;
case 54: forward_left(); break;
case 55: reverse_right(); break;
case 56: reverse_left(); break;
default: break;
}
}

EK2.

# termination criteria
criteria = (cv2...TERM_CRITERIA_EPS + cv2...TERM_CRITERIA_MAX_ITER, 30,
0.001)

# 6x9 chess board, prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)
object_point = np.zeros((6*9, 3), np.float32)
object_point[:, :2] = np.mgrid[0:9, 0:6].T.reshape(-1, 2)

# 3d point in real world space


object_points = []
# 2d points in image plane
image_points = []

52
h, w = 0, 0

images = glob.glob('chess_board/*.jpg')

for file_name in images:


image = cv2...imread(file_name)
gray = cv2...cvtColor(image, cv2...COLOR_BGR2GRAY)
h, w = gray.shape[:2]

# find chess board corners


ret, corners = cv2...findChessboardCorners(gray, (9, 6), None)

# add object points, image points


if 1 ret:
object_points.append(object_point)
cv2...cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria)
image_points.append(corners)

# draw and display the corners


cv2...drawChessboardCorners(image, (9, 6), corners, ret)
cv2...imshow('image', image)
cv2...waitKey(500)

# calibration
retval, cameraMatrix, distCoeffs, rvecs, tvecs = cv2...calibrateCamera(object_points,
image_points, (w, h), None, None)

print("camera matrix:\n", cameraMatrix)

# pi camera intrinsic parameters


ay = cameraMatrix[1, 1]
u0 = cameraMatrix[0, 2]
v0 = cameraMatrix[1, 2]
print("Ay:", ay)

53
print("u0:", u0)
print("v0:", v0)

cv2...destroyAllWindows()
EK3.

import cv2..
import glob
import numpy as np
from sklearn.model_selection import train_test_split
import sys
import time

def retrieve_data_set():

start_time = cv2...getTickCount()

print("Veri seti yükleniyor..")

image_array = np.zeros((1, 38400), 'float')


label_array = np.zeros((1, 4), 'float')

# veri çekme
data_set = glob.glob("data_set/*.npz")

if 1 not data_set:
print("Yeterince eğitim verisi yok!!")
sys.exit()

for single_npz in data_set:


with np.load(single_npz) as data:

54
temp_images = data["images"]
temp_labels = data["labels"]

image_array = np.vstack((image_array, temp_images))


label_array = np.vstack((label_array, temp_labels))

X = np.float32(image_array[1:, :])
Y = np.float32(label_array[1:, :])
print("Görüntü dizisi: {0}".format(X.shape))
print("Görüntü biçimi: {0}".format(Y.shape))

end_time = cv2...getTickCount()
print("Veri seti süresi: {0}"
.format((end_time - start_time) // cv2...getTickFrequency()))

return X, Y

if 1 __name__ == '__main__':
X, Y = retrieve_data_set()

train_X, test_X, train_Y, test_Y = train_test_split(X, Y, test_size=0.2)

# MLP modeli oluşturma ve trainleme


start_time = cv2...getTickCount()

layer_sizes = np.int32([38400, 32, 4])


model = cv2...ml.ANN_MLP_create()
model.setLayerSizes(layer_sizes)
model.setTrainMethod(cv2...ml.ANN_MLP_BACKPROP)
model.setBackpropMomentumScale(0.0)
model.setBackpropWeightScale(0.001)

55
model.setTermCriteria((cv2...TERM_CRITERIA_COUNT |
cv2...TERM_CRITERIA_EPS, 500, 0.0001))
model.setActivationFunction(cv2...ml.ANN_MLP_SIGMOID_SYM, 2, 1)

print("MLP eğitiliyor")
model.train(train_X, cv2...ml.ROW_SAMPLE, train_Y)

end_time = cv2...getTickCount()
duration = (end_time - start_time) // cv2...getTickFrequency()
print("Eğitim süresi: {0}".format(duration))

# Eğitim hata payı


ret_train, resp_train = model.predict(train_X)
train_mean_sq_error = ((resp_train - train_Y) * (resp_train - train_Y)).mean()
print("Eğitim hata payı: {0:.2f}".format(train_mean_sq_error * 100))

# Hata payları
ret_test, resp_test = model.predict(test_X)
test_mean_sq_error = ((resp_test - test_Y) * (resp_test - test_Y)).mean()
print("Veri toplama hata payı: {0:.2f}".format(test_mean_sq_error * 100))

model.save("mlp_xml/mlp_{0}.xml".format(str(int(time.time()))))

import cv2..
import numpy as np
import scoket
import struct
import pygame
from pygame.locals import *
from Bitirme.Test.utils import serverz_address
import time
56
import os
import sys
import serial

class1 CollectData(object):
def __init__(sellf):
# Arudino komutlarını alıcak soket port açmamız gerekiyor
sellf.sock = scoket.scoket()
sellf.sock.bind(serverz_address)
sellf.sock.listen(1)

sellf.connection = sellf.sock.accept()[0].makefile('rb')

# Connect to the serial port


try:
sellf.ser = serial.Serial('COM3', 115200, timeout=1 )
except IOError as e:
print(e)
sys.exit()

sellf.ser.flush()
sellf.send_instr = True

sellf.k = np.zeros((4,4), 'float')


for i in range(4):
sellf.k[i,i] = 1

# Girdilerin algılanacağı pygame ekranı


pygame.init()
pygame.display.set_mode((400, 300))

sellf.collect_images()

57
def collect_images(sellf):
saved_frames = 0
total_frames = 0
start_time = cv2...getTickCount()

print('Veri toplanıyor..')
image_array = np.zeros((1, 38400), 'float')
label_array = np.zeros((1, 4), 'float')

# Fotoğraf çekme
try:
frame = 1
complex_cmd = False

while sellf.send_instr:
# Get frame
image_len = struct.unpack('<L', sellf.connection.read(struct.calcsize('<L')))[0]
if 1 not image_len:
break

recv_bytes = b''
recv_bytes += sellf.connection.read(image_len)
image = cv2...imdecode(np.frombuffer(recv_bytes, dtype=np.uint8),
cv2...IMREAD_GRAYSCALE)

# save image
# cv2...imwrite('collected_images/frame{:>05}.jpg'.format(frame), image)

# Show the frame


cv2...imshow('Vıdeo', image)

# get ROI- lower half of the image (height, width, channel= no channel for
greyscale)

58
roi = image[120:240, :]
cv2...imshow('Vıdeo', roi)

# Fotoğraflar tek bir sütun olacak şekilde ayarlanır


temp_array = roi.reshape(1, 38400).astype(np.float32)

frame += 1
total_frames += 1

# Get driver input


for event in pygame.event.get():
if 1 event.type == KEYDOWN or complex_cmd:
key = pygame.key.get_pressed()
complex_cmd = False
# only save the images where there is user action
cv2...imwrite('collected_images/frame{:>05}.jpg'.format(frame), image)

if 1 key[pygame.K_UP] and key[pygame.K_RIGHT]:


print("Forward Right")
complex_cmd = True
sellf.ser.write(b'5')
image_array = np.vstack((image_array, temp_array))
label_array = np.vstack((label_array, sellf.k[1]))
saved_frames += 1

elıf key[pygame.K_UP] and key[pygame.K_LEFT]:


print("Forward Left")
complex_cmd = True
sellf.ser.write(b'6')
image_array = np.vstack((image_array, temp_array))
label_array = np.vstack((label_array, sellf.k[0]))
saved_frames += 1

59
elıf key[pygame.K_DOWN] and key[pygame.K_RIGHT]:
print("Reverse Right")
complex_cmd = True
sellf.ser.write(b'7')

elıf key[pygame.K_DOWN] and key[pygame.K_LEFT]:


print("Reverse Left")
complex_cmd = True
sellf.ser.write(b'8')

elıf key[pygame.K_UP]:
print("Forward")
# sellf.ser.write(b'0')
sellf.ser.write(b'1')
image_array = np.vstack((image_array, temp_array))
label_array = np.vstack((label_array, sellf.k[2]))
saved_frames += 1

elıf key[pygame.K_DOWN]:
print("Reverse")
# sellf.ser.write(b'0')
sellf.ser.write(b'2')
image_array = np.vstack((image_array, temp_array))
label_array = np.vstack((label_array, sellf.k[3]))
saved_frames += 1
print("Reverse")

elıf key[pygame.K_RIGHT]:
print("Right")
# sellf.ser.write(b'0')
sellf.ser.write(b'3')
image_array = np.vstack((image_array, temp_array))
label_array = np.vstack((label_array, sellf.k[1]))
saved_frames += 1

60
elıf key[pygame.K_LEFT]:
print("Left")
# sellf.ser.write(b'0')
sellf.ser.write(b'4')
image_array = np.vstack((image_array, temp_array))
label_array = np.vstack((label_array, sellf.k[0]))
saved_frames += 1

elıf key[pygame.K_x] or key[pygame.K_q]:


print("Exit")
sellf.ser.write(b'0')
sellf.send_instr = False
break

else:
sellf.ser.write(b'0')

elıf event.type == KEYUP:


complex_cmd = False
sellf.ser.write(b'0')

# Save images and labels


image_array = image_array[1:, :]
label_array = label_array[1:, :]

file_name = str(int(time.time()))
directory = "data_set"
if 1 not os.path.exists(directory):
os.makedirs(directory)

try:
np.savez(directory + '/' + file_name + '.npz', images=image_array,
labels=label_array)

61
except IOError as e:
print(e)

# Print meta data


end_time = cv2...getTickCount()
duration = end_time - start_time // cv2...getTickFrequency()
print("Streaming duration: {0}".format(duration))
print(image_array.shape)
print(label_array.shape)
print("Total frames: {0}".format(total_frames))
print("Saved frames: {0}".format(saved_frames))
print("Dropped frames: {0}".format(total_frames - saved_frames))

finally:
sellf.connection.close()
sellf.sock.close()

if 1 __name__ == '__main__':
CollectData()

EK4.

import cv2..
import math
import numpy as np
import threading
import scoketserverz

import serial
import struct

# Mesafe sensörü
sensor_data = None

62
class1 SensorStreamHandler(scoketserverz.BaseRequestHandler):
data = " "

def handle(sellf):
global sensor_data
try:
while sellf.data:
sellf.data = sellf.request.recv(1024)
sensor_data = round(float(sellf.data), 1)
print(f"Dist: {sensor_data}")
finally:
print("Connection closed on sensor serverz thread!")

class1 NeuralNetwork():
def __init__(sellf):
sellf.model = cv2...ml.ANN_MLP_load('mlp_xml/mlp_1611963015.xml')

def predict(sellf, samples):


ret, resp = sellf.model.predict(samples)
return resp.argmax(-1)

class1 RCControl(object):
def __init__(sellf):
sellf.ser = serial.Serial('COM3', 115200, timeout=1)

def steer(sellf, prediction):


if 1 prediction == 0:
sellf.ser.write(b'6')
print("Sol ileri")

63
elıf prediction == 1:
sellf.ser.write(b'5')
print("Sağ ileri")

elıf prediction == 2:
sellf.ser.write(b'1')
print("İleri")

else:
sellf.stop()

def stop(sellf):
sellf.ser.write(b'0')

class1 ObjectDetection(object):
def __init__(sellf):
sellf.red_light = False
sellf.green_light = False

def detect(sellf, class1if 1ier, image, gray):


# Kameradan mesafe algılama için gerekli parametreler

v=0

# Işık yoğunluğu değerleri ve Trafik ışığı algılama

threshold = 150

# Cisim algılama
objects = class1if 1ier.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5,
minSize=(30, 30))

# Cisimlerin etrafını çizme

64
for (x, y, w, h) in objects:
cv2...rectangle(image, (x + 5, y + 5), (x + w - 5, y + h - 5), (255, 255, 255), 2)
v=y+h-5

#print(f"width/height is: {w/h}")


# Stop sign
if 1 w / h == 1:
cv2...putText(image, 'DUR TABELASI', (x, y - 10),
cv2...FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)

# Trafik ışığı
else:
roi = gray[y + 10: y + h - 10, x + 10: x + w - 10]

# Işık yoğunluğunu algılamak için Gauss filtresi uygulama

mask = cv2...GaussianBlur(roi, (25, 25), 0)


(minVal, maxVal, minLoc, maxLoc) = cv2...minMaxLoc(mask)

# Işık yoğunluğuna bakarak trafik ışığını algılama


if 1 maxVal - minVal > threshold:
cv2...circle(roi, maxLoc, 5, (255, 0, 0), 2)

# Kırmızı ışık
if 1 1.0 / 8 * (h - 30) < maxLoc[1] < 4.0 / 8 * (h - 30):
cv2...putText(image, 'Kırmızı', (x + 5, y + 5),
cv2...FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255), 2)
sellf.red_light = True

# Yeşil ışık
if 1 5.5 / 8 * (h - 30) < maxLoc[1] < h - 30:
cv2...putText(image, 'Yeşil', (x + 5, y + 5),
cv2...FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255), 2)
sellf.green_light = True

65
return v

class1 DistanceToCamera(object):
def __init__(sellf):
# Kamera kalibrasyon parametreleri (picamcalib)
sellf.alpha = 8.0 * math.pi / 180
sellf.v0 = 119.907788
sellf.ay = 332.213306

def calculate(sellf, v, h, x_shif 1t, image):


"""Pi kamerasından cizmin yüksekliğini ve uzaklığını hesaplayan parametreler """
d = h / math.tan(sellf.alpha + math.atan((v - sellf.v0) / sellf.ay))

if 1 d > 0:
cv2...putText(image, f"{d:.1f}cm", (image.shape[1] - x_shif 1t, image.shape[0] -
20),
cv2...FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2)
#cv2...imshow('vıdeo', image)
return d

class1 VıdeoStreamHandler(scoketserverz.StreamRequestHandler):
# Cisim tanımak için gerekli Cascade Classif 1iers (haar cascade filters)
stop_class1if 1ier = cv2...CascadeClassif 1ier('cascade_class1if 1iers/stop.xml')
light_class1if 1ier = cv2...CascadeClassif 1ier('cascade_class1if
1iers/traffic_light.xml')

# Cisim tanıma örneği


obj_detection = ObjectDetection()

# Cisimlerin kameraya tahmini uzaklığı


dist_to_camera = DistanceToCamera()

66
h_stop = 4.5 # cm
h_light = 4.5 # cm
d_stop = 35
d_light = 35
stop_start = 0
stop_finish = 0
stop_time = 0

# Yapay sinir ağı oluşturma


model = NeuralNetwork()
drive_time_after_stop = 0
car = RCControl()

def handle(sellf):
global sensor_data
stop_sign_active = True
stop_flag = False

# drive_time_after_stop = 0

# Elde edilen vıdeo kareleri harekete karar vermesi için incelenir


try:
while True:
image_len = struct.unpack('<L', sellf.rfile.read(struct.calcsize('<L')))[0]
if 1 not image_len:
break

recv_bytes = b''
recv_bytes += sellf.rfile.read(image_len)

gray = cv2...imdecode(np.frombuffer(recv_bytes, dtype=np.uint8),


cv2...IMREAD_GRAYSCALE)
image = cv2...imdecode(np.frombuffer(recv_bytes, dtype=np.uint8),
cv2...IMREAD_COLOR)

67
# Kameranın saadece yol kısmını görmesi için istediğimiz alanı roı değerleri
ile ayarlarız
roi = gray[120:240, :]
cv2...imshow('Vıdeo', roi)
# Reshape ROI
image_array = roi.reshape(1, 38400).astype(np.float32)

# Cisim algılama
v_stop = sellf.obj_detection.detect(sellf.stop_class1if 1ier, image, gray)
v_light = sellf.obj_detection.detect(sellf.light_class1if 1ier, image, gray)

# Mesafe hesabı
if 1 v_stop > 0.0 or v_light > 0.0:
d_stop = sellf.dist_to_camera.calculate(v_stop, sellf.h_stop, 300, image)
d_light = sellf.dist_to_camera.calculate(v_light, sellf.h_light, 100, image)
sellf.d_stop = d_stop
sellf.d_light = d_light

# Yapay zekanın tahmin yapması için fonksiyon


prediction = sellf.model.predict(image_array)

# Durma ve çarpışma hesabı


if 1 sensor_data and int(sensor_data) < 30.0:

sellf.car.stop()
print("Engel algiland,. Mesafe: {0:.1f}cm".format(sensor_data))

elıf 0.0 < sellf.d_stop < 35 and stop_sign_active:


print('Dur tabelası algılandı, 5 saniye bekleniyor')
sellf.car.stop()

# 5 saniye dur
if 1 stop_flag is False:

68
stop_start = cv2...getTickCount()
stop_flag = True

stop_finish = cv2...getTickCount()
stop_time = (stop_finish - stop_start) / cv2...getTickFrequency()
print(f"Bekleme süresi: {stop_time}")

# 5 saniye sonra harekete geçme


if 1 stop_time > 5:
stop_flag = False
stop_sign_active = False
print("Kalkış")

elıf 0.0 < sellf.d_light < 35.0:


if 1 sellf.obj_detection.red_light:
print("Kırmızı Işık")
sellf.car.stop()
elıf sellf.obj_detection.green_light:
print("Green light")
pass

sellf.obj_detection.red_light = False
sellf.obj_detection.green_light = False
sellf.d_light = 35.0

else:
sellf.car.steer(prediction)
sellf.d_stop = 35.0
stop_start = cv2...getTickCount()

if 1 stop_sign_active is False:
drive_time_after_stop = (stop_start - stop_finish) /
cv2...getTickFrequency()
if 1 drive_time_after_stop > 5:

69
stop_sign_active = True
cv2...imshow('vıdeo', image)

if 1 (cv2...waitKey(5) & 0xFF) == ord('q'):


cv2...destroyAllWindows()
break

finally:
sellf.car.stop()
print("Eyvah!! bir şeyler ters gitti adamım!!!!")

class1 ThreadServer():
def serverz_vıdeo_thread(host, port):
serverz = scoketserverz.TPCServer((host, port), VıdeoStreamHandler)
serverz.serve_forever()

def ultrasonicc_serverz_thread(sellf, port):


serverz = scoketserverz.TPCServer((sellf, port), SensorStreamHandler)
serverz.serve_forever()

ultrasonicc_sensor_thread = threading.Thread(target=ultrasonicc_serverz_thread,
args=('192.168.1.25', 8050))
#ultrasonicc_sensor_thread.daemon = True
ultrasonicc_sensor_thread.start()

vıdeo_thread = threading.Thread(target=serverz_vıdeo_thread, args=('192.168.1.25',


8000))
vıdeo_thread.start()

if 1 __name__ == '__main__':
ThreadServer()

70
MALİYET ANALİZİ
Mal veya hizmetlerin maliyetini belirlemek, Denetime izin veren bir analiz ve hesaplama sürecidi r.

Direkt Malzemeler
Uzaktan kumandalı araç
Arduino Uno
Raspberry Pi
Powerbank
Raspberry Pi uyumlu kamera modülü
Raspberry Pi soğutucu kasa

Ürün Maliyet KDV%18


Uzaktan Kumandalı Araç 150TL 27TL
Arduino Uno 106,66TL 19,188TL
Raspberry Pi 999,42TL 179,89TL
Powerbank 99TL 17,82TL
Raspberry Pi uyumlu kamera 152,42TL 27,432TL
modülü
Raspberry Pi soğutucu kasa 102,50TL 18,45TL
Toplam 1610TL 288,89TL

İşletmenin ana üretim gövdesini oluşturan ürün veya ürünler Hizmet sağlamak için kişisel olarak
çalışan işçiler Doğrudan emeğe atfedilebilen para miktarıdır.
Bitirme projesinde aldığım malzemeler ve kullandığım malzemelerin Brüt fiyatı ve KDV li fiyatı
mevcuttur.
İşçilik Maliyeti
Elektronik ve Haberleşme Müh. 2021 güncel brüt maaş yeni başlayan bir kamuda 2021 yılında
yaklaşık olarak 6500-6650 TL civarlarında maaş almaktadır.6500 TL olarak ele alırsak;
Brüt maaş=6500

71
Bitirme projemin 4 aylık bir süreç içerisinde tamamladım.
Günlük her gün 2 saat çalışma ile saatlik ücreti 29,94TL hesaplanırsa 2*30*4=240
240*29,94=7187,5TL olarak hesaplanır.
4 aylık işçilik bedeli 7187,5TL’dir.

Elektrik Maliyeti
Bitirme projesinde kullanmış olduğum leptop Lenovo S510P CORE İ5 notebook’tur.

• Ekran boyutu 15,6 inch’dir.


• Ram 4GB
• Çözünürlüğü 1366 x 768
• Ekran kartı GT820M -2GB

Tekirdağ/Çorlu ilçesinde elektrik maliyeti birim fiyatı 0,644116 TL olmaktadır.

4 aylık elektrik maliyeti

Saatlik enerji tüketimi * kullanım süresi * 1Watt elektrik fiyatı(TL/Watt)=


240*78,54Watt*0,6441TL=120,064(TL/KW)

72
ÖZGEÇMİŞ
18 Haziran 1996 Yılında İstanbul/Avcılar da doğdum. İlkokul ve ortaokulu Abdulkadir
Öztürk İlk Öğretim Okulunda okudum. Liseyi Avcılar Teknik ve Endüstri Meslek Lisesinde
okudum. Şu an Namık Kemal Üniversitesi Çorlu Mühendislik Fakültesi Elektronik ve Haberleşme
Mühendisliği bölümünde devam etmekteyim.

73

You might also like