Satura rādītājs:

Žestu vanags: ar žestiem kontrolēts robots, izmantojot saskarni, kas balstīta uz attēlu apstrādi: 13 soļi (ar attēliem)
Žestu vanags: ar žestiem kontrolēts robots, izmantojot saskarni, kas balstīta uz attēlu apstrādi: 13 soļi (ar attēliem)

Video: Žestu vanags: ar žestiem kontrolēts robots, izmantojot saskarni, kas balstīta uz attēlu apstrādi: 13 soļi (ar attēliem)

Video: Žestu vanags: ar žestiem kontrolēts robots, izmantojot saskarni, kas balstīta uz attēlu apstrādi: 13 soļi (ar attēliem)
Video: Part 3 - Lord Jim Audiobook by Joseph Conrad (Chs 13-19) 2024, Jūlijs
Anonim
Žestu vanags: ar žestiem kontrolēts robots, izmantojot saskarni, kas balstīta uz attēlu apstrādi
Žestu vanags: ar žestiem kontrolēts robots, izmantojot saskarni, kas balstīta uz attēlu apstrādi

Gesture Hawk tika demonstrēts TechEvince 4.0 kā vienkārša attēla apstrādes pamatā esoša cilvēka un mašīnas saskarne. Tās lietderība ir tāda, ka, lai vadītu robotu automašīnu, kas darbojas pēc diferenciālās piedziņas principa, nav nepieciešami papildu sensori vai valkājams, izņemot cimdu. Šajā pamācībā mēs iepazīstināsim jūs ar sistēmā izmantoto objektu izsekošanas un žestu noteikšanas principu. Šī projekta avota kodu var lejupielādēt no Github, izmantojot saiti:

1. darbība. Nepieciešamās lietas:

Nepieciešamās lietas
Nepieciešamās lietas
Nepieciešamās lietas
Nepieciešamās lietas
Nepieciešamās lietas
Nepieciešamās lietas
Nepieciešamās lietas
Nepieciešamās lietas
  1. L298N motora vadītājs
  2. DC Motors
  3. Automašīnu robotu šasija
  4. Arduino Uno
  5. LiPo baterijas
  6. Arduino USB kabelis (garš)
  7. OpenCV bibliotēka ar Python

2. darbība: DARBA PRINCIPS:

DARBA PRINCIPS
DARBA PRINCIPS

Gesture Hawk ir trīsfāžu apstrādes sistēma, kā redzams iepriekš redzamajā diagrammā.

3. darbība. IEVADES UZGLABĀŠANA UN APSTRĀDE:

IEVADES UZGLABĀŠANA UN APSTRĀDE
IEVADES UZGLABĀŠANA UN APSTRĀDE

Ievades uztveršanu var saprast plašākās kategorijās, kas norādītas iepriekšējā diagrammā.

Lai iegūtu roku formu no vides, mums jāizmanto noteiktas krāsas maskēšana vai filtrēšana (šajā gadījumā - violeti zila”). Lai to izdarītu, attēls jāpārvērš no BGR uz HSV formātu, ko var izdarīt, izmantojot šādu koda fragmentu.

hsv = cv2.cvtColor (rāmis, cv2. COLOR_BGR2HSV)

Tagad nākamais solis ir atrast vēlamo HSV parametru diapazonu, lai izvilktu roku, izmantojot masku vai filtru. Šim nolūkam labākais veids ir izmantot sliedes, lai atrastu piemērotu diapazonu. Šeit ir šim projektam izmantotās sliežu joslas ekrānuzņēmums.

4. solis:

Attēls
Attēls

5. darbība:

Tālāk ir sniegts koda fragments, lai izveidotu šādu sliežu joslu maskas veidošanai:

importēt cv2

importēt numpy kā npdef nothing (x): pass cv2.namedWindow ('image') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, nothing) cv2.createTrackbar ('l_S ',' image ', 50, 255, nothing) cv2.createTrackbar (' l_V ',' image ', 50, 255, nothing) cv2.createTrackbar (' h_H ',' image ', 130, 255, nekas) cv2. createTrackbar ('h_S', 'image', 255, 255, nothing) cv2.createTrackbar ('h_V', 'image', 255, 255, nothing), kamēr (1): _, frame = img.read ()

hsv = cv2.cvtColor (rāmis, 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. masīvs ([lH, lS, lV]) augstāks_R = np.masīvs ([hH, hS, hV]) maska = cv2.inRange (hsv, apakšējais_R, augstāks_R) res = cv2.bitwise_and (rāmis, rāmis, maska = maska) cv2.imshow ('attēls', res) k = cv2.waitKey (1) & 0xFF if k == 27: break cv2.destroyAllWindows ()

6. darbība: APSTRĀDES DAĻA:

APSTRĀDES DAĻA
APSTRĀDES DAĻA

Mēs esam ieguvuši rokas ģeometrisko formu, tagad ir pienācis laiks to izmantot un izmantot, lai noskaidrotu rokas žestu.

Izliekts korpuss:

Caur izliektu korpusu mēs cenšamies ievietot aptuvenu daudzstūri, izmantojot formas galējos punktus. Kreisajā pusē esošajā attēlā redzams aptuvenais daudzstūris, kas tika piešķirts formai ar izliektiem punktiem, kas atzīmēti ar sarkanu.

Izliekti punkti ir tie formas punkti, kas atrodas vistālāk no šī aptuvenā daudzstūra malas. Bet problēma ar izliektu korpusu ir tāda, ka tās aprēķināšanas laikā mēs iegūsim visu izliekto punktu masīvu, bet mums ir nepieciešams zils smails izliekts punkts. Mēs jums pateiksim, kāpēc tas ir nepieciešams.

Lai atrastu šo izliekto punktu, mums jāizmanto perpendikulārā attāluma formula, lai atrastu izliektā punkta attālumu ar tuvāko malu. Mēs novērojām, ka zilajam punktam ir maksimālais attālums no sāniem, un tāpēc mēs iegūstam šo punktu.

7. darbība:

Attēls
Attēls

8. darbība

Attēls
Attēls

Tālāk mums jāatrod līnijas slīpums, kas savieno īkšķa galu (vai galējo punktu) ar šo izliekto punktu ar horizontāli.

9. darbība

Attēls
Attēls

Iepriekš minētajā gadījumā leņķim α jābūt no 0 līdz 90 grādiem, ja žests ir vērsts pa kreisi. Tas ir iedegums (α) jābūt pozitīvam.

10. darbība:

Attēls
Attēls

Iepriekš minētajā gadījumā leņķim α jābūt no 180 līdz 90 grādiem, ja žests ir vērsts pa labi. Tas ir iedegums (α) jābūt negatīvam.

Tāpēc, ja iedegums α ir pozitīvs, tad pagriezieties pa kreisi. Ja iedegums α ir negatīvs, tad pagriezieties pa labi. Tagad ir pienācis laiks uzzināt, kā noteikt vissvarīgāko apturēšanas komandu.

Šeit tiek pārbaudīta noteikta attiecība (atrasta pēc trāpījuma un izmēģinājuma), un maksimālajos gadījumos šī attālumu attiecība paliek šajā konkrētajā diapazonā.

11. darbība:

Attēls
Attēls

Visbeidzot, priekšējās kustības žests tiek analizēts, izmantojot OpenSV funkciju matchShape (). Šī funkcija salīdzina divu skaitītāju formu, šajā gadījumā, starp treniņa piemēru par treknumu iepriekšējā attēlā ar kontūru iepriekšējā attēla kreisajā pusē. Tas atgriež vērtību, kas svārstās no 0 līdz 2 vai 3, atkarībā no divu kontūru formas variācijām. Identiski vienādai kontūrai tas atgriež 0.

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

Šeit cn1 un cnt2 ir divas kontūras, kuras jāsalīdzina.

12. darbība: KUSTĪBU VADĪBA:

KUSTĪBU KONTROLE
KUSTĪBU KONTROLE

PySerial:

Mēs izmantojām PySerial python bibliotēku, lai apstrādātos datus pārvērstu sērijas datos, lai tos nosūtītu Arduino Uno, izmantojot Arduino USB kabeli. Tiklīdz opencv atklāja konkrētu žestu, mēs izveidojām pagaidu mainīgo, teiksim “x” un piešķīrām tam kādu unikālu vērtību un pārveidojām to par sērijveida ievadi, izmantojot šādu komandrindu:-

importēt sēriju #importēt Pyserial bibliotēku

serial. Serial ('', baudrate = '9600', timeout = '0') # iestatot seriālo izvadi.. PORTA NOSAUKUMS ir ostas nosaukums, ar kuru notiks datu pārraide.

serial.write (b'x ') # x ir alfabēts, kas nosūtīts uz portu … b ir pārveidot šo virkni par baitiem.

Arduino apstrāde:

Tagad arduino ir kodēts tādā veidā, ka katrs atšķirīgais seriālais x ir lineāri piesaistīts noteiktai darbībai, kas ir atbildīga par robota vienmērīgu kustību (teiksim, kreisā žesta noteikšana iedarbinās motorus labajā pusē, lai pagrieztos pa kreisi). Mēs varam kontrolēt katra riteņa kustību translatīvi, kā arī rotācijas kārtībā, pareizi mainot kodu.

L298N Motora vadītājs:-

Motora draiveris tiek izmantots kā starpnieks starp motoru un barošanas avotu, jo motorus nevar tieši darbināt zemā sprieguma dēļ. Li-Po akumulators ir savienots ar tā 12 V ieejas spaili, un mēs savienojam arduino 5 V kontaktligzdu ar motora vadītāja 5 V ieejas ligzdu, beidzot savienojot Li-Po zemējumu, kā arī arduino motora vadītāja kopējā zemes ligzdā.

Tagad motoru spailes ir savienotas norādītajās kontaktligzdās. Visbeidzot, mēs pievienojam motora ieejas spaili arduino PWM izejas ligzdām, ļaujot mums brīvi izlemt kustības rotācijas un tulkošanas aspektus.

Ieteicams: