Բովանդակություն:
- Քայլ 1: Տեսանյութ
- Քայլ 2: Սարքավորումներ
- Քայլ 3: Կոդի կտոր
- Քայլ 4: Պատկերներ ստանալը
- Քայլ 5: Օգտագործված գործիքներ և լեզու
- Քայլ 6: Տվյալների պատրաստում վերապատրաստման համար
- Քայլ 7: Նյարդային ցանց
- Քայլ 8. Նյարդային ցանցի ուսուցում
- Քայլ 9. Նյարդային ցանցի փորձարկում
- Քայլ 10: Արդյունք և հաջորդ մաս…
- Քայլ 11: Օբյեկտի հայտնաբերում
- Քայլ 12: Տեսանյութ
- Քայլ 13: Պիտակավորում
- Քայլ 14: GUI- ի պիտակավորում
- Քայլ 15: Անհրաժեշտ են գրադարաններ
- Քայլ 16: Մնացած բջիջները
Video: Արդյո՞ք դա Ձեռք է: (Raspberry Pi Camera + Neural Network) Մաս 1/2: 16 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:51
Մի քանի օր առաջ ես մարզասրահում վնասեցի աջ ձեռքի դաստակը: Հետո ամեն անգամ, երբ ես օգտագործում էի համակարգչային մկնիկս, այն մեծ ցավ էր պատճառում դաստակի կտրուկ անկյան պատճառով:
Այդ ժամանակ այն հարվածեց ինձ «հիանալի չէ՞ր, եթե մենք կարողանայինք ցանկացած մակերես վերածել թրեքփադի» և չգիտեմ ինչու, բայց ինչ -ինչ պատճառներով ես մտածեցի նրա մասին, ՆՐԱ ֆիլմը, թույլ կտամ ձեզ դա հասկանալ դուրս Դա հուզիչ միտք էր, բայց ես չգիտեի, թե կարո՞ղ եմ դա անել, որոշեցի փորձել:
Այս հոդվածը ներկայացնում է այն, ինչ ստացվել է դրանից:
Նախքան սկսելը ես ունեմ հերքում-
«Այս հոդվածի վերջում ես չկարողացա որևէ մակերես վերածել տախտակի, բայց շատ բան չսովորեցի և մեծ գործիքներ ավելացրեցի իմ զինանոցին: Հուսով եմ, որ դա տեղի կունենա նաև ձեզ հետ »
Եկեք սկսենք.
Քայլ 1: Տեսանյութ
Ահա մի փոքրիկ 5 րոպեանոց տեսանյութ, որը ներառում է բոլոր քայլերը: Նայել.
Քայլ 2: Սարքավորումներ
Ես ազնվամորու պի եմ տեղադրել ազնվամորու պի տեսախցիկի հետ մոտ 45 սմ բարձրության վրա: Սա մեզ տալիս է տեսախցիկի տակ գտնվող մոտ 25x25 սմ մոնիտորինգի տարածք:
Ազնվամորու pi և ազնվամորու pi տեսախցիկը հեշտությամբ մատչելի են, պարզապես google- ում այն պետք է կարողանաք գտնել տեղական խանութ:
Նայեք այս հղմանը կամ իմ Raspberry pi երգացանկից մեկին `ձեր անգլուխ pi- ն գործարկելու համար:
Այս կարգավորումից հետո մեզ պետք է կոդի մի կտոր, որը որոշում է, թե արդյոք տեսախցիկի կողմից վերահսկվող տարածքում կա ձեռք, և եթե այո, որտեղ է այն:
Քայլ 3: Կոդի կտոր
Կոդի մի կտոր, որը թույլ է տալիս մեզ որոշել, թե արդյոք հետաքրքրության ոլորտում ձեռք կա, օգտագործում է նյարդային ցանց կոչվողը: Նրանք պատկանում են ծրագրավորման այն կատեգորիայի, որտեղ մենք որոշում չենք կայացնում որոշումներ կայացնելու կանոններ, բայց մենք ցույց ենք տալիս նյարդային ցանցին բավականաչափ տվյալներ, որոնք ինքնուրույն կանոններ են մշակում:
Մեր դեպքում, ձեռքի տեսքը կոդավորելու փոխարեն մենք ցույց ենք տալիս նյարդային ցանցի պատկերներ, որոնք վերցված են ազնվամորու պիից, որը պարունակում է ձեռք և որը չի պարունակում ձեռք: Այս փուլը կոչվում է նյարդային ցանցի ուսուցում, իսկ օգտագործված պատկերները `վերապատրաստման տվյալների հավաքածու:
Քայլ 4: Պատկերներ ստանալը
Ես հեռավոր մուտք գործեցի իմ ազնվամորու pi և նկարեցի մի քանի պատկեր ՝ օգտագործելով հետևյալ հրամանը.
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o frame%04d.jpg
Ես նկարել եմ 80 պատկեր ձեռքով և 80 պատկեր, որը ձեռքը չի պարունակում: 160 պատկեր բավարար չէ նյարդային ցանցը ճիշտ վարժեցնելու համար, բայց պետք է բավարար լինի հասկացության ապացույցի համար:
Բացի 160 պատկերներից, ես ավելացրի ևս 20 պատկեր `մեր ցանցը փորձարկելուց հետո փորձարկելու համար:
Երբ տվյալների հավաքածուն պատրաստ էր, ես սկսեցի գրել նյարդային ցանցի կոդը:
Քայլ 5: Օգտագործված գործիքներ և լեզու
Ես գրել եմ իմ նյարդային ցանցը Python խորը ուսուցման գրադարանում, որը կոչվում է Keras, և կոդը գրված է anaconda navigator- ի jupyter նոթատետրում:
Քայլ 6: Տվյալների պատրաստում վերապատրաստման համար
Նախ (Պատկեր #1) Ես ներառեցի այս նախագծի համար անհրաժեշտ բոլոր գրադարանները, որոնք ներառում են PIL, matplotlib, numpy, os և Keras: Պիթոնի նոթատետրի երկրորդ բջիջում (Պատկեր #2) ես սահմանում եմ տվյալների բազայի ուղիներ և տպում եմ նմուշների քանակը: Այժմ մենք պետք է բեռնենք բոլոր պատկերները մի խիտ զանգվածի մեջ, ուստի երրորդ բջիջում (Պատկեր #2) ես ստեղծեցի 82 թվային զանգված (ձեռքի նմուշի թիվ) +75 (ոչ ձեռքի նմուշի քանակ), այսինքն ՝ 157x100x100x3: 157 -ը իմ ունեցած պատկերների ընդհանուր թիվն է, 100x100- ը մեր չափափոխված պատկերի չափումն է, 3 -ը `պատկերի կարմիր, կանաչ և կապույտ գույնի շերտերի համար:
Չորրորդ և հինգերորդ վանդակում մենք բեռնում ենք ձեռքով պարունակվող պատկերներ, այնուհետև պատկերներ, որոնք ձեռքը չեն պարունակում անզգայ զանգվածում: Վեցերորդ վանդակում մենք յուրաքանչյուր արժեքը բաժանում ենք 255 -ի, հետևաբար սահմանափակելով 0 -ից 1 -ի արժեքը (Պատկեր #3)
Sorryավում եմ, եթե կցված պատկերները բավականաչափ լավը չեն: Ահա GITHUB պահեստի հղումը, որպեսզի կարողանաք դիտել ծածկագիրը: Մի մոռացեք գրացուցակի ուղիների անունները փոխարինել ձեր ուղով:):
Շարժվելով երկայնքով:
Հաջորդը մենք պետք է պիտակավորենք յուրաքանչյուր պատկեր, այնպես որ մենք ստեղծում ենք 157 երկարությամբ մեկ ծավալային թվային զանգված: Առաջին 82 գրառումները դրված են 1 -ի վրա, իսկ մնացած 75 գրառումները `0 -ի հասցնող նյարդային ցանցի, առաջին 82 պատկերները մի դասարանից են, մնացածը` մյուսից: (Պատկեր #4)
Հիմա եկեք ստեղծենք նյարդային ցանց:
Քայլ 7: Նյարդային ցանց
Իններորդ բջիջում մենք սահմանում ենք մեր նյարդային ցանցը: Այն պարունակում է պտույտի շերտի երեք կրկնություն, որին հաջորդում են maxpool շերտերը `համապատասխանաբար 8, 12 և 16 պտտման ֆիլտրերով: Դրանից հետո մենք ունենք երկու խիտ նյարդային ցանց: Այս քայլի համար կցեք երկու պատկեր: Առաջինը կոդի արտահոսքն է, որը ստեղծում է նյարդային ցանց, իսկ երկրորդը `պատկերային պատկերացում նեյրոնային ցանցի հետ ելքային չափսերով և ծանոթագրված գործողություններով:
Քայլ 8. Նյարդային ցանցի ուսուցում
Տասներորդ բջիջում մենք կարգավորում ենք նյարդային ցանցի օպտիմալացնողը 'adam', իսկ կորստի գործառույթը 'binary_crossentropy': Նրանք մեծ դեր են խաղում ցանցի կշիռների թարմացման գործում: Վերջապես, երբ մենք գործարկում ենք տասնմեկերորդ բջիջը, նյարդային ցանցը սկսում է մարզվել: Մինչ ցանցը մարզվում է, դիտեք կորստի գործառույթը և համոզվեք, որ այն նվազում է:
Քայլ 9. Նյարդային ցանցի փորձարկում
Երբ նյարդային ցանցը մարզվում է, մենք պետք է պատրաստենք թեստային տվյալների հավաքածու: Մենք կրկնում ենք թեստերի տվյալների վրա 3 -րդ, 4 -րդ, 5 -րդ և 6 -րդ բջիջներում ուսուցման հավաքակազմ պատրաստելու ընթացակարգը `փորձարկման հավաքածու ստեղծելու համար: Մենք նաև պիտակներ ենք պատրաստում թեստերի հավաքածուի համար, բայց այս անգամ մենք գործարկում ենք այս տվյալների հավաքածուի մոդելը `կանխատեսումներ ստանալու և ոչ թե մարզվելու համար:
Քայլ 10: Արդյունք և հաջորդ մաս…
Ես ստացա թեստի ճշտությունը 88%, բայց վերցրու դա մի պտղունց աղով, քանի որ այս մոդելը վարժեցնելու և փորձարկելու համար օգտագործվող տվյալները շատ փոքր են և անբավարար են այս մոդելը ճիշտ վարժեցնելու համար:
Ամեն դեպքում, հուսով եմ, որ ձեզ դուր եկավ այս հոդվածը: Այս վարժության իմ մտադրությունը դեռ ավարտված չէ: outգուշացեք 2 -րդ մասից: Հնարավորինս շուտ կբեռնեմ:
Հաջորդ մասում մենք կպատրաստենք մեկ այլ նյարդային ցանց, որը մեզ կասի ձեռքի գտնվելու վայրը ձեռքով հայտնաբերված պատկերի մեջ:
Բոլոր հարցումները ողջունելի են:
Եթե որևէ մեկը շահագրգռված է օգտագործել իմ փոքրիկ տվյալների հավաքածուն, թող ինձ տեղյակ պահի մեկնաբանություններում: Հասանելի կդարձնեմ:
Շնորհակալություն կարդալու համար: Շուտով ձեզ կտեսնեմ երկրորդ մասով, մինչ այդ ինչու չեք ստեղծում և մարզում նյարդային ցանց:
Խմբագրել.- Հաջորդ քայլերը երկրորդ մասի համար են:
Քայլ 11: Օբյեկտի հայտնաբերում
Նախորդ քայլերում մենք ստեղծեցինք NN, որը մեզ ասում է ՝ թեստի պատկերը պարունակում է ձեռք, թե ոչ: Դե հետո ինչ? Եթե NN- ը պատկերը դասում է որպես ձեռք պարունակող, մենք կցանկանայինք իմանալ ձեռքի գտնվելու վայրը: Սա կոչվում է օբյեկտի հայտնաբերում համակարգչային տեսողության գրականության մեջ: Այսպիսով, եկեք վերապատրաստենք NN- ն, որը նույնն է անում:
Քայլ 12: Տեսանյութ
3 րոպեանոց տեսանյութ, որը բացատրում է մնացած բոլոր քայլերը: Նայել.
Քայլ 13: Պիտակավորում
Եթե ցանկանում եք, որ նյարդային ցանցը դուրս գա ձեռքի գտնվելու վայրը, մենք պետք է այն վարժեցնենք այնպիսի ձևով, այսինքն ՝ ի տարբերություն նախորդ նյարդային ցանցի, որտեղ յուրաքանչյուր պատկեր պիտակավորված էր կամ ձեռքով և առանց ձեռքով: Այս անգամ ձեռքով բոլոր պատկերները կունենան չորս պիտակներ, որոնք համապատասխանում են այդ պատկերի ձեռքի շուրջ տուփի սահմանագծման կոորդինատներին:
Csv ֆայլի կից պատկերը պարունակում է պիտակներ յուրաքանչյուր պատկերի համար: Խնդրում ենք նկատի ունենալ, որ կոորդինատները նորմալացվում են պատկերի չափսերով, այսինքն, եթե վերին X կոորդինատը պատկերի մեջ 320 -րդ պիքսելն է `640 պիքսել լայնությամբ, մենք այն կնշենք որպես 0,5:
Քայլ 14: GUI- ի պիտակավորում
Ձեզ կարող է հետաքրքրել, թե ինչպես ես կարողացա պիտակավորել բոլոր 82 պատկերները: Երբ պատկերը բեռնվում է GUI- ում: Ես ձախ կոճակը վերին կոորդինատում եմ, իսկ աջը `ներքևի կոորդինատը` ձեռքի շուրջ հավանական սահմանային վանդակում: Այս կոորդինատները գրվում են ֆայլի վրա, որից հետո ես սեղմում եմ հաջորդ կոճակը ՝ հաջորդ պատկերը բեռնելու համար: Ես կրկնեցի այս ընթացակարգը բոլոր 82 գնացքների և 4 փորձնական պատկերների համար: Երբ պիտակները պատրաստ էին, արդեն մարզման ժամանակն էր:
Քայլ 15: Անհրաժեշտ են գրադարաններ
Նախ պետք է բեռնել բոլոր անհրաժեշտ գրադարանները: Որը ներառում է
- PIL պատկերի մանիպուլյացիայի համար,
- matplotlib գծագրման համար,
- թմրություն մատրիցային աշխատանքի համար,
- os օպերացիոն համակարգից կախված ֆունկցիոնալության համար և
- Կերաս նյարդային ցանցի համար:
Քայլ 16: Մնացած բջիջները
2 -րդ, 3 -րդ, 4 -րդ և 5 -րդ բջիջներում մենք պատկերները տեղադրում ենք numpy զանգվածում և csv ֆայլից ստեղծում ենք քառաչափ զանգված ՝ որպես պիտակներ հանդես գալու: Թիվ 6 բջիջում մենք ստեղծում ենք մեր նյարդային ցանցը: Դրա ճարտարապետությունը նույնական է դասակարգման համար օգտագործվող նյարդային ցանցին, բացառությամբ ելքային շերտի չափի, որը 4 է և ոչ 1: Մեկ այլ տարբերություն գալիս է օգտագործվող կորստի գործառույթից, որը նշանակում է միջին քառակուսի սխալ: Թիվ 8 բջիջում մենք սկսում ենք մեր նյարդային ցանցի ուսուցումը, երբ ես վերապատրաստվել եմ: Այս մոդելը փորձարկումների արդյունքում ստացա կանխատեսումներ `սահմանափակող տուփի կոորդինատների ծածկման տուփի համար, որոնք բավականին ճշգրիտ տեսք ունեին:
Շնորհակալություն կարդալու համար:
Խորհուրդ ենք տալիս:
Arduino MFRC522 ձեռնարկ - արդյո՞ք RFID պիտակը ներկա է, թե հանված: 6 քայլ
Arduino MFRC522 ձեռնարկ - արդյո՞ք RFID պիտակը ներկա է, թե հեռացված է: Այս ձեռնարկը սկզբնապես տեղադրված է High Voltages- ում
Ձայնով կառավարվող ռոբոտի ձեռք. 8 քայլ (նկարներով)
Ձայնով կառավարվող ռոբոտի ձեռք. A.articles {font-size: 110.0%; տառաչափը ՝ համարձակ; տառատեսակ ՝ շեղագիր; տեքստի ձևավորում. ոչ մեկը; ֆոնային-գույնը ՝ կարմիր;} ա. հոդվածներ ՝ սավառնել {ֆոնային-գույնը ՝ սև;} Այս հրահանգը բացատրում է, թե ինչպես կարելի է կառուցել ձայնով կառավարվող ռոբոտացված ձեռք ՝ օգտագործելով
Մագնիսական 3 -րդ ձեռք. 5 քայլ (նկարներով)
Magnetic 3rd Hand. Յուրաքանչյուրը, ով էլեկտրոնիկայի հետ հուզված է խաղում, գիտի, թե որքան կարևոր է 3 -րդ ձեռքը: Այն ձեզ հնարավորություն է տալիս մի ձեռքում պահել զոդը, իսկ մյուսում ՝ եռակցման երկաթը և հեշտությամբ միակցիչին միացնել զոդը: Ես որոշ տնական ձեռքերով օգտագործում էի որոշ
Պարզ և խելացի ռոբոտային ձեռք ՝ օգտագործելով Arduino !!!: 5 քայլ (նկարներով)
Պարզ և խելացի ռոբոտային թև ՝ օգտագործելով Arduino !!! Դա կվերահսկվի `օգտագործելով հիմնական ձեռքը: Ձեռքը կհիշի շարժումները և կխաղա հաջորդականությամբ: Հայեցակարգը նոր չէ, ես գաղափարն ստացել եմ « մինի ռոբոտային ձեռքից `Ստոերպիկի կողմից " Ես ուզում էի
Երրորդ ձեռք ++. Էլեկտրոնիկայի և այլ նուրբ աշխատանքների համար բազմակողմանի օգնության ձեռք. 14 քայլ (նկարներով)
Երրորդ ձեռք ++. Էլեկտրոնիկայի և այլ նուրբ աշխատանքների բազմօգտագործման օգնության ձեռք. Նախկինում ես օգտագործել եմ երրորդ ձեռքերը/օգնության ձեռքերը, որոնք առկա են էլեկտրոնիկայի խանութների ցանցում և հիասթափված եմ դրանց օգտագործելիությունից: Ես երբեք չէի կարող ստանալ տեսահոլովակները հենց այնտեղ, որտեղ ես ուզում էի, կամ ավելի շատ ժամանակ պահանջվեց, քան իրականում պետք էր տեղադրելը