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

Դեմքի հետևման սարք: Python և Arduino ՝ 5 քայլ
Դեմքի հետևման սարք: Python և Arduino ՝ 5 քայլ

Video: Դեմքի հետևման սարք: Python և Arduino ՝ 5 քայլ

Video: Դեմքի հետևման սարք: Python և Arduino ՝ 5 քայլ
Video: LW11 AGPTEK Smartwatch IP68: что нужно знать // Лучшие бюджетные часы на АлиЭкспресс 2024, Նոյեմբեր
Anonim
Image
Image
Դեմքի հետևման սարք: Python և Arduino
Դեմքի հետևման սարք: Python և Arduino
Դեմքի հետևման սարք: Python և Arduino
Դեմքի հետևման սարք: Python և Arduino

Ըստ Techovator0819 Իմ Youtube ալիքի Հետևեք հեղինակի ավելին.

IoT. Եղանակի արկղ (հարմարեցված ահազանգերով և ժամաչափերով)
IoT. Եղանակի արկղ (հարմարեցված ահազանգերով և ժամաչափերով)
IoT. Եղանակի արկղ (հարմարեցված ահազանգերով և ժամաչափերով)
IoT. Եղանակի արկղ (հարմարեցված ահազանգերով և ժամաչափերով)
Բազմաֆունկցիոնալ ինքնավար ռոբոտ. «Ակտիվ»
Բազմաֆունկցիոնալ ինքնավար ռոբոտ. «Ակտիվ»
Բազմաֆունկցիոնալ ինքնավար ռոբոտ. «Ակտիվ»
Բազմաֆունկցիոնալ ինքնավար ռոբոտ. «Ակտիվ»

Մասին: Ես պարզապես սիրում եմ նոր բաներ պատրաստել: Ինչպես միկրոկարգավորիչների, մեխանիկական ճարտարագիտության, արհեստական բանականության, համակարգչային գիտության և ընդհանրապես ինձ հետաքրքրող բաների նման: Եվ այստեղ դուք կգտնեք բոլոր… Ավելին Techovator0819- ի մասին »

Բարև բոլորին, ովքեր կարդում են այս հրահանգը: Սա դեմքի հետևող սարք է, որն աշխատում է OpenCV կոչվող պիթոնի գրադարանում: CV- ն նշանակում է «Համակարգչային տեսողություն»: Հետո ես ստեղծեցի սերիական ինտերֆեյս իմ համակարգչի և իմ Arduino UNO- ի միջև: Այսպիսով, դա նշանակում է, որ սա չի աշխատում միայն Python- ի վրա:

Այս սարքը կճանաչի ձեր դեմքը, այնուհետև որոշակի հրամաններ է ուղարկում Arduino- ին ՝ տեսախցիկը այնպես տեղադրելու համար, որ այն մնա շրջանակի ներսում: Թույն է հնչում? Եկեք անմիջապես մտնենք դրա մեջ:

Պարագաներ

1. Arduino UNO

2. 2 x Servo Motors (serանկացած servo շարժիչ լավ կլինի, բայց ես օգտագործել եմ Tower Pro SG90)

3. Python- ի տեղադրում

4. OpenCV- ի տեղադրում

5. Վեբ-տեսախցիկ

Քայլ 1: Տեղադրեք Python և OpenCV

Python- ի տեղադրումը բավականին պարզ է:

www.python.org/downloads/

Կարող եք հետևել վերը նշված հղմանը ՝ պիթոնի տարբերակը (Mac, Windows կամ Linux) ներբեռնելու համար, որն առավել հարմար է ձեզ (64 բիթ կամ 32 բիթ): Մնացած տեղադրման գործընթացը պարզ է, և դուք կառաջնորդվեք ինտերֆեյսի միջոցով:

Տեղադրումն ավարտելուց հետո բացեք ձեր հրամանի տողը և մուտքագրեք հետևյալը.

pip տեղադրել opencv-python

Դա պետք է տեղադրի openCV գրադարանը: Նկարահանումների դժվարության դեպքում կարող եք ստուգել ԱՅՍ էջը:

Շրջակա միջավայրի և բոլոր նախադրյալների ստեղծումից հետո եկեք տեսնենք, թե իրականում ինչպես կարող ենք դա կառուցել:

Քայլ 2: Որո՞նք են Haar- ի նման հատկությունները:

Haar- ի նման հատկությունները թվային պատկերի առանձնահատկություններ են: Անունը գալիս է Haar ալիքներից: Սրանք քառակուսի ալիքների ընտանիք են, որոնք օգտագործվում են թվային պատկերի առանձնահատկությունները նույնականացնելու համար: Haar cascades- ը հիմնականում դասակարգիչ է, որն օգնում է մեզ հայտնաբերել օբյեկտները (մեր դեպքում ՝ դեմքերը) ՝ օգտագործելով haar- ի նման հատկությունները:

Մեր դեպքում, պարզության համար, մենք կօգտագործենք նախապես պատրաստված Haar Cascades- ը `դեմքերը ճանաչելու համար: Կարող եք հետևել github էջի ԱՅՍ հղմանը և ներբեռնել Haar Cascade- ի xml ֆայլը:

1. Սեղմեք 'haarcascade_frontalface_alt.xml'

2. Կտտացրեք կոճակի պատուհանի վերևի աջ մասում գտնվող «Հում» կոճակին:

3. Այն ձեզ կուղղորդի մեկ այլ էջ `միայն տեքստով:

4. Աջ սեղմեք և կտտացրեք «Պահել որպես..»:

5. Պահեք այն նույն գրացուցակում կամ թղթապանակում, ինչ պիտոնի կոդը, որը դուք գրում եք:

Քայլ 3: Կոդավորում Python- ում

ներմուծել cv2

ներմուծել numpy as np ներմուծել սերիական ներմուծման ժամանակը

Մենք ներմուծում ենք բոլոր անհրաժեշտ գրադարանները:

ard = serial. Serial («COM3», 9600)

Մենք ստեղծում ենք սերիական օբյեկտ ՝ «ard» անունով: Մենք նաև նշում ենք նավահանգստի անունը և BaudRate- ը որպես պարամետրեր:

face_cascade = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml')

Մենք ստեղծում ենք մեկ այլ օբյեկտ մեր Հաար կասկադի համար: Համոզվեք, որ HaarCascade ֆայլը մնում է նույն պանակում, ինչ այս python ծրագիրը:

vid = cv2. VideoCapture (0)

Մենք ստեղծում ենք օբյեկտ, որը տեսախցիկից տեսանյութեր է գրավում: 0 որպես պարամետր նշանակում է իմ համակարգչին միացված առաջին վեբ -տեսախցիկը:

docs.opencv.org/2.4/modules/objdetect/doc/cascade_classification.html

իսկական True:

_, frame = vid.read ()#կարդում է ընթացիկ շրջանակը փոփոխական շրջանակին gray = cv2.cvtColor (շրջանակ, cv2. COLOR_BGR2GRAY)#փոխակերպում է շրջանակ -> մոխրագույն պատկերով#հետևյալ տողը դեմքեր է հայտնաբերում: #Առաջին պարամետրն այն պատկերն է, որի վրա ցանկանում եք հայտնաբերել #minSize = () - ում նշվում է դեմքի նվազագույն չափը պիքսելներով #Կտտացրեք վերևի հղմանը ՝ Կասկադի դասակարգման դեմքերին ավելին իմանալու համար = face_cascade.detectMultiScale (մոխրագույն, minSize = (80, 80), min Հարևաններ = 3) #A for loop ՝ դեմքերը հայտնաբերելու համար: (x, y, w, h) դեմքերի համար. cv2. ուղղանկյուն (շրջանակ, (x, y), (x+w, y+h), (255, 0, 0), 2)#նկարում է ուղղանկյուն շուրջը դեմքը Xpos = x+(w/2)#հաշվարկում է դեմքի կենտրոնի X կոորդինատը: Ypos = y+(h/2) #հաշվարկում է դեմքի կենտրոնի Y- ի կոորդինատը, եթե Xpos> 280: #Հետևյալ ծածկագիրը արգելափակում է դեմքի արդի լինելը ձախ, աջ, վերև կամ ներքև ՝ ժամանակի համեմատ: քուն (0.01) #շրջանակի կենտրոն: elif Xpos 280: ard.write ('D'.encode ()) time.sleep (0.01) elif Ypos <200: ard.write (' U'.encode ()) time.sleep (0.01) else: ard.write ('S'.encode ()) time.sleep (0.01) ընդմիջում cv2.imshow (' շրջանակ ', շրջանակ)#ցուցադրում է շրջանակը առանձին պատուհանում: k = cv2.waitKey (1) & 0xFF եթե (k == ord ('q')): #if 'q' սեղմված է ստեղնաշարի վրա, այն դուրս է գալիս while հանգույցից: ընդմիջում

cv2.destroyAllWindows () #փակում է բոլոր պատուհանները

ard.close () #փակում է սերիական հաղորդակցությունը

vid.release () #դադարեցնում է վեբ տեսախցիկից տեսանյութեր ստանալը:

Քայլ 4. Arduino- ի ծրագրավորում

Ազատորեն փոփոխեք ծրագիրը ՝ ըստ ձեր կարիքներին համապատասխանող ապարատային կարգավորման:

#ներառում

Servo servoX;

Servo servoY;

int x = 90;

int y = 90;

void setup () {

// տեղադրեք ձեր տեղադրման կոդը այստեղ ՝ մեկ անգամ գործարկելու համար. Serial.begin (9600); servoX.attach (9); servoY.attach (10); servoX. գրել (x); servoY. գրել (y); ուշացում (1000); }

char մուտքագրում = ""; // սերիական մուտքագրումը պահվում է այս փոփոխականի մեջ

դատարկ շրջան () {

// տեղադրեք ձեր հիմնական կոդը այստեղ ՝ բազմիցս գործարկելու համար. // տվյալները կարդում է փոփոխականի մեջ, եթե (մուտքագրում == 'U') {servoY.write (y+1); // կարգավորում է servo անկյունը ըստ մուտքի y += 1; // թարմացնում է անկյունի արժեքը} else if (մուտքագրում == 'D') {servoY.write (y-1); y -= 1; } else {servoY.write (y); } if (մուտքագրում == 'L') {servoX.write (x-1); x -= 1; } else if (մուտքագրում == 'R') {servoX.write (x+1); x += 1; } else {servoX.write (x); } մուտքագրում = ""; // մաքրում է փոփոխականը} // գործընթացը անընդհատ կրկնում է !!:)}

Քայլ 5: Եզրակացություն

Սա գեղեցիկ և ինտերակտիվ միջոց է, որի միջոցով կարող եք նախագծել ներառել համակարգչային տեսլականը ձեր Arduino նախագծերում: Համակարգչային տեսլականը իրականում բավականին զվարճալի է: Եվ ես իսկապես հույս ունեմ, որ ձեզ դուր եկավ: Եթե այո, ասեք ինձ մեկնաբանություններում: Եվ խնդրում եմ բաժանորդագրվեք իմ youtube ալիքին: Նախապես շնորհակալություն <3 <3

youtube.com/channel/UCNOSfI_iQ7Eb7-s8CrExGfw/videos

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