Talaan ng mga Nilalaman:

Raspberry Pi 4 Traffic Sign Recognition Robot: 6 Mga Hakbang
Raspberry Pi 4 Traffic Sign Recognition Robot: 6 Mga Hakbang

Video: Raspberry Pi 4 Traffic Sign Recognition Robot: 6 Mga Hakbang

Video: Raspberry Pi 4 Traffic Sign Recognition Robot: 6 Mga Hakbang
Video: Part 5 - The Jungle Audiobook by Upton Sinclair (Chs 18-22) 2024, Nobyembre
Anonim
Raspberry Pi 4 Traffic Sign Recognition Robot
Raspberry Pi 4 Traffic Sign Recognition Robot

Ang itinuturo na ito ay batay sa aking proyekto sa unibersidad. Ang layunin ay upang lumikha ng isang sistema kung saan ang isang neural network ay pinag-aaralan ang isang imahe at pagkatapos ay batay sa pagkilala ay sasabihin sa isang arduino robot na lumipat sa pamamagitan ng Ros.

Halimbawa kung ang isang pag-sign sa kanan ay kinikilala pagkatapos ang robot ay liliko sa kanan, kung ang isang turn left sign ay makikilala pagkatapos ang robot ay liliko sa kaliwa, kung hindi makikilala pagkatapos ang robot ay magpapatuloy. Ang dataset na gagamitin ay ang opisyal na pagkilala sa pag-sign sign ng trapiko mula sa INI (2019) (Institut Fur Neuroinformatik), ang dataset na ito ay mayroong 43 mga klase subalit dalawa lamang ang kinakailangan; Ang mga folder ng 00033 at 00034 sa dataset ay kaliwa at kanang mga palatandaan.

Hakbang 1: Mga Kinakailangan

Mga Kinakailangan
Mga Kinakailangan
Mga Kinakailangan
Mga Kinakailangan
Mga Kinakailangan
Mga Kinakailangan

Ang mga kinakailangan para sa proyektong ito ay ang mga sumusunod:

Isang robot na arduino. (karaniwang isang arduino uno, isang motor driver at motor) (hindi kinakailangan kung hindi ka gumagamit ng isang robot)

Isang raspberry pi 4.

Isang pi camera.

Kinakailangan ang software:

Python 3.

OpenCV 4.

Tensorflow.

arduino IDE (hindi kinakailangan kung hindi ka gumagamit ng isang robot)

Ros (hindi kinakailangan kung hindi ka gumagamit ng isang robot)

Anuman ang iyong paboritong tema ng sawa ay (Sa raspberry pi, ginagamit ko si Thonny).

Upang i-set up ang OpenCV at Tensorflow, sundin ang mga tagubilin ni Adrian. Link:

Inirerekumenda ko ang pagtingin sa marami sa kanyang mga tutorial hangga't maaari, ang mga ito ay talagang kawili-wili at kapwa kapaki-pakinabang para sa mga nagsisimula pati na rin ang mga tagapamagitan.

Hakbang 2: Pagsasanay ng Data

Ang script ng tren ay idinisenyo upang ma-access ang dataset na nagtatipon ng halos 50, 000 na mga imahe mula sa 43 mga klase. Ang script ay nakasulat sa sawa, na gumagamit ng iba't ibang mga aklatan: os - ito ay para sa pag-uugnay sa script ng sawa sa tamang direktoryo kung saan matatagpuan ang dataset. Matplotlib - ito ay para sa pagpapakita ng data mula sa modelo ng pagsasanay. Tensorflow at keras - ito ang mga silid aklatan na ginamit upang likhain ang artipisyal na neural network na modelo, ginagamit ang mga ito upang idisenyo ang modelo. Numpy - ang library na ito ay para sa paggawa ng mga imahe sa isang array na maaaring ilagay sa modelo upang makuha ang isang hula.

Ang script na nakalakip ay ang python code para sa paggawa ng isang modelo mula sa dataset. Binubuo ito sa convolutional 2D na may (5, 5) input at isang activation ng relu pagkatapos ng pooling, sa sandaling tapos na ito ang input ay dumaan sa isa pang convolution na may isang (3, 3) input na may parehong pag-activate at pooling. Nangyayari ito sa huling pagkakataon bago ma-flatten at pagkatapos ay inilalapat ang density sa dami ng mga klase, sa kasong ito 43.

Ang susunod na hakbang ay ang pag-ipon ang modelo. Ito ang bahagi na nagtatakda ng optimiser, ang isang sgd ang pinaka-akma dahil katulad ito sa ginamit na pag-optimize sa takdang-aralin 1. Ang Sgd ay nangangahulugang pinagmulan ng gradient ng Stochastic. Sa loob din ng tagatala ang pagkawala ay kailangang maitakda, ang pagpili ng isang sparse_categorical_crossentropy loss ay ang pinakamahusay na angkop dahil ang mga kategorya ay bilang mga integer at ang modelo ay maglalabas ng isang hula para sa bawat klase bilang isang float sa pagitan ng 0 at 1. 1 na 100% kawastuhan.

Kapag kumpleto na ang tagatala, kailangang ilapat ang isang generator para sa modelo upang masimulan ang pagproseso ng mga pag-input ng imahe. Ang generator ay binubuo ng maraming bahagi: training_set - ito ang link sa dataset na ginamit para sa pagsasanay, steps_per_epoch - ito ang bilang ng mga hakbang bawat epoch na kinakailangan, mga epoch - ito ay kung gaano karaming beses mag-uulit ang programa sa pamamagitan ng isang buong hanay ng data, validation_data - ito ang link sa ginamit na dataset para sa pagpapatunay, pagpapatunay_steps - ang bilang ng mga hakbang na ginamit para sa pagpapatunay, ang pagpapatunay ay nangyayari sa pagtatapos ng bawat panahon.

Pangkalahatan, ang isang kumpletong pagpunas ng buong dataset ay kailangang kumpleto bawat panahon. Samakatuwid halimbawa ng isang dataset ng 1024 na mga imahe ay mangangailangan: Laki ng batch = 32, Mga Hakbang bawat panahon = 32, mga panahon = 1. Ang bawat hakbang ay may kasamang buong laki ng batch, kaya't may laki ng batch na 32 ang mga hakbang ay magiging 32. kamay, pinakamahusay na magkaroon ng isang mas malaking sukat ng batch kaysa sa bilang ng mga klase, ito ay dahil kung mas maliit ang laki ng batch kung gayon ang bawat hakbang ay hindi maaaring magsama ng isang imahe mula sa bawat klase.

Kapag natapos na ang modelo sa pagsasanay, gamit ang matplotlib ang programa ay gagawa ng isang graph ng mga output, ipinapakita nito ang kasaysayan ng pagsasanay mula simula hanggang katapusan. Ang grap ay binubuo ng kawastuhan, kawastuhan ng pagpapatunay, pagkawala at pagkawala ng pagpapatunay, ito ay pinaghiwalay bawat panahon upang maipakita kung paano umunlad ang pagsasanay. Ang pangwakas na yugto ay upang mai-save ang modelo bilang isang.h5 file na maaaring ma-access sa ibang pagkakataon para sa proseso ng hula. Ang pag-save sa modelo ay nangangahulugan na sa tuwing pinapatakbo ang programa ng hula ay hindi kailangang mapatakbo muli ang programa sa pagsasanay. Ang programa ng pagsasanay ay maaaring tumagal ng hanggang 10 minuto bawat panahon sa isang raspberry pi.

Nakalakip ang iskrip ng Pagsasanay:

Hakbang 3: Pagpapatupad ng Mga Pagtataya ng Pi Camera

Ang susunod na programa ay ang hula at iskrip ng publisher.

Ang unang yugto ay upang mai-load ang modelo gamit ang model.load (). Ang pangalawang yugto ay upang umulit sa pamamagitan ng mga frame mula sa pi camera gamit ang opencv at pagkatapos ay baguhin ang laki ng frame sa parehong laki tulad ng mga laki ng pag-input na ginamit sa yugto ng pagsasanay, 32 x 32 pixel. Kapag tapos na ito ang bagong sukat na sukat ay inilalagay sa modelo gamit ang model.predict () na naglalabas ng isang matrix, ang bawat elemento ng matrix ay isang float mula 0 hanggang 1, ang elemento ng index ay pareho ng klase na kinakatawan nito, kaya't ang unang elemento ay isang klase at ang numero ay ang hula ng katiyakan ng imahe na mula sa klase. Hal. Ipinapakita ng

TANDAAN: Kung hindi mo ginagamit ang panig ng robot. Alisin lamang ang mga linya:

"import rospy"

def talker (direksyon):

mensahe = String ()

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

rospy.init_node ('talker', anonymous = True)

mensahe = direksyon

rospy.loginfo (mensahe)

pub.publish (mensahe)"

"tagapagsalita (direksyon)"

Nakalakip ang script ng Pi camera.

Hakbang 4: Arduino Robot

Ang huling hakbang ay ang script ng script ng robot.

Ito ay nakasulat sa C ++ at isang.ino file para sa arduino uno. Kinakailangan ng programa ang ros library na matatagpuan sa manager ng mga aklatan sa loob ng ideyang ito. Kapag na-import na ito mayroong mga halimbawang mga file, pinili kong palawakin sa led blink file dahil gagawin nito ang isang katulad na layunin sa kailangan ko. Patuloy na loop ang programa hanggang sa maalis ang pagkakakonekta ng kapangyarihan, una itong nakikinig sa paksa ng robot, kapag nakakakuha ito ng isang utos mula sa paksang iyon magkakaroon ito ng isang pahayag kung makita kung ano ang sinasabi ng utos. Kung natitira ang utos pagkatapos ay pinapatakbo ng script ang pamamaraan sa kaliwa, kung patas ang utos pagkatapos ay tatakbo ang pakanan na paraan at tatakbo ang pasulong na pamamaraan. Ang tatlong pamamaraang ito ay halos magkatulad sa bawat isa, sinabi nila sa mga digital na pin na maging LOW (ground) o 100 (PWM) para ito sa gayon ang robot ay hindi masyadong mabilis sa pamamagitan ng pagsasabi sa driver ng motor na pahintulutan lamang ang kaunting boltahe palabas. Ang pagkakasunud-sunod ng mga output na ito ay kung bakit ang robot ay lumiliko pakaliwa at pakanan o pasulong, ito ay dahil sa orientation ng boltahe na papunta sa mga motor.

Nakalakip ang.ino script para sa arduino.

Hakbang 5: Pagsubok

Pagsubok
Pagsubok
Pagsubok
Pagsubok
Pagsubok
Pagsubok

Nakalakip ang mga Imahe kaya't ang proyekto mula simula hanggang katapusan. Ipinapakita ng unang imahe ang pagsasanay sa proseso. Kapag nakumpleto na ang isang pag-print sa labas ng modelong ginawa ay ipinakita. Ang pangatlong imahe ay nagpapakita ng hula mula sa script ng pagsasanay. ito ang huling yugto ng script ng pagsasanay. Kung titingnan mo sa folder ang pagsasanay sa pagsasanay ay nasa, isang grap at isang modelo ang nagawa. Ang graph ay dapat magmukhang imahe 4 dito, ipinapakita nito ang kasaysayan ng pagsasanay mula simula hanggang katapusan.

Ang pangwakas na imahe ay habang pinapatakbo ang script ng pi camera, ang ay isang live stream mula sa pi camera. isang hula ang ginawa sa bawat frame at ang hula ay nakalimbag sa terminal. Ipinapakita ng frame kung ano ang nakikita ng camera.

Nakalakip ang aking ulat sa Unibersidad para sa proyektong ito. Mangyaring basahin para sa karagdagang detalye ng proyekto.

Hakbang 6: Lahat ng Karagdagang Mga File

Lahat ng Karagdagang Mga File
Lahat ng Karagdagang Mga File

Ang ilan sa mga ito ay pagsubok ng mga file na ginawa ko.

Inirerekumendang: