Բովանդակություն:
- Քայլ 1. ՊԱՐՏԱԴԻՐ ԲԱՆԵՐ
- Քայլ 2. ԱՇԽԱՏԱՆՔԻ ՍԿINԲՈՆՔ
- Քայլ 3: Մուտքագրում և վերամշակում
- Քայլ 4:
- Քայլ 5:
- Քայլ 6: ՄՇԱԿՄԱՆ ՄԱՍ
- Քայլ 7:
- Քայլ 8:
- Քայլ 9:
- Քայլ 10:
- Քայլ 11:
- Քայլ 12. Շարժման վերահսկողություն
- Քայլ 13:
Video: Estեստի բազե. Ձեռքի ժեստերով վերահսկվող ռոբոտ ՝ օգտագործելով պատկերի մշակման վրա հիմնված ինտերֆեյսը ՝ 13 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:48
Gesture Hawk- ը ցուցադրվել է TechEvince 4.0-ում ՝ որպես մարդ-մեքենա պատկերների մշակման պարզ միջերես: Դրա օգտակարությունը կայանում է նրանում, որ ռոբոտային մեքենան կառավարելու համար, որը աշխատում է դիֆերենցիալ սկզբունքով, անհրաժեշտ չեն լրացուցիչ սենսորներ կամ հագնելի, բացի ձեռնոցից: Այս ուսանելի հոդվածում մենք ձեզ կներկայացնենք համակարգում օգտագործվող օբյեկտների հետևման և ժեստերի հայտնաբերման աշխատանքի սկզբունքի համաձայն: Այս նախագծի աղբյուրի կոդը կարելի է ներբեռնել Github- ից ՝ հղման միջոցով ՝
Քայլ 1. ՊԱՐՏԱԴԻՐ ԲԱՆԵՐ
- L298N շարժիչ
- DC Motors
- Ռոբոտի մեքենայի շասսի
- Արդուինո Ունո
- LiPo մարտկոցներ
- Arduino USB մալուխ (երկար)
- OpenCV գրադարան Python- ի հետ
Քայլ 2. ԱՇԽԱՏԱՆՔԻ ՍԿINԲՈՆՔ
Gesture Hawk- ը եռաֆազ մշակման համակարգ է, ինչպես կարող եք տեսնել վերը նշված դիագրամում:
Քայլ 3: Մուտքագրում և վերամշակում
Մուտքային գրավումը կարելի է հասկանալ վերը նշված դիագրամում տրված ավելի լայն կատեգորիաներում:
Ձեռքի ձևը միջավայրից հանելու համար մենք պետք է օգտագործենք որոշակի գույնի դիմակավորում կամ զտում (այս դեպքում `մանուշակագույն կապույտ): Դա անելու համար դուք պետք է պատկերը փոխարկեք BGR- ից HSV ձևաչափի, որը կարող է կատարվել ՝ օգտագործելով հետևյալ կոդի հատվածը:
hsv = cv2.cvtColor (շրջանակ, cv2. COLOR_BGR2HSV)
Այժմ, հաջորդ քայլը գտնելը HSV պարամետրերի ցանկալի տիրույթն է ՝ ձեռքը դիմակի կամ զտիչի միջոցով հանելու համար: Դրա համար ամենալավ միջոցը համապատասխան միջակայք գտնելու համար օգտագործեք հետագծեր: Ահա այս նախագծի համար օգտագործվող հետագծի սքրինշոթը:
Քայլ 4:
Քայլ 5:
Ահա, ստորև տրված ծածկագրի մի հատված, որը դիմակ կառուցելու համար նման հետագիծ է պատրաստում.
ներմուծել cv2
ներմուծել numpy որպես npdef ոչինչ (x). անցնել cv2.namedWindow ('image') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, ոչինչ) cv2.createTrackbar ('l_S ',' image ', 50, 255, ոչինչ) cv2.createTrackbar (' l_V ',' image ', 50, 255, ոչինչ) cv2.createTrackbar (' h_H ',' image ', 130, 255, ոչինչ) cv2. createTrackbar ('h_S', 'image', 255, 255, ոչինչ) cv2.createTrackbar ('h_V', 'image', 255, 255, ոչինչ) մինչ (1): _, frame = img.read ()
hsv = cv2.cvtColor (շրջանակ, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'image') lS = cv2.getTrackbarPos ('l_S', 'image') lV = cv2.getTrackbarPos ('l_V', 'պատկեր') hH = cv2.getTrackbarPos ('h_H', 'image') hS = cv2.getTrackbarPos ('h_S', 'image') hV = cv2.getTrackbarPos ('h_V', 'image') lower_R = np զանգված ([lH, lS, lV]) ավելի բարձր_R = np. զանգված ([hH, hS, hV]) դիմակ = cv2.inRange (hsv, lower_R, above_R) res = cv2.bitwise_and (frame, frame, mask = mask) cv2.imshow ('պատկեր', res) k = cv2.waitKey (1) & 0xFF, եթե k == 27: ընդմիջում cv2.destroyAllWindows ()
Քայլ 6: ՄՇԱԿՄԱՆ ՄԱՍ
Դե, մենք ստացել ենք ձեռքի երկրաչափական ձևը, այժմ ժամանակն է այն շահագործել և օգտագործել այն ՝ ձեռքի ժեստը պարզելու համար:
Ուռուցիկ կորպուս:
Ուռուցիկ կորպուսի միջոցով մենք փորձում ենք մոտեցնել պոլիգոնին ձևի մեջ գտնվող ծայրահեղ կետերի միջոցով: Ձախ կողմում գտնվող պատկերը ցույց է տալիս մոտավոր բազմանկյունը, որը նշանակված էր ձևին ՝ կարմիրով նշված ուռուցիկ կետերով:
Ուռուցիկ կետերն այն ձևի այն կետերն են, որոնք ամենահեռավորն են այս մոտավոր բազմանկյունի կողքից: Բայց, ուռուցիկ կորպուսի խնդիրն այն է, որ դրա հաշվարկի ընթացքում մենք կստանանք բոլոր ուռուցիկ կետերի զանգված, բայց այն, ինչ մեզ պետք է, կապույտ սրածայր ուռուցիկ կետն է: Մենք ձեզ կասենք, թե ինչու է դա պահանջվում:
Այս ուռուցիկ կետը գտնելու համար մենք պետք է կիրառենք ուղղահայաց հեռավորության բանաձև ՝ մոտակա կողքով ուռուցիկ կետի հեռավորությունը գտնելու համար: Մենք նկատեցինք, որ կապույտ սրածայր կետն ունի առավելագույն հեռավորություն կողքից, և մենք ստանում ենք այս կետը:
Քայլ 7:
Քայլ 8:
Հաջորդը մենք պետք է գտնենք բութ մատի ծայրը (կամ ծայրահեղ կետը) հորիզոնականով միացնող գծի թեքությունը:
Քայլ 9:
Վերոնշյալ դեպքում α անկյունը պետք է լինի 0 -ից 90 աստիճանի միջև, եթե ժեստը ձախ շրջադարձի համար է: Այսինքն tan (α) պետք է լինի դրական:
Քայլ 10:
Վերոնշյալ դեպքում α անկյունը պետք է լինի 180 -ից 90 աստիճանի միջև, եթե ժեստը աջ շրջադարձի համար է: Այսինքն tan (α) պետք է լինի բացասական:
Հետևաբար, եթե Tan α- ն դրական է, ապա ձախ շրջադարձ: Եթե Tan α- ն բացասական է, ապա աջ շրջադարձ: Այժմ, ժամանակն է տեսնել, թե ինչպես կարելի է հայտնաբերել կանգառի ամենակարևոր հրամանը:
Այստեղ ուսումնասիրվում է որոշակի հարաբերակցությունը (հայտնաբերված հարվածի և փորձարկման միջոցով) և առավելագույն դեպքերում հեռավորությունների հարաբերակցությունը մնում է այս որոշակի տիրույթում:
Քայլ 11:
Վերջապես, առաջ շարժման ժեստը վերլուծվում է matchChape () գործառույթով OpenCV- ում: Այս գործառույթը համեմատում է երկու հաշվիչի ձևը, այս դեպքում, վերը նշված նկարում thight- ի վերապատրաստման օրինակի և վերը նշված պատկերի ձախ կողմում գտնվող եզրագծի միջև: Այն վերադարձնում է 0 -ից 2 կամ 3 -ի արժեքը `ըստ երկու ուրվագծերի ձևի առկա տատանումների: Նույն նույն ուրվագծի համար այն վերադարձնում է 0:
ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)
Այստեղ cn1- ը և cnt2- ը երկու ուրվագծերն են, որոնք պետք է համեմատվեն:
Քայլ 12. Շարժման վերահսկողություն
PySerial:
Մենք օգտագործեցինք Python- ի PySerial գրադարանը ՝ մշակված տվյալները սերիական տվյալների փոխարկելու համար, որոնք Arduino Uno- ին փոխանցվում են Arduino USB մալուխի միջոցով: Opencv- ի կողմից որոշակի ժեստ հայտնաբերելուց հետո մենք ստեղծեցինք «x» ասված ժամանակավոր փոփոխական և դրան հատկացրեցինք ինչ-որ յուրահատուկ արժեք և այն փոխարկեցինք սերիական մուտքագրման ՝ օգտագործելով հետևյալ հրամանի տողը.
ներմուծել սերիա #ներմուծել Pyserial գրադարան
serial. Serial ('', baudrate = '9600', timeout = '0') # սերիական ելքի կարգավորում.. ՊՈՐՏԱՅԻՆ ԱՆՎԱՆԸ այն նավահանգստի անունն է, որով տվյալների փոխանցումը տեղի կունենա:
serial.write (b'x ') # x այբուբենն ուղարկված այբուբենն է … b- ն այս տողը բայթերի փոխարկելն է:
Arduino վերամշակում
Այժմ arduino- ն այնպես է կոդավորված, որ յուրաքանչյուր տարբեր սերիա x գծայինորեն գծված է որոշակի գործողության վրա, որը պատասխանատու է ռոբոտի սահուն շարժման համար (ասենք, ձախ շարժման հայտնաբերումը կհանգեցնի աջ ձախ շարժիչների շարժմանը դեպի ձախ): Մենք կարող ենք վերահսկել յուրաքանչյուր անիվի շարժումը ինչպես թարգմանաբար, այնպես էլ պտույտով ՝ ծածկագիրը ճիշտ փոխելով:
L298N Շարժիչ `-
Motor Driver- ը օգտագործվում է որպես միջնորդ շարժիչի և էներգիայի աղբյուրի միջև, քանի որ շարժիչները չեն կարող ուղղակիորեն սնուցվել ցածր լարման վարկանիշների պատճառով: Li-Po մարտկոցը միացված է իր 12 Վ մուտքային տերմինալին, և մենք arduino- ի 5 Վ վարդակից միացնում ենք շարժիչի վարորդի 5 Վ մուտքային վարդակին, որը վերջապես միացնում է Li-Po- ի գետինը, ինչպես նաև arduino- ն շարժիչի վարորդի ընդհանուր վարդակից:
Այժմ շարժիչների տերմինալները միացված են տրված վարդակների վրա: Ի վերջո, մենք շարժիչի մուտքային տերմինալները միացնում ենք arduino- ի PWM ելքային վարդակներին, ինչը թույլ է տալիս մեզ ազատորեն որոշել շարժման պտտման և թարգմանության ասպեկտները:
Խորհուրդ ենք տալիս:
Պատկերի մշակման վրա հիմնված կրակի ճանաչման և կրակմարիչի համակարգ. 3 քայլ
Պատկերի մշակման վրա հիմնված կրակի ճանաչման և մարման համակարգ. Բարև ընկերներ, սա պատկերի մշակման վրա հիմնված հրդեհի հայտնաբերման և մարման համակարգ է `օգտագործելով Arduino
GSM և Bluetooth- ի վրա հիմնված նյութերի մշակման ռոբոտ ՝ 7 քայլ
GSM և Bluetooth հիմնված նյութերի մշակման ռոբոտ ՝ “ GSM (SMS) և Bluetooth վերահսկվող անլար ռոբոտ ” ռոբոտ է, որն ունակ է կարճ հաղորդագրությունների ծառայության տեսքով ստանալ մի շարք հրամաններ/ ցուցումներ և կատարում է անհրաժեշտ գործողությունները: Մենք կօգտագործենք նվիրված մոդեմ/մոբայլ
Եղանակի վրա հիմնված երաժշտության գեներատոր (ESP8266 վրա հիմնված միջինի գեներատոր). 4 քայլ (նկարներով)
Եղանակի վրա հիմնված երաժշտության գեներատոր (ESP8266 Based Midi Generator). Բարև, այսօր ես կբացատրեմ, թե ինչպես պատրաստել ձեր սեփական եղանակի վրա հիմնված փոքր երաժշտության գեներատոր: Այն հիմնված է ESP8266- ի վրա, որը նման է Arduino- ին և արձագանքում է ջերմաստիճանին, անձրևին: և լույսի ուժգնություն: Մի ակնկալեք, որ այն ամբողջ երգեր կամ ակորդներ կհաղորդի
Ձեռքի ժեստերով վերահսկվող RC մեքենա. 15 քայլ
Hand Gesture Controlled RC Car: Hello World! Սա իմ առաջին հրահանգն է: Եթե ունեք որևէ հարց, խնդրում ենք մի հապաղեք հարցնել: Թիրախային լսարան. Այս նախագիծը կիրառելի է բոլոր նրանց համար, ովքեր կիրք ունեն տեխնոլոգիայի հարցում: Անկախ նրանից, թե մասնագետ եք, թե բացարձակ սկսնակ
Կառուցեք ժեստերով վերահսկվող ռոբոտ. 4 քայլ (նկարներով)
Կառուցեք ժեստերով վերահսկվող ռոբոտ. Այս հրահանգում մենք կառուցում ենք Arcbotics Sparki ռոբոտը, որը կարող է կառավարվել 3D ժեստերով: Այս նախագծի գեղեցիկ առանձնահատկությունն այն է, որ ռոբոտին կառավարելու համար լրացուցիչ սարքեր, ինչպիսիք են սմարթֆոնը կամ ձեռնոցը, անհրաժեշտ չեն: Պարզապես ձեռքը տարեք տարրի վրայով