Përmbajtje:

Gesture Hawk: Roboti i kontrolluar me gjeste duke përdorur ndërfaqen e bazuar në përpunimin e imazhit: 13 hapa (me fotografi)
Gesture Hawk: Roboti i kontrolluar me gjeste duke përdorur ndërfaqen e bazuar në përpunimin e imazhit: 13 hapa (me fotografi)

Video: Gesture Hawk: Roboti i kontrolluar me gjeste duke përdorur ndërfaqen e bazuar në përpunimin e imazhit: 13 hapa (me fotografi)

Video: Gesture Hawk: Roboti i kontrolluar me gjeste duke përdorur ndërfaqen e bazuar në përpunimin e imazhit: 13 hapa (me fotografi)
Video: Часть 4. Аудиокнига Даниэля Дефо «Жизнь и приключения Робинзона Крузо» (гл. 13–16) 2024, Nëntor
Anonim
Gesture Hawk: Robot i kontrolluar me gjeste me dorë duke përdorur ndërfaqen e bazuar në përpunimin e imazhit
Gesture Hawk: Robot i kontrolluar me gjeste me dorë duke përdorur ndërfaqen e bazuar në përpunimin e imazhit

Gesture Hawk u shfaq në TechEvince 4.0 si një ndërfaqe e thjeshtë e përpunimit të imazhit të bazuar në njeri-makinë. Dobia e tij qëndron në faktin se nuk kërkohen sensorë shtesë ose të veshshëm përveç një doreze për të kontrolluar makinën robotike që funksionon në parimin e lëvizjes diferenciale. Në këtë udhëzues, ne do t'ju përcjellim përmes parimit të punës prapa gjurmimit të objekteve dhe zbulimit të gjesteve të përdorura në sistem. Kodi burimor i këtij projekti mund të shkarkohet nga Github përmes lidhjes:

Hapi 1: Gjërat e kërkuara:

Gjërat e kërkuara
Gjërat e kërkuara
Gjërat e kërkuara
Gjërat e kërkuara
Gjërat e kërkuara
Gjërat e kërkuara
Gjërat e kërkuara
Gjërat e kërkuara
  1. Drejtuesi i motorit L298N
  2. DC Motors
  3. Shasia e makinave robot
  4. Arduino Uno
  5. Bateri LiPo
  6. Kabllo USB Arduino (e gjatë)
  7. Biblioteka OpenCV me Python

Hapi 2: PARIMI I PUNS:

PARIMI I PUNS
PARIMI I PUNS

Gesture Hawk është një sistem përpunimi trefazor siç mund ta shihni në diagramin e mësipërm.

Hapi 3: INFUT MAPJE DHE PCRPUNIM:

MAPJA DHE P PRORPUNIMI I INPUTIT
MAPJA DHE P PRORPUNIMI I INPUTIT

Kapja e hyrjes mund të kuptohet në kategoritë më të gjera të dhëna në diagramin e mësipërm.

Për të nxjerrë formën e dorës nga mjedisi, duhet të përdorim maskimin ose filtrimin e një ngjyre të caktuar (në këtë rast - blu vjollce '). Për ta bërë këtë ju duhet të konvertoni imazhin nga BGR në formatin HSV që mund të bëhet duke përdorur fragmentin e mëposhtëm të kodit.

hsv = cv2.cvtColor (kornizë, cv2. COLOR_BGR2HSV)

Tani, hapi tjetër është të gjeni gamën e dëshiruar të parametrave HSV për të nxjerrë dorën përmes maskës ose filtrit. Për këtë, mënyra më e mirë është të përdorni shiritat e pistave për të gjetur një gamë të përshtatshme. Këtu është pamja e ekranit e një shiriti të pistave të përdorur për këtë projekt.

Hapi 4:

Imazhi
Imazhi

Hapi 5:

Këtu, ekziston një fragment kodi i dhënë më poshtë për të bërë një shirit të tillë për ndërtimin e maskave:

import cv2

importoni numpy si npdef asgjë (x): kaloni cv2.namedWindow ('image') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, asgjë) cv2.createTrackbar ('l_S ',' image ', 50, 255, asgjë) cv2.createTrackbar (' l_V ',' image ', 50, 255, asgjë) cv2.createTrackbar (' h_H ',' image ', 130, 255, asgjë) cv2. createTrackbar ('h_S', 'image', 255, 255, asgjë) cv2.createTrackbar ('h_V', 'image', 255, 255, asgjë) ndërsa (1): _, frame = img.read ()

hsv = cv2.cvtColor (kornizë, 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') low_R = np array ([lH, lS, lV]) above_R = np.array ([hH, hS, hV]) mask = cv2.inRange (hsv, low_R, above_R) res = cv2.bitwise_and (frame, frame, mask = mask) cv2.imshow ('image', res) k = cv2.waitKey (1) & 0xFF nëse k == 27: thyej cv2.destroyAllWindows ()

Hapi 6: PJESA E PCRPUNIMIT:

PJESA E PCRPUNIMIT
PJESA E PCRPUNIMIT

Epo, ne kemi formën gjeometrike të një dore, tani është koha ta shfrytëzojmë dhe ta përdorim për të kuptuar gjestin e dorës.

Hull konveks:

Përmes bykut konveks, ne përpiqemi të përshtatim një poligon të përafërt përmes pikave ekstreme të pranishme në formë. Imazhi i pranishëm në të majtë tregon poligonin e përafërt që i ishte caktuar formës me pikat konvekse të shënuara me të kuqe.

Pikat konvekse janë ato pika në formë të cilat janë më të largëta nga një anë e këtij poligoni të përafruar. Por, problemi me bykun konveks është se gjatë llogaritjes së tij, ne do të marrim një grup të të gjitha pikave konveks, por ajo që na nevojitet është pika konveks me majë blu. Ne do t'ju tregojmë pse kërkohet.

Për të gjetur këtë pikë konveks, ne duhet të zbatojmë formulën e distancës pingul për të gjetur distancën e pikës konveks me anën më të afërt. Ne vumë re se pika blu me majë posedon distancë maksimale nga ana dhe kështu e marrim këtë pikë.

Hapi 7:

Imazhi
Imazhi

Hapi 8:

Imazhi
Imazhi

Tjetra ne duhet të gjejmë prirjen e vijës që bashkon majën e gishtit të madh (ose pikën ekstreme) në këtë pikë konveks me horizontale.

Hapi 9:

Imazhi
Imazhi

Në rastin e mësipërm, Këndi α duhet të jetë midis 0 dhe 90 gradë nëse gjesti është për kthesën majtas. Kjo është tan (α) duhet të jetë pozitive.

Hapi 10:

Imazhi
Imazhi

Në rastin e mësipërm, Këndi α duhet të jetë midis 180 dhe 90 gradë nëse gjesti është për kthesën në të djathtë. Kjo është tan (α) duhet të jetë negative.

Prandaj, nëse Tan α është pozitiv, atëherë Ktheni në të majtë. Nëse Tan α është negativ, atëherë kthesa në të djathtë. Tani, është koha për të parë se si të zbuloni komandën më të rëndësishme të ndalimit.

Këtu, një raport i specifikuar (i gjetur me goditje dhe provë) shqyrtohet dhe në rastet maksimale ky raport i distancave mbetet në këtë interval të veçantë.

Hapi 11:

Imazhi
Imazhi

Më në fund, gjesti i lëvizjes përpara analizohet me funksionin matchShape () në OpenCV. Ky funksion krahason formën e dy numëruesve, në këtë rast, midis shembullit të stërvitjes në thight në figurën e mësipërme me konturin në anën e majtë të imazhit të mësipërm. Kthen një vlerë që varion nga 0 në 2 ose 3, sipas ndryshimit të pranishëm në formën e dy kontureve. Për të njëjtën kontur, ai kthehet 0.

ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)

Këtu, cn1 dhe cnt2 janë dy konturet që duhen krahasuar.

Hapi 12: KONTROLLI I LOTVIZJES:

KONTROLLI I LOTVIZJES
KONTROLLI I LOTVIZJES

PySerial:

Ne përdorëm bibliotekën PySerial të python për të kthyer të dhënat e përpunuara në të dhëna serike për t'i komunikuar Arduino Uno përmes kabllos USB Arduino. Pasi një gjest i veçantë u zbulua nga opencv ne krijuam një variabël të përkohshëm thuaj 'x' dhe i caktuam një vlerë unike dhe e konvertuam atë në hyrje serike duke përdorur rreshtin e mëposhtëm të komandës:-

serial import #për të importuar bibliotekën Pyserial

serial. Serial ('', baudrate = '9600', timeout = '0') # vendosja e daljes serike.. EMRI I PORTIT është emri i portës me të cilin do të ndodhë transmetimi i të dhënave.

serial.write (b'x ') # x është alfabeti i dërguar në port … b është për ta kthyer këtë varg në bajt.

Përpunimi i Arduino:

Tani arduino është koduar në mënyrë të tillë që çdo serial x i ndryshëm të përcaktohet në mënyrë lineare në një veprim të caktuar përgjegjës për një lëvizje të qetë të robotit (të themi se zbulimi i gjestit të majtë do t'i nxisë motorët në të djathtë të kthehen majtas). Ne mund të kontrollojmë lëvizjen e secilës rrotë përkthimore si dhe rrotulluese duke ndryshuar kodin siç duhet.

L298N Drejtuesi i motorit:-

Motor Driver përdoret si ndërmjetës midis motorit dhe burimit të energjisë pasi motorët nuk mund të fuqizohen drejtpërdrejt për shkak të vlerësimeve të tensionit të ulët. Bateria Li-Po është e lidhur me terminalin e saj të hyrjes 12V dhe ne lidhim prizën e arduinos me 5V në prizën e hyrjes së motorit 5V të drejtuesit të motorit që lidh tokën përfundimisht të Li-Po, si dhe arduino në një prizë të zakonshme tokësore të drejtuesit të motorit.

Tani terminalet e motorëve janë të lidhur në prizat e dhëna. Së fundi, ne lidhim terminalet e hyrjes për motorin në prizat e daljes PWM të arduino duke na lënë të lirë të vendosim me saktësi aspektet rrotulluese dhe të përkthimit të lëvizjes.

Recommended: