Բովանդակություն:
- Քայլ 1: Պահանջներ
- Քայլ 2. Տվյալների ուսուցում
- Քայլ 3. Pi տեսախցիկի կանխատեսումների իրականացում
- Քայլ 4: Arduino ռոբոտ
- Քայլ 5: Փորձարկում
- Քայլ 6: Բոլոր լրացուցիչ ֆայլերը
Video: Raspberry Pi 4 fficանապարհային նշանների ճանաչման ռոբոտ ՝ 6 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:46
Այս հրահանգը հիմնված է իմ համալսարանական ծրագրի վրա: Նպատակն էր ստեղծել այնպիսի համակարգ, որտեղ նյարդային ցանցը վերլուծի պատկերը, այնուհետև ճանաչման հիման վրա արդուինո ռոբոտին ասի շարժվել Ros- ով:
Օրինակ, եթե ճանաչվի աջ շրջադարձի նշանը, ապա ռոբոտը կթեքվի աջ, եթե շրջվի ձախ նշանը, ապա ռոբոտը կշրջվի ձախ, եթե ոչ մեկը չճանաչվի, ապա ռոբոտը կշարունակի առաջ: Տվյալների հավաքածուն, որը հանդիսանում է երթևեկության նշանների պաշտոնական ճանաչումը INI- ից (2019) (Institut Fur Neuroinformatik), այս տվյալների հավաքածուն ունի 43 դաս, սակայն անհրաժեշտ է միայն երկուսը. Տվյալների բազայի 00033 և 00034 թղթապանակները ձախ և աջ շրջադարձային նշաններ են:
Քայլ 1: Պահանջներ
Այս նախագծի պահանջները հետևյալն են.
Արդուինո ռոբոտ: (հիմնականում arduino uno, շարժիչ և շարժիչներ) (անհրաժեշտ չէ, եթե ռոբոտ չեք օգտագործում)
Ազնվամորի պի 4.
Պի տեսախցիկ:
Պահանջվող ծրագրակազմ.
Պիթոն 3.
OpenCV 4.
Tensorflow:
arduino IDE (անհրաժեշտ չէ, եթե ռոբոտ չեք օգտագործում)
Ros (անհրաժեշտ չէ, եթե ռոբոտ չեք օգտագործում)
Ինչ էլ որ լինի ձեր նախընտրած պիթոնի գաղափարը (ազնվամորի պիի վրա ես օգտագործում եմ Թոնիին):
OpenCV և Tensorflow կարգավորելու համար հետևեք Ադրիանի հրահանգներին: Հղում ՝
Ես խորհուրդ եմ տալիս դիտել հնարավորինս շատ նրա ձեռնարկները, դրանք իսկապես հետաքրքիր են և օգտակար են ինչպես սկսնակների, այնպես էլ միջանկյալների համար:
Քայլ 2. Տվյալների ուսուցում
Գնացքի սցենարը նախագծված է տվյալների հավաքածու մուտք գործելու համար, որը կազմում է 43 դասարանների շուրջ 50,000 պատկեր: Սցենարը գրված է python- ում ՝ օգտագործելով մի շարք գրադարաններ. Matplotlib - սա ուսուցման մոդելի տվյալները ցուցադրելու համար է: Tensorflow և keras - դրանք այն գրադարաններն են, որոնք օգտագործվում են արհեստական նյարդային ցանցի մոդելը ստեղծելու համար, դրանք օգտագործվում են մոդելի նախագծման համար: Numpy - այս գրադարանը պատկերը զանգված դարձնելու համար է, որն այնուհետև կարող է դրվել մոդելի միջոցով ՝ կանխատեսում ստանալու համար:
Կցված սցենարը տվյալների հավաքածուից մոդել պատրաստելու պիթոնի ծածկագիրն է: Սա բաղկացած է հեղափոխական 2D- ից (5, 5) մուտքով և ռելուի ակտիվացումից, այնուհետև ՝ միավորումից, երբ դա արվի, մուտքագրումը անցնում է մեկ այլ պտույտի միջոցով `նույն ակտիվացման և համախմբման (3, 3) մուտքով: Դա տեղի է ունենում վերջին անգամ ՝ նախքան հարթվելը, այնուհետև խտությունը կիրառվում է առկա դասերի քանակի վրա, այս դեպքում ՝ 43:
Հաջորդ քայլը մոդելը կազմելն էր: Սա այն հատվածն է, որը սահմանում է օպտիմիզատորը, sgd- ն ամենահարմարն էր, քանի որ այն նման էր 1 -ին առաջադրանքում օգտագործված օպտիմիզատորի: Sgd- ը նշանակում է ստոխաստիկ գրադիենտ ծագում: Նաև կոմպիլյատորի մեջ կորուստը պետք է սահմանվի, sparse_categorical_crossentropy կորստի ընտրությունը լավագույն տեղն է, քանի որ կատեգորիաները ամբողջ թվեր են, և մոդելը յուրաքանչյուր դասի համար կանխատեսում կներկայացնի որպես լողացող 0 և 1. 1 -ը ՝ 100% ճշգրտությամբ:
Կոմպիլյատորն ավարտելուց հետո անհրաժեշտ է գեներատոր կիրառել, որպեսզի մոդելը սկսի պատկերի մուտքերի մշակումը: Գեներատորը բաղկացած է մի քանի մասից ՝ training_set - սա ուսուցման համար օգտագործվող տվյալների շտեմարանն է, steps_per_epoch - սա յուրաքանչյուր դարաշրջանի համար անհրաժեշտ քայլերի քանակն է, դարաշրջաններ. Սրանք քանի անգամ են ծրագիրը կկրկնվի տվյալների ամբողջական փաթեթով:, validation_data - սա վավերացման համար օգտագործվող տվյալների բազայի հղումն է, validation_steps - վավերացման համար օգտագործվող քայլերի քանակը, վավերացումը տեղի է ունենում յուրաքանչյուր դարաշրջանի վերջում:
Ընդհանրապես, մեկ դարաշրջանի համար անհրաժեշտ է ամբողջական տվյալների ամբողջական մաքրում: Այսպիսով, օրինակ, 1024 պատկերների հավաքածու կպահանջի. Խմբաքանակի չափը = 32, քայլերը ՝ յուրաքանչյուր դարաշրջանում = 32, դարաշրջանները = 1. Յուրաքանչյուր քայլ ներառում է ամբողջ խմբաքանակի չափը, ուստի 32 -ի խմբաքանակի չափով քայլերը կլինեն 32: Մյուս կողմից ձեռքը, ավելի լավ է ունենալ ավելի մեծ խմբաքանակ, քան դասերի քանակը, սա այն պատճառով, որ եթե խմբաքանակի չափը ավելի փոքր է, ապա յուրաքանչյուր քայլ չի կարող ներառել պատկեր յուրաքանչյուր դասից:
Երբ մոդելը կավարտի ուսուցումը, matplotlib- ի միջոցով ծրագիրը կկազմի արդյունքների գրաֆիկը, ինչը ցույց է տալիս ուսուցման պատմությունը սկզբից մինչև վերջ: Գրաֆիկը բաղկացած է ճշգրտությունից, վավերացման ճշգրտությունից, կորուստից և վավերացման կորստից: Սա բաժանվում է յուրաքանչյուր դարաշրջանի `ցույց տալու համար, թե ինչպես է վերապատրաստումն ընթացել: Վերջնական փուլն այն է, որ մոդելը պահպանվի որպես.h5 ֆայլ, որը հետագայում հասանելի կլինի կանխատեսման գործընթացի համար: Մոդելը պահպանելը նշանակում է, որ ամեն անգամ, երբ կանխատեսման ծրագիրն է գործարկվում, վերապատրաստման ծրագիրը կարիք չունի նորից գործարկելու: Վերապատրաստման ծրագիրը կարող է տևել մինչև 10 րոպե մեկ դարաշրջանում ազնվամորի պի վրա:
Կից ներկայացվում է Ուսուցման սցենարը.
Քայլ 3. Pi տեսախցիկի կանխատեսումների իրականացում
Հաջորդ ծրագիրը կանխատեսման և հրատարակչի սցենարն է:
Առաջին փուլը մոդելը բեռնելն է ՝ օգտագործելով model.load (): Երկրորդ փուլը պետք է կրկնել pi տեսախցիկի շրջանակների միջոցով opencv- ի միջոցով, այնուհետև շրջանակը չափափոխել նույն չափի, ինչ ուսումնական փուլում օգտագործվող մուտքային չափերը ՝ 32 x 32 պիքսել: Երբ դա արվի, նոր չափափոխված շրջանակը դրվում է մոդելի միջոցով model.predict (), որը թողարկում է մատրիցա, մատրիցի յուրաքանչյուր տարրը լողում է 0 -ից մինչև 1, տարրերի ինդեքսը նույնն է, ինչ այն ներկայացնող դասը: առաջին տարրը առաջին դասն է, իսկ թիվը `տվյալ դասի պատկերի որոշակիության կանխատեսումը: Օրինակ ՝
Նշում. Եթե դուք չեք օգտագործում ռոբոտի կողմը: Պարզապես հեռացրեք տողերը.
«ներմուծել վարդագույն»
def talker (ուղղություն):
հաղորդագրություն = Լար ()
pub = rospy. Publisher ('robot', String, queue_size = 10)
rospy.init_node ('խոսող', անանուն = Trueշմարիտ)
հաղորդագրություն = ուղղություն
rospy.loginfo (հաղորդագրություն)
pub.publish (հաղորդագրություն) »
«խոսող (ուղղություն)»
Կից ՝ Pi տեսախցիկի սցենարը:
Քայլ 4: Arduino ռոբոտ
Վերջին քայլը ռոբոտների ծրագրի սցենարն է:
Սա գրված է C ++ - ով և.ino ֆայլ է arduino uno- ի համար: Requiresրագիրը պահանջում է ros գրադարան, որը կարելի է գտնել գրադարանների մենեջերում `ide- ի շրջանակներում: Երբ սա ներմուծվում է, կան օրինակ ֆայլեր, ես ընտրեցի ընդլայնել led blink ֆայլը, քանի որ դա նույն նպատակն էր, ինչ ինձ պետք էր: Theրագիրը շարունակում է շրջվել մինչև հոսանքի անջատումը, առաջին հերթին նա լսում է թեման ռոբոտին, երբ այդ թեմայից հրաման է բռնում, նա կունենա if հայտարարություն ՝ տեսնելու, թե ինչ է ասում հրամանը: Եթե հրամանը մնացել է, ապա սցենարը գործարկում է ձախ շրջադարձի մեթոդը, եթե հրամանը ճիշտ է, այն կգործարկի աջ շրջադարձի մեթոդը, իսկ հակառակ դեպքում ՝ առաջընթաց մեթոդը: Այս երեք մեթոդները շատ նման են միմյանց: Նրանք ասում են, որ թվային կապումներն ունենան OWԱOWՐ (ստորերկրյա) կամ 100 (PWM), որպեսզի ռոբոտը շատ արագ չլինի `ասելով, որ վարորդը թույլ տա լարման ելք: Այս ելքերի հաջորդականությունն այն է, ինչը ստիպում է ռոբոտին թեքվել ձախ և աջ կամ առաջ գնալ, դա պայմանավորված է շարժիչներին գնացող լարման կողմնորոշմամբ:
Կից ներկայացված է.ino arduino- ի սցենարը:
Քայլ 5: Փորձարկում
Պատկերները կցված են այնպես, որ նախագիծը սկզբից մինչև վերջ: Առաջին նկարը ցույց է տալիս ընթացքի մեջ գտնվող ուսուցումը: Ավարտվելուց հետո ցուցադրվում է պատրաստված մոդելի տպում: Երրորդ պատկերը ցույց է տալիս կանխատեսում վերապատրաստման սցենարից: սա վերապատրաստման սցենարի վերջին փուլն է: Եթե նայեք թղթապանակում, որտեղ գտնվում է ուսուցման սցենարը, ապա կազմվել է գրաֆիկ և մոդել: Գրաֆիկը պետք է նման լինի նկարի 4 -ին, սա ցույց է տալիս վերապատրաստման պատմությունը սկզբից մինչև վերջ:
Վերջնական պատկերը pi տեսախցիկի սցենարն աշխատելիս է, դա pi տեսախցիկից ուղիղ հեռարձակում է: յուրաքանչյուր շրջանակի վրա կատարվում է կանխատեսում, և կանխատեսումը տպվում է տերմինալում: Շրջանակը ցույց է տալիս այն, ինչ տեսախցիկը տեսնում է:
Կից ներկայացնում եմ այս նախագծի իմ համալսարանի հաշվետվությունը: Խնդրում ենք կարդալ նախագծի ավելի մանրամասն:
Քայլ 6: Բոլոր լրացուցիչ ֆայլերը
Դրանցից մի քանիսը փորձարկման ֆայլեր էին, որոնք ես պատրաստել էի ճանապարհին:
Խորհուրդ ենք տալիս:
Մանրանկարչություն RGB LED նշանների հավաքում (պինդ գույն) ՝ 4 քայլ
Մանրանկարչություն RGB LED նշանների հավաքում (պինդ գույն). Այս հրահանգում ես կցանկանայի պատմել, թե ինչպես եմ կառուցել այս LED նշանը տարբեր միջոցառումներում օգտագործելու համար: Ես սիրում եմ լուսավորվող նախագծերը, և ես վերջերս շահագրգռված եմ լուսավորող նշաններ անել համաժողովների և տոնավաճառների համար, որտեղ մենք կարող ենք ինչ-որ բան ցուցադրել
Նշանների հայտարարման համակարգ `5 քայլ
Նշանների հայտարարման համակարգ. Նախորդ հրահանգում մենք տեսանք, թե ինչպես ստիպել ձեր Arduino- ն խոսել: Այսօր մենք մի փոքր ավելի մանրամասն կքննարկենք նույն թեման: Մենք բոլորս պետք է կյանքում ինչ -որ պահի հանդիպած լինենք Հայտարարությունների համակարգին, գուցե բանկում կամ երկաթուղային կայարանում: Երբևէ շահե՞լ ես
Հավասարակշռող ռոբոտ / 3 անիվի ռոբոտ / STEM ռոբոտ ՝ 8 քայլ
Հավասարակշռող ռոբոտ / 3 անիվի ռոբոտ / STEM ռոբոտ. Մենք կառուցել ենք համակցված հավասարակշռող և եռանիվ ռոբոտ `կրթական օգտագործման համար դպրոցներում և դպրոցից հետո կրթական ծրագրերում: Ռոբոտը հիմնված է Arduino Uno- ի, սովորական վահանի վրա (շինարարության բոլոր մանրամասները տրամադրված են), Li Ion մարտկոցի տուփով (բոլորը կառուցված են
Ձայնի ճանաչման ունակությամբ առաջնորդող ռոբոտ ՝ 7 քայլ (նկարներով)
Ձայնի ճանաչման գործառույթ ունեցող ուղեցույց ռոբոտը. Idingեկավարող ռոբոտը շարժական ռոբոտ է, որը մենք պատրաստել ենք այցելուներին մեր քոլեջի տարբեր բաժիններ ուղղորդելու համար: Մենք ստիպեցինք խոսել մի քանի կանխորոշված հայտարարություններ և առաջ և հետ շարժվել ըստ մուտքային ձայնի: Մեր քոլեջում մենք ունենք
VRBOT (Ձայնի ճանաչման ռոբոտ) ՝ 10 քայլ (նկարներով)
VRBOT (Ձայնի ճանաչման ռոբոտ). Այս հրահանգում մենք պատրաստելու ենք ռոբոտ (ավելի շատ նման է RC մեքենայի), որը կառավարվում է ձայնով, այսինքն `Ձայնի ճանաչում: Նախքան որևէ այլ մանրամասներ տալը, պետք է իմանալ, որ սա Ձայնի ճանաչում է, այլ ոչ թե Խոսքի ճանաչում, որը նշանակում է