Talaan ng mga Nilalaman:
- Hakbang 1: KINAKAILANGAN ANG MGA BAGAY:
- Hakbang 2: PRINCIPLE NG TRABAHO:
- Hakbang 3: INPUT CAPTURE AT PAMPROSESO:
- Hakbang 4:
- Hakbang 5:
- Hakbang 6: BAHAGI NG PAMPROSESO:
- Hakbang 7:
- Hakbang 8:
- Hakbang 9:
- Hakbang 10:
- Hakbang 11:
- Hakbang 12: KONTROL SA PAGGANYAK:
- Hakbang 13:
Video: Gesture Hawk: Kamay na Kinokontrol ng Robot na Kamay Gamit ang Pagproseso ng Imahe Batay sa Interface: 13 Mga Hakbang (na may Mga Larawan)
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
Ang Gesture Hawk ay ipinakita sa TechEvince 4.0 bilang isang simpleng interface ng pagpoproseso ng imahe batay sa human-machine interface. Ang utility nito ay nakasalalay sa katotohanan na walang karagdagang mga sensor o naisusuot maliban sa isang guwantes ang kinakailangan upang makontrol ang robotic car na tumatakbo sa kaugalian ng prinsipyo ng drive. Sa itinuturo na ito, dadalhin ka namin sa prinsipyo ng pagtatrabaho sa likod ng pagsubaybay sa object at pagtuklas ng kilos na ginamit sa system. Maaaring ma-download ang source code ng proyektong ito mula sa Github sa pamamagitan ng link:
Hakbang 1: KINAKAILANGAN ANG MGA BAGAY:
- L298N Motor Driver
- DC Motors
- Mga chassis ng kotse sa robot
- Arduino Uno
- Mga baterya ng LiPo
- Arduino USB Cable (haba)
- OpenCV Library na may Python
Hakbang 2: PRINCIPLE NG TRABAHO:
Ang Gesture Hawk ay isang sistema ng pagproseso ng tatlong yugto tulad ng nakikita mo sa diagram sa itaas.
Hakbang 3: INPUT CAPTURE AT PAMPROSESO:
Ang pag-capture ng input ay maaaring maunawaan sa mas malawak na mga kategorya na ibinigay sa diagram sa itaas.
Upang makuha ang hugis ng kamay mula sa kapaligiran, kailangan naming gumamit ng masking o pagsala ng isang tiyak na kulay (sa kasong ito - violet blue '). Upang magawa iyon kailangan mong i-convert ang imahe mula sa BGR patungong format na HSV na maaaring gawin sa pamamagitan ng paggamit ng sumusunod na code snippet.
hsv = cv2.cvtColor (frame, cv2. COLOR_BGR2HSV)
Ngayon, ang susunod na hakbang ay upang hanapin ang nais na saklaw ng mga parameter ng HSV upang makuha ang kamay sa pamamagitan ng mask o filter. Para sa mga ito, ang pinakamahusay na paraan ay ang paggamit ng mga track bar para sa paghahanap ng angkop na saklaw. Narito ang screenshot ng isang track bar na ginamit para sa proyektong ito.
Hakbang 4:
Hakbang 5:
Dito, mayroong isang code snippet na ibinigay sa ibaba upang makagawa ng tulad ng isang trackbar para sa pagtatayo ng mask:
import cv2
import numpy as npdef nothing (x): pass cv2.namedWindow ('image') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, wala) cv2.createTrackbar ('l_S ',' image ', 50, 255, wala) cv2.createTrackbar (' l_V ',' image ', 50, 255, wala) cv2.createTrackbar (' h_H ',' image ', 130, 255, wala) cv2. createTrackbar ('h_S', 'image', 255, 255, wala) cv2.createTrackbar ('h_V', 'image', 255, 255, wala) habang (1): _, frame = img.read ()
hsv = cv2.cvtColor (frame, 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') lower_R = np. array ([lH, lS, lV]) mas mataas_R = np.array ([hH, hS, hV]) mask = cv2.inRange (hsv, lower_R, higher_R) res = cv2.bitwise_and (frame, frame, mask = mask) cv2.imshow ('imahe', res) k = cv2.waitKey (1) & 0xFF kung k == 27: masira ang cv2.destroyAllWindows ()
Hakbang 6: BAHAGI NG PAMPROSESO:
Sa gayon, nakuha namin ang isang geometriko na hugis ng isang kamay, oras na upang samantalahin ito at gamitin ito upang malaman ang kilos ng kamay.
Convex Hull:
Sa pamamagitan ng convex hull, sinusubukan naming magkasya sa isang tinatayang polygon sa pamamagitan ng matinding mga puntos na naroroon sa hugis. Ipinapakita ng imahe na nasa kaliwa ang tinatayang polygon na naitalaga sa hugis na may mga puntos na convex na minarkahan ng pula.
Ang mga puntos ng convex ay ang mga puntong nasa hugis na pinakamalayo mula sa isang gilid ng tinatayang polygon na ito. Ngunit, ang problema sa convex hull ay habang sa pagkalkula nito, makakakuha kami ng isang hanay ng lahat ng mga convex point ngunit ang kailangan namin ay ang asul na matulis na convex point. Sasabihin namin sa iyo kung bakit kinakailangan ito.
Upang mahanap ang convex point na ito, kailangan naming ilapat ang patayo na formula ng distansya para sa paghahanap ng distansya ng convex point na may pinakamalapit na panig. Napansin namin na ang asul na matulis na point ay nagtataglay ng maximum na distansya mula sa gilid at sa gayon nakukuha natin ang puntong ito.
Hakbang 7:
Hakbang 8:
Susunod na kailangan nating hanapin ang pagkahilig ng linya na sumasali sa dulo ng hinlalaki (o ang matinding punto) sa convex point na ito na may pahalang.
Hakbang 9:
Sa kaso sa itaas, Ang anggulo α ay dapat na nasa pagitan ng 0 hanggang 90 degree kung ang kilos ay para sa kaliwang pagliko. Ang tan (α) na iyon ay dapat na positibo.
Hakbang 10:
Sa kaso sa itaas, Ang anggulo α ay dapat na nasa pagitan ng 180 hanggang 90 degree kung ang kilos ay para sa tamang pagliko. Iyon ay tan (α) ay dapat na negatibo.
Samakatuwid, Kung ang Tan α ay positibo, pagkatapos ay Kaliwa. Kung ang Tan α ay negatibo, pagkatapos ang Pag-right turn. Ngayon, oras na upang makita kung paano makita ang pinakamahalagang utos ng paghinto.
Dito, isang tinukoy na ratio (natagpuan ng hit at trial) ay susuriin at sa mga maximum na kaso ang ratio ng mga distansya na ito ay mananatili sa partikular na saklaw na ito.
Hakbang 11:
Sa Huli, ang kilos ng paggalaw ng foreward ay sinusuri ng pag-andar ng matchShape () sa OpenCV. Inihahambing ng pagpapaandar na ito ang hugis ng dalawang mga countors, sa kasong ito, sa pagitan ng halimbawa ng pagsasanay sa thright sa itaas na larawan sa tabas sa kaliwang bahagi ng imahe sa itaas. Nagbabalik ito ng isang halaga mula 0 hanggang 2 o 3, ayon sa pagkakaiba-iba na naroroon sa hugis ng dalawang mga contour. Para sa magkatulad na tabas, nagbabalik ito ng 0.
ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)
Dito, ang cn1 at cnt2 ay ang dalawang contour na maihahambing.
Hakbang 12: KONTROL SA PAGGANYAK:
PySerial:
Gumamit kami ng PySerial library ng python upang i-convert ang naprosesong data sa serial data upang maiparating sa Arduino Uno sa pamamagitan ng Arduino USB Cable. Kapag ang isang partikular na kilos ay napansin ng opencv lumikha kami ng isang pansamantalang variable na sabihin na 'x' at itinalaga dito ang ilang natatanging halaga at na-convert ito sa serial input gamit ang sumusunod na linya ng utos: -
i-import ang serial # sa pag-import ng Pyserial library
serial. Serial ('', baudrate = '9600', timeout = '0') # pagse-set up ng serial output.. PORT NAME ang pangalan ng port kung saan magaganap ang paghahatid ng data.
serial.write (b'x ') # x ang alpabeto na ipinadala sa port … b ay upang i-convert ang string na ito sa mga byte.
Pagproseso ng Arduino:
Ngayon ang arduino ay naka-code sa isang paraan na ang bawat magkakaibang serial x ay linear na nai-map sa ilang mga aksyon na responsable para sa isang makinis na paggalaw ng robot (sabihin ang pagtuklas ng kaliwang kilos ay magpapalitaw sa mga motor sa kanan upang lumiko sa kaliwa). Maaari naming makontrol ang paggalaw ng bawat gulong sa pagsasalin pati na rin ang pag-ikot sa pamamagitan ng pagbabago ng maayos ang code.
L298N Motor driver: -
Ginamit ang Motor Driver bilang tagapamagitan sa pagitan ng motor at pinagmulan ng kuryente dahil ang motor ay hindi maaaring direktang mapagana dahil sa mababang mga rating ng boltahe. Ang Li-Po Battery ay konektado sa 12V input terminal nito at ikinonekta namin ang 5V socket ng arduino sa 5V input socket ng driver ng motor na sa wakas ay nagkokonekta sa lupa ng Li-Po pati na rin ang arduino sa isang karaniwang ground socket ng motor driver.
Ngayon ang mga terminal ng mga motor ay konektado sa mga socket na ibinigay. Sa wakas ay ikonekta namin ang mga terminal ng pag-input para sa motor sa mga socket ng output ng PWM ng arduino na nagpapahintulot sa amin na malaya na magpasya nang wasto ang mga aspeto ng pag-ikot at pagsasalin ng paggalaw.
Inirerekumendang:
DC MOTOR Kamay sa Pagkontrol sa Gesture sa Kamay at Direksyon Gamit ang Arduino: 8 Hakbang
Ang Bilis at Direksyon ng Control ng DC MOTOR na Kamay at Paggamit ng Arduino: Sa tutorial na ito matututunan namin kung paano makontrol ang isang DC motor na may mga kilos ng kamay gamit ang arduino at Visuino. Panoorin ang video! Suriin din ito: Tutorial sa kilos ng kamay
Pagproseso ng Imahe Batay sa Pagkilala sa Sunog at Extinguisher System: 3 Mga Hakbang
Image Processing Batay sa Fire Recognition at Extinguisher System: Kamusta mga kaibigan ito ay isang pagproseso ng imahe batay sa pagtukoy ng apoy at extinguisher system gamit ang Arduino
Pagpoproseso ng Imahe Gamit ang Raspberry Pi: Pag-install ng OpenCV at Paghihiwalay ng Kulay ng Imahe: 4 na Hakbang
Pagpoproseso ng Imahe Gamit ang Raspberry Pi: Pag-install ng OpenCV at Paghihiwalay ng Kulay ng Imahe: Ang post na ito ay ang una sa maraming mga tutorial sa pagproseso ng imahe na susundan. Masusing pagtingin namin sa mga pixel na bumubuo ng isang imahe, matutunan kung paano i-install ang OpenCV sa Raspberry Pi at nagsusulat din kami ng mga script ng pagsubok upang makuha ang isang imahe at c
Batay sa Autonomous na Batay ng Arduino Gamit ang Ultrasonic Sensor: 5 Mga Hakbang (na may Mga Larawan)
Batay ng Autonomous na Batay ng Arduino Paggamit ng Ultrasonic Sensor: Lumikha ng iyong sariling Arduino based Autonomous Bot gamit ang Ultrasonic Sensor. Ang bot na ito ay maaaring lumipat sa sarili nitong walang pag-crash ng anumang mga hadlang. Karaniwan kung ano ang ginagawa nito ay nakita nito ang anumang uri ng mga hadlang sa paraan nito at nagpapasya ang pinakamahusay na pa
I-render ang Mga Imahe ng 3D ng Iyong Mga PCB Gamit ang Eagle3D at POV-Ray: 5 Hakbang (na may Mga Larawan)
I-render ang Mga Imahe ng 3D ng Iyong Mga PCB Gamit ang Eagle3D at POV-Ray: Paggamit ng Eagle3D at POV-Ray, maaari kang gumawa ng makatotohanang mga pag-render ng 3D ng iyong mga PCB. Ang Eagle3D ay isang script para sa EAGLE Layout Editor. Lilikha ito ng isang ray tracing file, na ipapadala sa POV-Ray, na sa paglaon ay lalabas ang pinal na im