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

Արդյո՞ք դա Ձեռք է: (Raspberry Pi Camera + Neural Network) Մաս 1/2: 16 քայլ (նկարներով)
Արդյո՞ք դա Ձեռք է: (Raspberry Pi Camera + Neural Network) Մաս 1/2: 16 քայլ (նկարներով)

Video: Արդյո՞ք դա Ձեռք է: (Raspberry Pi Camera + Neural Network) Մաս 1/2: 16 քայլ (նկարներով)

Video: Արդյո՞ք դա Ձեռք է: (Raspberry Pi Camera + Neural Network) Մաս 1/2: 16 քայլ (նկարներով)
Video: ԿԱՏՈՒ ՇՆԵՐ ՁԿՆԿՆԵՐԻ ԵՎ ԹՈՒԹԱԿՆԵՐԻ ՇՈՒԿԱ ՕԴԵՍԱ ՉԻ ԲԵՐՈՒՄ Փետրվարի 14-ի ԹՈՓ 5 շները. 2024, Նոյեմբեր
Anonim
Արդյո՞ք դա Ձեռք է: (Raspberry Pi Camera + Neural Network) Մաս 1/2
Արդյո՞ք դա Ձեռք է: (Raspberry Pi Camera + Neural Network) Մաս 1/2
Արդյո՞ք դա Ձեռք է: (Raspberry Pi Camera + Neural Network) Մաս 1/2
Արդյո՞ք դա Ձեռք է: (Raspberry Pi Camera + Neural Network) Մաս 1/2
Արդյո՞ք դա Ձեռք է: (Raspberry Pi Camera + Neural Network) Մաս 1/2
Արդյո՞ք դա Ձեռք է: (Raspberry Pi Camera + Neural Network) Մաս 1/2

Մի քանի օր առաջ ես մարզասրահում վնասեցի աջ ձեռքի դաստակը: Հետո ամեն անգամ, երբ ես օգտագործում էի համակարգչային մկնիկս, այն մեծ ցավ էր պատճառում դաստակի կտրուկ անկյան պատճառով:

Այդ ժամանակ այն հարվածեց ինձ «հիանալի չէ՞ր, եթե մենք կարողանայինք ցանկացած մակերես վերածել թրեքփադի» և չգիտեմ ինչու, բայց ինչ -ինչ պատճառներով ես մտածեցի նրա մասին, ՆՐԱ ֆիլմը, թույլ կտամ ձեզ դա հասկանալ դուրս Դա հուզիչ միտք էր, բայց ես չգիտեի, թե կարո՞ղ եմ դա անել, որոշեցի փորձել:

Այս հոդվածը ներկայացնում է այն, ինչ ստացվել է դրանից:

Նախքան սկսելը ես ունեմ հերքում-

«Այս հոդվածի վերջում ես չկարողացա որևէ մակերես վերածել տախտակի, բայց շատ բան չսովորեցի և մեծ գործիքներ ավելացրեցի իմ զինանոցին: Հուսով եմ, որ դա տեղի կունենա նաև ձեզ հետ »

Եկեք սկսենք.

Քայլ 1: Տեսանյութ

Image
Image

Ահա մի փոքրիկ 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: Տեսանյութ

Image
Image

3 րոպեանոց տեսանյութ, որը բացատրում է մնացած բոլոր քայլերը: Նայել.

Քայլ 13: Պիտակավորում

Պիտակավորում
Պիտակավորում
Պիտակավորում
Պիտակավորում
Պիտակավորում
Պիտակավորում

Եթե ցանկանում եք, որ նյարդային ցանցը դուրս գա ձեռքի գտնվելու վայրը, մենք պետք է այն վարժեցնենք այնպիսի ձևով, այսինքն ՝ ի տարբերություն նախորդ նյարդային ցանցի, որտեղ յուրաքանչյուր պատկեր պիտակավորված էր կամ ձեռքով և առանց ձեռքով: Այս անգամ ձեռքով բոլոր պատկերները կունենան չորս պիտակներ, որոնք համապատասխանում են այդ պատկերի ձեռքի շուրջ տուփի սահմանագծման կոորդինատներին:

Csv ֆայլի կից պատկերը պարունակում է պիտակներ յուրաքանչյուր պատկերի համար: Խնդրում ենք նկատի ունենալ, որ կոորդինատները նորմալացվում են պատկերի չափսերով, այսինքն, եթե վերին X կոորդինատը պատկերի մեջ 320 -րդ պիքսելն է `640 պիքսել լայնությամբ, մենք այն կնշենք որպես 0,5:

Քայլ 14: GUI- ի պիտակավորում

Պիտակավորման GUI
Պիտակավորման GUI
Պիտակավորման GUI
Պիտակավորման GUI
Պիտակավորման GUI
Պիտակավորման GUI
Պիտակավորման GUI
Պիտակավորման GUI

Ձեզ կարող է հետաքրքրել, թե ինչպես ես կարողացա պիտակավորել բոլոր 82 պատկերները: Երբ պատկերը բեռնվում է GUI- ում: Ես ձախ կոճակը վերին կոորդինատում եմ, իսկ աջը `ներքևի կոորդինատը` ձեռքի շուրջ հավանական սահմանային վանդակում: Այս կոորդինատները գրվում են ֆայլի վրա, որից հետո ես սեղմում եմ հաջորդ կոճակը ՝ հաջորդ պատկերը բեռնելու համար: Ես կրկնեցի այս ընթացակարգը բոլոր 82 գնացքների և 4 փորձնական պատկերների համար: Երբ պիտակները պատրաստ էին, արդեն մարզման ժամանակն էր:

Քայլ 15: Անհրաժեշտ են գրադարաններ

Անհրաժեշտ են գրադարաններ
Անհրաժեշտ են գրադարաններ
Պահանջվում են գրադարաններ
Պահանջվում են գրադարաններ
Պահանջվում են գրադարաններ
Պահանջվում են գրադարաններ

Նախ պետք է բեռնել բոլոր անհրաժեշտ գրադարանները: Որը ներառում է

  • PIL պատկերի մանիպուլյացիայի համար,
  • matplotlib գծագրման համար,
  • թմրություն մատրիցային աշխատանքի համար,
  • os օպերացիոն համակարգից կախված ֆունկցիոնալության համար և
  • Կերաս նյարդային ցանցի համար:

Քայլ 16: Մնացած բջիջները

Մնացած բջիջները
Մնացած բջիջները
Մնացած բջիջները
Մնացած բջիջները
Մնացած բջիջները
Մնացած բջիջները
Մնացած բջիջները
Մնացած բջիջները

2 -րդ, 3 -րդ, 4 -րդ և 5 -րդ բջիջներում մենք պատկերները տեղադրում ենք numpy զանգվածում և csv ֆայլից ստեղծում ենք քառաչափ զանգված ՝ որպես պիտակներ հանդես գալու: Թիվ 6 բջիջում մենք ստեղծում ենք մեր նյարդային ցանցը: Դրա ճարտարապետությունը նույնական է դասակարգման համար օգտագործվող նյարդային ցանցին, բացառությամբ ելքային շերտի չափի, որը 4 է և ոչ 1: Մեկ այլ տարբերություն գալիս է օգտագործվող կորստի գործառույթից, որը նշանակում է միջին քառակուսի սխալ: Թիվ 8 բջիջում մենք սկսում ենք մեր նյարդային ցանցի ուսուցումը, երբ ես վերապատրաստվել եմ: Այս մոդելը փորձարկումների արդյունքում ստացա կանխատեսումներ `սահմանափակող տուփի կոորդինատների ծածկման տուփի համար, որոնք բավականին ճշգրիտ տեսք ունեին:

Շնորհակալություն կարդալու համար:

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