Raspberry Pi 4 Trafik İşarəsi Tanıma Robotu: 6 addım
Raspberry Pi 4 Trafik İşarəsi Tanıma Robotu: 6 addım
Anonim
Raspberry Pi 4 Trafik İşarəsi Tanıma Robotu
Raspberry Pi 4 Trafik İşarəsi Tanıma Robotu

Bu təlimat mənim universitet layihəmdən qaynaqlanır. Məqsəd, bir sinir şəbəkəsinin bir görüntünü təhlil etdiyi və sonra tanınmasına əsaslanaraq bir arduino robotuna Ros vasitəsilə hərəkət etməsini söyləyəcəyi bir sistem yaratmaq idi.

Məsələn, sağa dönmə işarəsi tanınarsa, robot sağa dönər, sola dönmə işarəsi tanınarsa, robot sola dönər, heç biri tanınmazsa, robot irəli davam edəcək. İstifadə ediləcək məlumat bazası, INI (2019) tərəfindən rəsmi yol işarəsi tanınmasıdır (Institut Fur Neuroinformatik), bu verilənlər bazasında 43 sinif var, ancaq ikisinə ehtiyac var; Veri toplusundakı 00033 və 00034 qovluqları sola və sağa dönmə işarələridir.

Addım 1: Tələblər

Tələblər
Tələblər
Tələblər
Tələblər
Tələblər
Tələblər

Bu layihə üçün tələblər aşağıdakılardır:

Arduino robotu. (əsasən arduino uno, motor sürücüsü və mühərriklər) (robot istifadə etmirsinizsə lazım deyil)

Moruq pi 4.

Pi kamera.

Proqram tələb olunur:

Python 3.

OpenCV 4.

Tensor axını.

arduino IDE (robot istifadə etmirsinizsə lazım deyil)

Ros (robot istifadə etmirsinizsə lazım deyil)

Ən sevdiyiniz python ideyası nə olursa olsun (Moruq pi üzərində Thonny istifadə edirəm).

OpenCV və Tensorflow qurmaq üçün Adrianın təlimatlarına əməl edin. Bağlantı:

Dərsliklərinə mümkün qədər çox baxmağı məsləhət görürəm, həqiqətən maraqlıdır və həm yeni başlayanlar, həm də orta səviyyəli insanlar üçün faydalıdır.

Addım 2: Məlumatların öyrədilməsi

Qatar skripti, 43 sinifdən təxminən 50.000 şəkil toplayan məlumat bazasına daxil olmaq üçün hazırlanmışdır. Skript, müxtəlif kitabxanalardan istifadə edərək python dilində yazılmışdır: os - bu, python skriptini verilənlər bazasının yerləşdiyi doğru qovluğa bağlamaq üçündür. Matplotlib - bu təlim modelindəki məlumatları göstərmək üçündür. Tensorflow və keras - bunlar süni neyron şəbəkə modelini yaratmaq üçün istifadə olunan kitabxanalardır, modeli tərtib etmək üçün istifadə olunur. Numpy - bu kitabxana, şəkilləri bir proqnoz əldə etmək üçün modelin üzərinə qoyula bilən bir sıra halına gətirmək üçündür.

Əlavə edilmiş skript, verilənlər bazasından bir model hazırlamaq üçün python kodudur. Bu, (5, 5) girişi olan konvolüsyonlu 2D -dən və sonra yenidən birləşmənin aktivləşdirilməsindən ibarətdir, bunu etdikdən sonra giriş eyni aktivləşdirmə və birləşmə ilə (3, 3) girişi ilə başqa bir konvolusiyadan keçir. Bu, hamarlanmadan əvvəl son dəfə baş verir və sonra sıxlıq mövcud siniflərin miqdarına tətbiq olunur, bu halda 43.

Növbəti addım modeli tərtib etmək idi. Bu, optimallaşdırıcıyı təyin edən hissədir, çünki bu, 1 -ci tapşırıqda istifadə olunan optimallaşdırıcıya oxşar olduğundan, bir sgd ən uyğun idi. Həm də kompilyatorda itkinin təyin edilməsi lazımdır, kateqoriyalar tam ədədlər olduğu üçün modelin hər sinif üçün bir proqnozu 0 və 1. 1 arasında dəyişmə olaraq 100% dəqiqliyə malik olduğu üçün sparse_categorical_crossentropy itkisini seçmək ən uyğun gəlir.

Tərtibatçı tamamlandıqdan sonra, modelin görüntü girişlərini emal etməyə başlaması üçün bir generator tətbiq edilməlidir. Jeneratör bir çox hissədən ibarətdir: training_set - bu təlim üçün istifadə olunan verilənlər bazasına keçiddir, steps_per_epoch - bu, hər dövr üçün lazım olan addımların sayıdır, dövrlər - bunlar proqramın tam bir məlumat dəsti ilə neçə dəfə təkrarlanacağıdır., validation_data - bu doğrulama, validation_steps üçün istifadə olunan verilənlər bazasına keçiddir - doğrulama üçün istifadə olunan addımların sayı, hər dövrün sonunda doğrulama olur.

Ümumiyyətlə, bütün məlumat silsiləsinin hər dövrdə tamamlanması lazımdır. Beləliklə, məsələn, 1024 görüntüdən ibarət bir məlumat dəsti tələb olunacaq: Toplu ölçüsü = 32, Dövr başına addımlar = 32, dövrlər = 1. Hər bir addım bütün partiya ölçüsünü ehtiva edir, buna görə də 32 -lik bir partiya ölçüsü ilə addımlar 32 -dir. əl, sinif sayından daha böyük bir partiya ölçüsünə sahib olmaq daha yaxşıdır, çünki partiyanın ölçüsü daha kiçikdirsə, hər addımda hər sinifdən bir şəkil ola bilməz.

Model təhsili başa vurduqdan sonra, matplotlib istifadə edərək, proqram nəticələrin qrafikini hazırlayacaq, bu təlimin başdan sona qədər tarixini göstərir. Qrafik dəqiqlik, doğrulama dəqiqliyi, itki və yoxlama itkisindən ibarətdir, bu, təlimin necə inkişaf etdiyini göstərmək üçün hər dövrə bölünür. Son mərhələ, proqnozlaşdırma prosesi üçün daha sonra əldə edilə bilən bir.h5 faylı olaraq modeli saxlamaqdır. Modeli saxlamaq, proqnozlaşdırma proqramı hər dəfə işlədildikdə, təlim proqramının yenidən işlənməsinə ehtiyac olmadığı deməkdir. Təlim proqramı bir moruqda hər dövrdə 10 dəqiqəyə qədər davam edə bilər.

Təlim ssenarisi əlavə olunur:

Addım 3: Pi Kamera Proqnozlarının həyata keçirilməsi

Növbəti proqram proqnozlaşdırma və nəşriyyat skriptidir.

İlk mərhələ model.load () istifadə edərək modeli yükləməkdir. İkinci mərhələ, opencv istifadə edərək pi kameradan çərçivələri təkrarlamaq və sonra çərçivəni təlim mərhələsində istifadə olunan giriş ölçüləri ilə eyni ölçüdə, 32 x 32 piksel etməkdir. Bu edildikdən sonra yeni ölçülü çərçivə bir matris çıxarılan model.predict () istifadə olunan model vasitəsilə qoyulur, matrisin hər bir elementi 0 -dan 1 -ə qədər floatdır, element indeksi təmsil etdiyi siniflə eynidir, buna görə də birinci element birinci sinifdir və nömrə həmin sinifdən olan görüntünün əminliyinin proqnozudur. Məsələn,

QEYD: Əgər robot tərəfini istifadə etmirsinizsə. Sadəcə sətirləri silin:

"idmansız"

def danışan (istiqamət):

mesaj = String ()

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

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

mesaj = istiqamət

rospy.loginfo (mesaj)

pub.publish (mesaj)"

"danışan (istiqamət)"

Pi kamera ssenarisi əlavə olunur.

Addım 4: Arduino Robotu

Son addım robot proqram skriptidir.

Bu C ++ dilində yazılmışdır və arduino uno üçün.ino faylıdır. Proqram, ide kitabxana menecerində tapıla bilən ros kitabxanasını tələb edir. Bu idxal edildikdən sonra nümunə fayllar var, ehtiyacım olana oxşar bir məqsəd gətirəcəyi üçün led yanıb sönmə faylını genişləndirməyi seçdim. Proqram, güc kəsilənə qədər döngəyə davam edir, əvvəlcə mövzu robotunu dinləyir, o mövzudan bir əmr aldıqda, əmrin nə dediyini görmək üçün if ifadəsi olacaq. Komanda sol olarsa, skript sola dönmə metodunu, əmr doğrudursa, sağa dönmə metodunu işlədər, əks halda irəli metodunu işlədər. Bu üç üsul bir -birinə çox bənzəyir, rəqəmsal sancaqların ya LOW (torpaq) və ya 100 (PWM) olduğunu söyləyir, bunun üçün robotun motor sürücüsünə bir az icazə verməsini söyləməklə çox sürətli olmaması üçün. gərginlik çıxdı. Bu çıxışların sırası, robotu sola və sağa və ya irəli getməyə məcbur edən şeydir, bu, motorlara gedən gərginliyin oriyentasiyasından qaynaqlanır.

Arduino üçün.ino skriptinə əlavə olunur.

Addım 5: Test

Test
Test
Test
Test
Test
Test

Layihə əvvəldən axıra qədər əlavə olundu. İlk şəkil təlim prosesini göstərir. Tamamlandıqdan sonra modelin bir çapı göstərilir. Üçüncü şəkil təlim ssenarisindən bir proqnozu göstərir. bu təlim ssenarisinin son mərhələsidir. Təlim skriptinin yerləşdiyi qovluğa baxsanız, bir qrafik və model hazırlanmışdır. Qrafik burada şəkil 4 kimi görünməlidir, bu təlimin başından sonuna qədər tarixini göstərir.

Son görüntü, pi kamera skriptini işləyərkən, pi kameradan canlı bir axışdır. hər çərçivədə bir proqnoz verilir və proqnoz terminalda çap olunur. Çərçivə kameranın gördüklərini göstərir.

Bu layihə üçün Universitet hesabatım əlavə olunur. Layihə haqqında daha ətraflı məlumat üçün oxuyun.

Addım 6: Bütün Əlavə Fayllar

Bütün Əlavə Fayllar
Bütün Əlavə Fayllar

Bunlardan bəziləri yolda hazırladığım sənədləri yoxlayırdı.