İçindekiler:

Raspberry Pi 4 Trafik İşareti Tanıma Robotu: 6 Adımda
Raspberry Pi 4 Trafik İşareti Tanıma Robotu: 6 Adımda

Video: Raspberry Pi 4 Trafik İşareti Tanıma Robotu: 6 Adımda

Video: Raspberry Pi 4 Trafik İşareti Tanıma Robotu: 6 Adımda
Video: Arduino Nedir? Nasıl Kurulur ve Neler Yapılabilir? #1 2024, Kasım
Anonim
Raspberry Pi 4 Trafik İşareti Tanıma Robotu
Raspberry Pi 4 Trafik İşareti Tanıma Robotu

Bu talimat, üniversite projeme dayanmaktadır. Amaç, bir sinir ağının bir görüntüyü analiz ettiği ve ardından tanımaya dayalı olarak bir arduino robotuna Ros aracılığıyla hareket etmesini söyleyeceği bir sistem oluşturmaktı.

Örneğin, bir sağa dönüş işareti tanınırsa robot sağa döner, sola dönüş işareti tanınırsa robot sola döner, ikisi de tanınmazsa robot ilerlemeye devam eder. Kullanılacak veri kümesi, INI (2019) (Institut Fur Neuroinformatik) tarafından sağlanan resmi trafik işareti tanıma sistemidir, bu veri kümesinde 43 sınıf vardır, ancak yalnızca iki tanesine ihtiyaç vardır; Veri setindeki 00033 ve 00034 klasörleri sola ve sağa dönüş işaretleridir.

Adım 1: Gereksinimler

Gereksinimler
Gereksinimler
Gereksinimler
Gereksinimler
Gereksinimler
Gereksinimler

Bu proje için gereksinimler şunlardır:

Bir arduino robotu. (temelde bir arduino uno, bir motor sürücüsü ve motorlar) (bir robot kullanmıyorsanız gerekli değildir)

Ahududu pi 4.

Pi kamera.

Gerekli yazılım:

Python 3.

OpenCV 4.

Tensör akışı.

arduino IDE (bir robot kullanmıyorsanız gerekli değildir)

Ros (bir robot kullanmıyorsanız gerekli değildir)

En sevdiğiniz piton fikri ne olursa olsun (Ahududu pi'de Thonny kullanıyorum).

OpenCV ve Tensorflow'u kurmak için Adrian'ın talimatlarını izleyin. Bağlantı:

Mümkün olduğu kadar çok öğreticisine bakmanızı tavsiye ederim, gerçekten ilginçler ve hem yeni başlayanlar hem de orta seviyeler için faydalıdır.

Adım 2: Verilerin Eğitimi

Tren komut dosyası, 43 sınıftan yaklaşık 50.000 görüntüden oluşan veri kümesine erişmek için tasarlanmıştır. Komut dosyası, çeşitli kitaplıklar kullanılarak python'da yazılmıştır: os – bu, python komut dosyasını veri kümesinin bulunduğu doğru dizine bağlamak içindir. Matplotlib – bu, eğitim modelindeki verileri görüntülemek içindir. Tensorflow ve keras – bunlar yapay sinir ağı modelini oluşturmak için kullanılan kütüphanelerdir, modeli tasarlamak için kullanılırlar. Numpy - bu kitaplık, görüntüleri bir diziye dönüştürmek içindir ve daha sonra bir tahmin almak için modele yerleştirilebilir.

Ekli komut dosyası, veri kümesinden bir model oluşturmak için python kodudur. Bu, (5, 5) girişli evrişimli 2B'den ve relu'nun etkinleştirilmesinden sonra havuzlamadan oluşur, bu yapıldıktan sonra giriş, aynı aktivasyon ve havuzlama ile bir (3, 3) girişi ile başka bir evrişimden geçer. Bu, düzleştirilmeden önce son bir kez olur ve daha sonra yoğunluk, mevcut sınıfların miktarına uygulanır, bu durumda 43.

Bir sonraki adım modeli derlemekti. Bu, optimize ediciyi ayarlayan kısımdır, atama 1'de kullanılan optimize ediciye benzer olduğu için bir sgd en uygun olanıdır. Sgd, Stokastik gradyan inişi anlamına gelir. Ayrıca derleyici içinde kaybın ayarlanması gerekir, kategoriler tamsayılar olduğundan ve model her sınıf için 0 ile 1 arasında bir kayan nokta olarak bir tahmin üreteceğinden, bir sparse_categorical_crossentropy kaybı seçmek en uygunudur ve %100 doğruluktadır.

Derleyici tamamlandıktan sonra, modelin görüntü girdilerini işlemeye başlaması için bir oluşturucunun uygulanması gerekir. Oluşturucu birden çok bölümden oluşur: training_set – bu, eğitim için kullanılan veri kümesinin bağlantısıdır,step_per_epoch – bu, epoch başına gerekli olan adım sayısıdır, epochs – bunlar, programın tam bir veri kümesi boyunca kaç kez yineleneceğidir, validation_data – doğrulama için kullanılan veri kümesinin bağlantısıdır, validation_steps – doğrulama için kullanılan adım sayısı, doğrulama her dönemin sonunda gerçekleşir.

Genel olarak, tüm veri kümesinin tamamen silinmesinin dönem başına tamamlanması gerekir. Bu nedenle, örneğin 1024 görüntüden oluşan bir veri kümesi şunları gerektirir: Toplu iş boyutu = 32, Dönem başına adım sayısı = 32, dönem = 1. Her adım tüm parti boyutunu içerir, bu nedenle 32'lik bir toplu iş boyutunda adımlar 32 olacaktır. diğer yandan, sınıf sayısından daha büyük bir toplu iş boyutuna sahip olmak en iyisidir, çünkü toplu iş boyutu daha küçükse her adım her sınıftan bir resim içeremez.

Model eğitimi bitirdiğinde, program matplotlib kullanarak çıktıların bir grafiğini oluşturacaktır, bu eğitimin başından sonuna kadar geçmişini gösterir. Grafik doğruluk, doğrulama doğruluğu, kayıp ve doğrulama kaybından oluşur, bu, eğitimin nasıl ilerlediğini göstermek için dönem başına bölünür. Son aşama, modeli daha sonra tahmin işlemi için erişilebilecek bir.h5 dosyası olarak kaydetmektir. Modeli kaydetmek, tahmin programı her çalıştırıldığında eğitim programının yeniden çalıştırılmasına gerek olmadığı anlamına gelir. Bir ahududu pi üzerinde eğitim programı dönem başına 10 dakikaya kadar sürebilir.

Eğitim komut dosyası ektedir:

3. Adım: Pi Kamera Tahminlerini Uygulama

Bir sonraki program, tahmin ve yayıncı komut dosyasıdır.

İlk aşama, modeli model.load() kullanarak yüklemektir. İkinci aşama, opencv kullanarak pi kameradan gelen kareleri yinelemek ve ardından çerçeveyi, eğitim aşamasında kullanılan giriş boyutlarıyla aynı boyuta, 32 x 32 piksele yeniden boyutlandırmaktır. Bu yapıldıktan sonra, yeni yeniden boyutlandırılmış çerçeve, bir matris çıktısı veren model.predict () kullanılarak modele geçirilir, matrisin her bir elemanı 0'dan 1'e bir kayan noktadır, eleman indeksi temsil ettiği sınıfla aynıdır, dolayısıyla ilk öğe birinci sınıftır ve sayı, o sınıftan olan görüntünün kesinliğinin tahminidir. Örneğin.

NOT: Robot tarafını kullanmıyorsanız. Sadece satırları kaldırın:

"ithal rospy"

def konuşmacı(yön):

mesaj = Dize()

pub = rospy. Publisher('robot', String, tail_size=10)

rospy.init_node('konuşan', anonim=Doğru)

mesaj = yön

rospy.loginfo(mesaj)

yayın.yayınla(mesaj)"

"konuşmacı (yön)"

Ekli Pi kamera komut dosyasıdır.

Adım 4: Arduino Robotu

Son adım robot program betiğidir.

Bu, C++ ile yazılmıştır ve arduino uno için bir.ino dosyasıdır. Program, ide içindeki kütüphaneler yöneticisinde bulunabilen ros kütüphanesini gerektirir. Bu içe aktarıldığında, örnek dosyalar var, ihtiyacım olan şeye benzer bir amaç yapacağından led yanıp sönme dosyasını genişletmeyi seçtim. Program, elektrik kesilene kadar döngüye devam eder, öncelikle konu robotunu dinler, o konudan bir komut yakaladığında komutun ne dediğini görmek için if ifadesine sahip olur. Komut bırakılırsa, komut dosyası sola dönüş yöntemini çalıştırır, komut doğruysa sağa dönüş yöntemini çalıştırır ve aksi takdirde ileri yöntemini çalıştırır. Bu üç yöntem birbirine çok benzer, dijital pinlerin DÜŞÜK (toprak) veya 100 (PWM) olduğunu söylerler, bunun içindir ki, motor sürücüsüne sadece biraz izin vermesini söyleyerek robotun çok hızlı olmamasını sağlar. voltaj çıkışı. Bu çıkışların sırası, robotun sola ve sağa dönmesini veya ileri gitmesini sağlayan şeydir, bunun nedeni motorlara giden voltajın yönüdür.

Ekli, arduino için.ino betiğidir.

Adım 5: Test Etme

Test yapmak
Test yapmak
Test yapmak
Test yapmak
Test yapmak
Test yapmak

Proje başından sonuna kadar eklenen resimler. İlk görüntü, devam eden eğitimi gösterir. Bu tamamlandığında, yapılan modelin bir çıktısı gösterilir. Üçüncü görüntü, eğitim komut dosyasından bir tahmin gösterir. bu, eğitim senaryosunun son aşamasıdır. Eğitim betiğinin bulunduğu klasöre bakarsanız, bir grafik ve bir model yapılmış. Grafik burada resim 4 gibi görünmelidir, bu, eğitimin başından sonuna kadar olan geçmişini gösterir.

Son görüntü, pi kamera komut dosyasını çalıştırırken, pi kameradan canlı bir akıştır. her karede bir tahmin yapılır ve tahmin terminalde yazdırılır. Çerçeve, kameranın ne gördüğünü gösterir.

Bu proje için hazırladığım üniversite raporu ektedir. Projenin daha fazla detayı için lütfen okuyunuz.

6. Adım: Tüm Ek Dosyalar

Tüm Ek Dosyalar
Tüm Ek Dosyalar

Bunlardan bazıları yol boyunca yaptığım test dosyalarıydı.

Önerilen: