Բովանդակություն:

Raspberry Pi 4 fficանապարհային նշանների ճանաչման ռոբոտ ՝ 6 քայլ
Raspberry Pi 4 fficանապարհային նշանների ճանաչման ռոբոտ ՝ 6 քայլ

Video: Raspberry Pi 4 fficանապարհային նշանների ճանաչման ռոբոտ ՝ 6 քայլ

Video: Raspberry Pi 4 fficանապարհային նշանների ճանաչման ռոբոտ ՝ 6 քայլ
Video: Raspberry Pi 4: запускаем видео 4K, играем в игры и боремся с перегревом. Обзоры Амперки 2024, Նոյեմբեր
Anonim
Raspberry Pi 4 fficանապարհային նշանների ճանաչման ռոբոտ
Raspberry Pi 4 fficանապարհային նշանների ճանաչման ռոբոտ

Այս հրահանգը հիմնված է իմ համալսարանական ծրագրի վրա: Նպատակն էր ստեղծել այնպիսի համակարգ, որտեղ նյարդային ցանցը վերլուծի պատկերը, այնուհետև ճանաչման հիման վրա արդուինո ռոբոտին ասի շարժվել 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: Բոլոր լրացուցիչ ֆայլերը

Բոլոր լրացուցիչ ֆայլերը
Բոլոր լրացուցիչ ֆայլերը

Դրանցից մի քանիսը փորձարկման ֆայլեր էին, որոնք ես պատրաստել էի ճանապարհին:

Խորհուրդ ենք տալիս: