Professional Documents
Culture Documents
C
NAMIK KEMAL ÜNİVERSİTESİ
ÇORLU MÜHENDİSLİK FAKÜLTESİ
ELEKTRONİK VE HABERLEŞME
MÜHENDİSLİĞİ BÖLÜMÜ
HAZIRLAYAN
BERKAN SOFU
1140605605
DANIŞMAN
Yrd.Doç.Dr. Hasan DEMİR
Haziran 2021
i
i
ONAY
....../....../2021
i
ETİK BEYAN
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
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.
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]
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
1.Raspberry pi 3
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İ
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.
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 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]
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.
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]
3. ARDUİNO NEDİR
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.
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ı
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.)
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]
15
Şekil 3.9: Raspberry pi Pinleri
Raspberry pi Özellikleri:
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.
İ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
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.
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.
22
Şekil 3.17: WinSCP Bağlantı Ekran
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)
24
Şekil 3.18:RP uyumlu kamera modülü
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.
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]
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.
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]
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:
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]
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.
Ö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.
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:
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.
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ı
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
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
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.
GPU1 Sürümü;
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.
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.
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.
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ı.
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
6. MLP(AUTO)TRAİNİNG
37
Şekil 7.1:MLP training
38
Şekil7.2: Npz dosyası
İ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 .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.
40
Şekil7.5:Otonom sürüşte eğitilen yapay zekanın arduino komut göndermesi
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ü.
6)Gillmor, Dan., (20.09.2015), Google’s Driverless Cars Are A Boon For Safety And
‘Lethal Weapons’
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
1135p-1145p.
12)Chung, S.-Y., & Huang, H.-P. (2011). Robot motion planning in dynamic uncertain
13)Du Toit, N. E., & Burdick, J. W. (2012). Robot motion planning in dynamic, uncertain
14)Shladover, S. E., Desoer, C. A., Hedrick, J. K., Tomizuka, M., Walrand, J., Zhang,
W.-B.,
15)Behringer, R., & Muller, N. (1998). Autonomous road vehicle guidance from
autobahnen to
16)Noto, M., & Sato, H. (2000). A method for the shortest path search by extended
Dijkstra
(IV), IEEE.
Ö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
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;
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);
}
49
}
digitalWrite(forward_pin, LOW);
delay(on_time);
}
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);
}
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)
52
h, w = 0, 0
images = glob.glob('chess_board/*.jpg')
# calibration
retval, cameraMatrix, distCoeffs, rvecs, tvecs = cv2...calibrateCamera(object_points,
image_points, (w, h), None, None)
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()
# veri çekme
data_set = glob.glob("data_set/*.npz")
if 1 not data_set:
print("Yeterince eğitim verisi yok!!")
sys.exit()
54
temp_images = data["images"]
temp_labels = data["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()
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))
# 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')
sellf.ser.flush()
sellf.send_instr = True
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)
# get ROI- lower half of the image (height, width, channel= no channel for
greyscale)
58
roi = image[120:240, :]
cv2...imshow('Vıdeo', roi)
frame += 1
total_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_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
else:
sellf.ser.write(b'0')
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)
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')
class1 RCControl(object):
def __init__(sellf):
sellf.ser = serial.Serial('COM3', 115200, timeout=1)
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
v=0
threshold = 150
# Cisim algılama
objects = class1if 1ier.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5,
minSize=(30, 30))
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
# Trafik ışığı
else:
roi = gray[y + 10: y + h - 10, x + 10: x + w - 10]
# 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
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')
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
def handle(sellf):
global sensor_data
stop_sign_active = True
stop_flag = False
# drive_time_after_stop = 0
recv_bytes = b''
recv_bytes += sellf.rfile.read(image_len)
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
sellf.car.stop()
print("Engel algiland,. Mesafe: {0:.1f}cm".format(sensor_data))
# 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}")
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)
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()
ultrasonicc_sensor_thread = threading.Thread(target=ultrasonicc_serverz_thread,
args=('192.168.1.25', 8050))
#ultrasonicc_sensor_thread.daemon = True
ultrasonicc_sensor_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
İş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.
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