Orodha ya maudhui:

Hawk ya Ishara: Roboti Iliyodhibitiwa na Ishara ya Mkono Kutumia Picha ya Usindikaji wa Picha: Hatua 13 (na Picha)
Hawk ya Ishara: Roboti Iliyodhibitiwa na Ishara ya Mkono Kutumia Picha ya Usindikaji wa Picha: Hatua 13 (na Picha)

Video: Hawk ya Ishara: Roboti Iliyodhibitiwa na Ishara ya Mkono Kutumia Picha ya Usindikaji wa Picha: Hatua 13 (na Picha)

Video: Hawk ya Ishara: Roboti Iliyodhibitiwa na Ishara ya Mkono Kutumia Picha ya Usindikaji wa Picha: Hatua 13 (na Picha)
Video: Axcellerator (боевик, научная фантастика), полнометражный фильм 2024, Juni
Anonim
Hawk ya Ishara: Roboti Iliyodhibitiwa na Ishara ya Mkono Kutumia Picha ya Usindikaji wa Picha
Hawk ya Ishara: Roboti Iliyodhibitiwa na Ishara ya Mkono Kutumia Picha ya Usindikaji wa Picha

Hawk ya ishara ilionyeshwa katika TechEvince 4.0 kama picha rahisi ya usindikaji wa picha kulingana na kiunganishi cha mashine za kibinadamu. Huduma yake iko katika ukweli kwamba hakuna sensorer za ziada au za kuvaa isipokuwa glavu inahitajika kudhibiti gari la roboti ambalo linaendesha kwa kanuni ya kutofautisha. Katika hii inayoweza kufundishwa, tutakupitisha kupitia kanuni inayofanya kazi nyuma ya ufuatiliaji wa kitu na ugunduzi wa ishara uliotumika kwenye mfumo. Nambari ya chanzo ya mradi huu inaweza kupakuliwa kutoka Github kupitia kiunga:

Hatua ya 1: MAMBO YANATAKIWA:

MAMBO YANATAKIWA
MAMBO YANATAKIWA
MAMBO YANATAKIWA
MAMBO YANATAKIWA
MAMBO YANATAKIWA
MAMBO YANATAKIWA
MAMBO YANATAKIWA
MAMBO YANATAKIWA
  1. L298N Dereva wa Pikipiki
  2. Motors za DC
  3. Chassis ya gari la Robot
  4. Arduino Uno
  5. Betri za LiPo
  6. Kebo ya USB ya Arduino (ndefu)
  7. Maktaba ya OpenCV na Chatu

Hatua ya 2: KANUNI ZA KUFANYA KAZI:

KANUNI YA KUFANYA KAZI
KANUNI YA KUFANYA KAZI

Hawk ya ishara ni mfumo wa usindikaji wa awamu tatu kama unaweza kuona kwenye mchoro hapo juu.

Hatua ya 3: Pembeza picha na mchakato:

Ingiza Picha na Utaratibu
Ingiza Picha na Utaratibu

Kukamata pembejeo kunaweza kueleweka katika kategoria pana zilizopewa kwenye mchoro hapo juu.

Ili kutoa umbo la mkono kutoka kwa mazingira, tunahitaji kutumia kuficha au kuchuja rangi dhahiri (katika kesi hii - zambarau bluu '). Ili kufanya hivyo unahitaji kubadilisha picha kutoka kwa muundo wa BGR hadi HSV ambayo inaweza kufanywa kwa kutumia kijisehemu cha nambari.

hsv = cv2.cvt Rangi (fremu, cv2. COLOR_BGR2HSV)

Sasa, hatua inayofuata ni kupata anuwai inayotarajiwa ya vigezo vya HSV kutoa mkono kupitia kinyago au kichungi. Kwa hili, njia bora ni kutumia baa za kufuatilia kwa kutafuta safu inayofaa. Hapa kuna picha ya skrini ya mwambaa wa wimbo uliotumika kwa mradi huu.

Hatua ya 4:

Picha
Picha

Hatua ya 5:

Hapa, kuna kijisehemu cha nambari kimepewa hapa chini ili kufanya trackbar kama hiyo kwa ujenzi wa kinyago:

kuagiza cv2

kuagiza numpy kama npdef chochote (x): pita cv2.namedWindow ('image') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, hakuna kitu) cv2.createTrackbar ('l_S ',' picha ', 50, 255, hakuna kitu) cv2.createTrackbar (' l_V ',' image ', 50, 255, hakuna kitu) cv2.createTrackbar (' h_H ',' image ', 130, 255, hakuna kitu) cv2. kuundaTrackbar ('h_S', 'picha', 255, 255, hakuna chochote) cv2.createTrackbar ('h_V', 'image', 255, 255, hakuna kitu) wakati (1): _, frame = img.read ()

hsv = cv2.cvtColor (fremu, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'image') lS = cv2.getTrackbarPos ('l_S', 'picha') lV = cv2.getTrackbarPos ('l_V' 'picha') hH = cv2.getTrackbarPos ('h_H', 'image') hS = cv2.getTrackbarPos ('h_S', 'image') hV = cv2.getTrackbarPos ('h_V', 'image') lower_R = np. safu ([lH, lS, lV]) ya juu_R = np.rray ([hH, hS, hV]) mask = cv2.inRange (hsv, lower_R, higher_R) res = cv2.bitwise_and (fremu, sura, mask = mask) cv2.imshow ('picha', res) k = cv2.waitKey (1) & 0xFF ikiwa k == 27: kuvunja cv2.destroyAllWindows ()

Hatua ya 6: SEHEMU YA UTARATIBU:

Sehemu ya Kusindika
Sehemu ya Kusindika

Kweli, tuna sura ya kijiometri ya mkono, sasa ni wakati wa kuitumia na kuitumia kugundua ishara ya mkono.

Convex Hull:

Kupitia kibanda cha mbonyeo, tunajaribu kutoshea poligoni inayokadiriwa kupitia alama kali zilizopo kwenye umbo. Picha iliyopo kushoto inaonyesha poligoni inayokadiriwa ambayo ilikuwa imepewa umbo na vidokezo vya mbonyeo vilivyowekwa alama nyekundu.

Pointi za mbonyeo ni zile alama katika umbo ambazo ziko mbali zaidi kutoka upande wa poligoni hii inayokadiriwa. Lakini, shida na kibanda cha mbonyeo ni kwamba wakati wa hesabu yake, tutapata safu ya vidokezo vyote lakini kile tunachohitaji ni nukta ya bluu iliyoelekezwa. Tutakuambia kwanini inahitajika.

Ili kupata nukta hii ya mbonyeo, tunahitaji kutumia fomula ya umbali wa moja kwa moja ya kutafuta umbali wa hatua ya mbonyeo na upande wa karibu. Tuliona kuwa alama ya samawati ina umbali wa juu kutoka upande na kwa hivyo tunapata hatua hii.

Hatua ya 7:

Picha
Picha

Hatua ya 8:

Picha
Picha

Ifuatayo tunahitaji kupata mwelekeo wa mstari unaojiunga na ncha ya kidole gumba (au hatua iliyokithiri) kwa nukta hii ya mbonyeo na usawa.

Hatua ya 9:

Picha
Picha

Katika kesi hiyo hapo juu, angle α inapaswa kuwa kati ya digrii 0 hadi 90 ikiwa ishara ni ya zamu ya kushoto. Hiyo ni tan (α) inapaswa kuwa nzuri.

Hatua ya 10:

Picha
Picha

Katika kesi hiyo hapo juu, angle α inapaswa kuwa kati ya nyuzi 180 hadi 90 ikiwa ishara ni ya zamu ya kulia. Hiyo ni tan (α) inapaswa kuwa hasi.

Kwa hivyo, ikiwa Tan α ni chanya, basi Zungusha kushoto. Ikiwa Tan α ni hasi, basi Geuka kulia. Sasa, wakati wake wa kuona jinsi ya kugundua amri muhimu zaidi ya kuacha.

Hapa, uwiano maalum (uliopatikana na hit na jaribio) unachunguzwa na katika hali ya juu uwiano huu wa umbali unabaki katika upeo huu.

Hatua ya 11:

Picha
Picha

Mwishowe, ishara ya mwendo wa mbele inachambuliwa na kazi ya mechiShape () katika OpenCV. Kazi hii inalinganisha sura ya kaunta mbili, katika kesi hii, kati ya mfano wa mafunzo juu ya viti kwenye picha hapo juu na contour upande wa kushoto wa picha hapo juu. Inarudisha thamani kutoka 0 hadi 2 au 3, kulingana na tofauti iliyopo kwa sura ya mtaro miwili. Kwa contour sawa, inarudi 0.

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

Hapa, cn1 na cnt2 ndio mikondo miwili ambayo inapaswa kulinganishwa.

Hatua ya 12: UDHIBITI WA MWENDO:

UDHIBITI WA MWENDO
UDHIBITI WA MWENDO

PySerial:

Tulitumia maktaba ya PySerial ya chatu kubadilisha data iliyosindikwa kuwa data ya serial kuwasilisha kwa Arduino Uno kupitia Cable ya Arduino USB. Mara tu ishara fulani ilipogunduliwa na opencv tuliunda ubadilishaji wa muda mfupi sema 'x' na kuipatia thamani ya kipekee na kuibadilisha kuwa ingizo la serial kwa kutumia laini ya amri ifuatayo: -

kuagiza serial # kuingiza maktaba ya Pyserial

serial.

serial.write (b'x ') # x ni herufi iliyotumwa bandarini… b ni kubadilisha kamba hii kuwa ka.

Usindikaji wa Arduino:

Sasa arduino imeorodheshwa kwa njia ambayo kila safu tofauti ya x imewekwa sawa kwa hatua fulani inayohusika na mwendo laini wa roboti (sema kugundua ishara ya kushoto itasababisha motors kulia kulia). Tunaweza kudhibiti mwendo wa kila gurudumu kwa tafsiri na pia kwa kuzungusha kwa kubadilisha nambari vizuri.

L298N Dereva wa gari: -

Dereva wa gari hutumiwa kama mpatanishi kati ya chanzo cha umeme na nguvu kwani motors haziwezi kuwezeshwa moja kwa moja kwa sababu ya viwango vya chini vya voltage. Li-Po Battery imeunganishwa na kituo chake cha kuingiza cha 12V na tunaunganisha tundu la arduino la 5V na tundu la uingizaji la dereva wa 5V mwishowe unganisha ardhi ya Li-Po na arduino kwenye tundu la kawaida la dereva wa gari.

Sasa vituo vya motors vimeunganishwa kwenye soketi zilizopewa. Mwishowe tunaunganisha vituo vya kuingiza kwa motor na soketi za PWM za pato la arduino inayotuachia huru kuamua mambo ya kuzunguka na kutafsiri ya mwendo kwa usahihi.

Ilipendekeza: