Სარჩევი:
- ნაბიჯი 1: საჭირო ნივთები:
- ნაბიჯი 2: მუშაობის პრინციპი:
- ნაბიჯი 3: შეყვანის აღება და დამუშავება:
- ნაბიჯი 4:
- ნაბიჯი 5:
- ნაბიჯი 6: დამუშავების ნაწილი:
- ნაბიჯი 7:
- ნაბიჯი 8:
- ნაბიჯი 9:
- ნაბიჯი 10:
- ნაბიჯი 11:
- ნაბიჯი 12: მოძრაობის კონტროლი:
- ნაბიჯი 13:
ვიდეო: Gesture Hawk: ხელით ჟესტით კონტროლირებადი რობოტი გამოსახულების დამუშავებაზე დაფუძნებული ინტერფეისის გამოყენებით: 13 ნაბიჯი (სურათებით)
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:18
Gesture Hawk გამოჩნდა TechEvince 4.0-ში, როგორც მარტივი გამოსახულების დამუშავება, რომელიც დაფუძნებულია ადამიანსა და მანქანას. მისი სარგებლობა მდგომარეობს იმაში, რომ რობოტული მანქანის გასაკონტროლებლად, რომელიც მუშაობს დიფერენციალური მართვის პრინციპით, არ არის საჭირო დამატებითი სენსორები და ხელთათმანების გარდა. ამ სასწავლო ინსტრუქციაში ჩვენ გაგიმხელთ სისტემაში გამოყენებული ობიექტების თვალყურის დევნისა და ჟესტების გამოვლენის მუშაობის პრინციპს. ამ პროექტის კოდის გადმოწერა შესაძლებელია Github– დან ბმულის საშუალებით:
ნაბიჯი 1: საჭირო ნივთები:
- L298N ძრავის მძღოლი
- DC მოტორსი
- რობოტი მანქანის შასი
- არდუინო უნო
- LiPo ბატარეები
- Arduino USB კაბელი (გრძელი)
- OpenCV ბიბლიოთეკა პითონთან ერთად
ნაბიჯი 2: მუშაობის პრინციპი:
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', 'image') hH = cv2.getTrackbarPos ('h_H', 'image') hS = cv2.getTrackbarPos ('h_S', 'image') hV = cv2.getTrackbarPos ('h_V', 'image') ქვედა_R = np მასივი ([lH, lS, lV]) უმაღლესი_R = np. მასივი ([hH, hS, hV]) ნიღაბი = cv2.inRange (hsv, ქვედა_R, უმაღლესი_R) res = cv2.bitwise_and (frame, frame, mask = mask) cv2.imshow ("სურათი", რეს) 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– ში. ეს ფუნქცია ადარებს ორი მრიცხველის ფორმას, ამ შემთხვევაში, ზემოთ მოყვანილ სურათზე ტრენინგის მაგალითს შორის ზემოთ მოცემული სურათის მარცხენა კონტურს შორის. ის აბრუნებს მნიშვნელობას 0 -დან 2 -მდე ან 3 -მდე, ორი კონტურის ფორმაში არსებული ვარიაციის მიხედვით. იდენტურად იგივე კონტურისთვის, ის ბრუნდება 0.
ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)
აქ, cn1 და cnt2 არის ორი კონტური, რომლებიც უნდა შევადაროთ.
ნაბიჯი 12: მოძრაობის კონტროლი:
PySerial:
ჩვენ გამოვიყენეთ პითონის PySerial ბიბლიოთეკა დამუშავებული მონაცემების სერიულ მონაცემებად გადასაყვანად, Arduino Uno– ს Arduino USB კაბელის საშუალებით გადაცემისთვის. მას შემდეგ რაც კონკრეტული ჟესტი გამოვლინდა opencv– ს მიერ, ჩვენ შევქმენით დროებითი ცვლადი, ვთქვათ ‘x’ და მივანიჭეთ მას უნიკალური მნიშვნელობა და გადავაკეთეთ იგი სერიულ შეყვანად შემდეგი ბრძანების ხაზის გამოყენებით:-
სერიული იმპორტი #Pyserial ბიბლიოთეკის იმპორტისთვის
serial. Serial ('', baudrate = '9600', timeout = '0') # სერიული გამომუშავების დაყენება..პორტის სახელი არის პორტის სახელი, რომლითაც მონაცემთა გადაცემა მოხდება.
serial.write (b'x ') # x არის ანბანი, რომელიც იგზავნება პორტში … b არის ამ სტრიქონის ბაიტებად გადაყვანა.
არდუინოს დამუშავება:
არდუინო არის კოდირებული ისე, რომ თითოეული განსხვავებული სერიული x წრფივად არის ასახული გარკვეულ მოქმედებაზე, რომელიც პასუხისმგებელია რობოტის შეუფერხებელ მოძრაობაზე (ვთქვათ, მარცხენა ჟესტის გამოვლენა გამოიწვევს ძრავების მარჯვნივ გადახვევას). ჩვენ შეგვიძლია გავაკონტროლოთ თითოეული ბორბლის მოძრაობა როგორც თარგმანულად, ასევე ბრუნვით, კოდის სწორად შეცვლით.
L298N ძრავის მძღოლი:-
საავტომობილო დრაივერი გამოიყენება როგორც შუამავალი ძრავასა და ენერგიის წყაროს შორის, რადგან ძრავები არ შეიძლება პირდაპირ იკვებებოდეს დაბალი ძაბვის მაჩვენებლების გამო. Li-Po ბატარეა დაკავშირებულია მის 12 ვ შეყვანის ტერმინალთან და ჩვენ არდუინოს 5 ვ სოკეტს ვუკავშირდებით ძრავის მძღოლის 5 ვ შეყვანის სოკეტს, რომელიც საბოლოოდ აკავშირებს Li-Po– ს მიწას, ასევე არდუინოს ძრავის დრაივერის საერთო ადგილზე.
ახლა ძრავების ტერმინალები დაკავშირებულია მოცემულ სოკეტებთან. დაბოლოს, ჩვენ ვაკავშირებთ ძრავის შეყვანის ტერმინალებს arduino– ს PWM გამომავალ ბუდეებთან, რაც გვაძლევს თავისუფალს, რომ ზუსტად განვსაზღვროთ მოძრაობის ბრუნვისა და თარგმანის ასპექტები.
გირჩევთ:
ჟესტით კონტროლირებადი რობოტი არდუინოს გამოყენებით: 7 ნაბიჯი
ჟესტით კონტროლირებადი რობოტი Arduino– ს გამოყენებით: რობოტები გამოიყენება ბევრ სექტორში, როგორიცაა მშენებლობა, სამხედრო, წარმოება, შეკრება და სხვა. რობოტები შეიძლება იყოს ავტონომიური ან ნახევრად ავტონომიური. ავტონომიურ რობოტებს არ სჭირდებათ ადამიანის ჩარევა და შეუძლიათ დამოუკიდებლად იმოქმედონ სიტუაციის შესაბამისად. Se
ჟესტით კონტროლირებადი მაუსი მიკრო გამოყენებით: ბიტი: 5 ნაბიჯი
ჟესტებით კონტროლირებადი თაგვი მიკრო: ბიტის: შესავალი პროექტი არის ჟესტით კონტროლირებადი თაგვი, ხელთათმანების სახით, მიკრო: ბიტი ჩადგმული მასში. ეს არის პროექტი, რომელიც შთაგონებულია ადრეული იდეით, რომელიც მე მქონდა, როგორც ჩამონტაჟებული ინჟინერი. მე ყოველთვის ვისურვებდი წვდომას უკაბელო მაუსის და კლავიატურის ნაკრებზე
IOT დაფუძნებული ჟესტური კონტროლირებადი რობოტი: 10 ნაბიჯი (სურათებით)
IOT დაფუძნებული ჟესტური კონტროლირებადი რობოტი: ეს რობოტი არის ჟესტით კონტროლირებადი, რომლის კონტროლირება შესაძლებელია ნებისმიერი ადგილიდან ინტერნეტის დახმარებით. ამ პროექტში აქსელერომეტრი MPU 6050 გამოიყენება ჩვენი ხელების მოძრაობის შესახებ მონაცემების შესაგროვებლად. ის ზომავს ჩვენი ხელის აჩქარებას სამში
ხელით ჟესტით კონტროლირებადი RC მანქანა: 15 ნაბიჯი
Hand Gesture Controlled RC Car: Hello World! ეს არის ჩემი პირველი ინსტრუქცია თუ თქვენ გაქვთ რაიმე შეკითხვები - გთხოვთ ნუ დააყოვნებთ კითხვას. სამიზნე აუდიტორია: ეს პროექტი ეხება ყველას, ვისაც აქვს გატაცება ტექნოლოგიასთან დაკავშირებით. ხართ ექსპერტი თუ აბსოლუტური დამწყები
ჟესტით კონტროლირებადი სწავლებადი რობოტი მკლავი Bluetooth– ით Arduino– ში: 4 ნაბიჯი
ჟესტით კონტროლირებადი სწავლებადი რობოტი მკლავი Bluetooth– ით Arduino– ში: მკლავში არის ორი რეჟიმი. პირველ რიგში არის მექანიკური რეჟიმი, რომლის საშუალებითაც შეგიძლიათ მობილურზე გადაიტანოთ ხელი ბლუთუზით, აპიზე სლაიდერების გადაადგილებით. ამავე დროს, თქვენ შეგიძლიათ შეინახოთ თქვენი პოზიციები და შეგიძლიათ ითამაშოთ … მეორე არის ჟესტების რეჟიმი, რომელიც იყენებს თქვენს ph