Isi kandungan:

Hawk Gesture: Robot Dikendalikan Gerak Tangan menggunakan Antaramuka Berdasarkan Pemprosesan Imej: 13 Langkah (dengan Gambar)
Hawk Gesture: Robot Dikendalikan Gerak Tangan menggunakan Antaramuka Berdasarkan Pemprosesan Imej: 13 Langkah (dengan Gambar)

Video: Hawk Gesture: Robot Dikendalikan Gerak Tangan menggunakan Antaramuka Berdasarkan Pemprosesan Imej: 13 Langkah (dengan Gambar)

Video: Hawk Gesture: Robot Dikendalikan Gerak Tangan menggunakan Antaramuka Berdasarkan Pemprosesan Imej: 13 Langkah (dengan Gambar)
Video: Если есть уровень сложности выхода в море в One Piece? Это чудо, что группа людей может отправиться 2024, Julai
Anonim
Hawk Gesture: Robot Dikendalikan Gerak Tangan Tangan Menggunakan Antaramuka Berdasarkan Pemprosesan Imej
Hawk Gesture: Robot Dikendalikan Gerak Tangan Tangan Menggunakan Antaramuka Berdasarkan Pemprosesan Imej

Gesture Hawk dipamerkan di TechEvince 4.0 sebagai antara muka manusia-mesin berasaskan pemprosesan gambar sederhana. Kegunaannya terletak pada kenyataan bahawa tidak diperlukan sensor tambahan atau yang boleh dipakai kecuali sarung tangan untuk mengawal kereta robot yang menggunakan prinsip pemacu pembezaan. Dalam instruksional ini, kami akan memandu anda melalui prinsip kerja di sebalik penjejakan objek dan pengesanan isyarat yang digunakan dalam sistem. Kod sumber projek ini boleh dimuat turun dari Github melalui pautan:

Langkah 1: PERKARA YANG DIPERLUKAN:

PERKARA YANG DIPERLUKAN
PERKARA YANG DIPERLUKAN
PERKARA YANG DIPERLUKAN
PERKARA YANG DIPERLUKAN
PERKARA YANG DIPERLUKAN
PERKARA YANG DIPERLUKAN
PERKARA YANG DIPERLUKAN
PERKARA YANG DIPERLUKAN
  1. Pemandu Motor L298N
  2. Motor DC
  3. Casis kereta robot
  4. Arduino Uno
  5. Bateri LiPo
  6. Kabel USB Arduino (panjang)
  7. Perpustakaan OpenCV dengan Python

Langkah 2: PRINSIP KERJA:

PRINSIP KERJA
PRINSIP KERJA

Gesture Hawk adalah sistem pemprosesan tiga fasa seperti yang anda lihat dalam rajah di atas.

Langkah 3: MASUKKAN DAN PEMPROSESAN:

MASUKKAN DAN PEMPROSESAN
MASUKKAN DAN PEMPROSESAN

Pengambilan input dapat difahami dalam kategori yang lebih luas yang diberikan dalam rajah di atas.

Untuk mengekstrak bentuk tangan dari persekitaran, kita perlu menggunakan pelindung atau penyaringan warna yang pasti (dalam kes ini - biru ungu '). Untuk melakukan itu, anda perlu menukar gambar dari format BGR ke HSV yang dapat dilakukan dengan menggunakan potongan kode berikut.

hsv = cv2.cvtWarna (bingkai, cv2. COLOR_BGR2HSV)

Sekarang, langkah seterusnya adalah mencari rangkaian parameter HSV yang diinginkan untuk mengeluarkan tangan melalui topeng atau penapis. Untuk ini, kaedah terbaik adalah menggunakan bar trek untuk mencari julat yang sesuai. Berikut adalah tangkapan skrin bar trek yang digunakan untuk projek ini.

Langkah 4:

Imej
Imej

Langkah 5:

Di sini, terdapat coretan kod yang diberikan di bawah untuk membuat bar trek untuk pembinaan topeng:

import cv2

import numpy sebagai npdef none (x): lulus cv2.namedWindow ('image') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, none) cv2.createTrackbar ('l_S ',' gambar ', 50, 255, tidak ada) cv2.createTrackbar (' l_V ',' image ', 50, 255, none) createTrackbar ('h_S', 'image', 255, 255, none)

hsv = cv2.cvtColor (bingkai, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'image') lS = cv2.getTrackbarPos ('l_S', 'image') lV = cv2.getTrackbarPos ('l_ 'image') hH = cv2.getTrackbarPos ('h_H', 'image') hS = cv2.getTrackbarPos ('h_S', 'image') hV = cv2.getTrackbarPos ('h_V', 'gambar') rendah_R = np. array ([lH, lS, lV]) lebih tinggi_R = np. array ([hH, hS, hV]) mask = cv2.inRange (hsv, lower_R, Higher_R) res = cv2.bitwise_and (bingkai, bingkai, topeng = topeng) cv2.imshow ('image', res) k = cv2.waitKey (1) & 0xFF jika k == 27: pecahkan cv2.destroyAllWindows ()

Langkah 6: BAHAGIAN PEMPROSESAN:

BAHAGIAN PEMPROSESAN
BAHAGIAN PEMPROSESAN

Baiklah, kita memiliki bentuk geometri tangan, sekarang saatnya untuk memanfaatkannya dan menggunakannya untuk mengetahui gerakan tangan.

Lengkung Cembung:

Melalui lambung cembung, kami cuba memasukkan poligon yang hampir sama dengan titik-titik ekstrem yang terdapat dalam bentuknya. Gambar yang terdapat di sebelah kiri menunjukkan anggaran poligon yang telah ditetapkan pada bentuk dengan titik cembung yang ditandai dengan warna merah.

Titik cembung adalah titik-titik dalam bentuk yang paling jauh dari sisi poligon yang hampir ini. Tetapi, masalah dengan lambung cembung adalah bahawa semasa pengiraannya, kita akan mendapat susunan semua titik cembung tetapi apa yang kita perlukan adalah titik cembung runcing biru. Kami akan memberitahu anda mengapa ia diperlukan.

Untuk mencari titik cembung ini, kita perlu menggunakan formula jarak tegak lurus untuk mencari jarak titik cembung dengan sisi terdekat. Kami memerhatikan bahawa titik runcing biru memiliki jarak maksimum dari sisi dan jadi kami mendapat titik ini.

Langkah 7:

Imej
Imej

Langkah 8:

Imej
Imej

Seterusnya kita perlu mencari kecenderungan garis yang menghubungkan hujung ibu jari (atau titik yang melampau) ke titik cembung ini dengan mendatar.

Langkah 9:

Imej
Imej

Dalam kes di atas, Sudut α harus antara 0 hingga 90 darjah jika isyarat untuk belokan kiri. Itu adalah tan (α) harus positif.

Langkah 10:

Imej
Imej

Dalam kes di atas, Sudut α harus antara 180 hingga 90 darjah jika isyarat untuk belokan kanan. Iaitu tan (α) mestilah negatif.

Oleh itu, Sekiranya Tan α positif, maka pusing Kiri. Sekiranya Tan α negatif, maka Belok kanan. Sekarang, masanya untuk melihat bagaimana mengesan perintah berhenti yang paling penting.

Di sini, nisbah yang ditentukan (dijumpai oleh hit dan percubaan) diperiksa dan dalam kes maksimum nisbah jarak ini tetap berada dalam julat tertentu ini.

Langkah 11:

Imej
Imej

Akhirnya, isyarat gerakan depan dianalisis dengan fungsi matchShape () di OpenCV. Fungsi ini membandingkan bentuk dua pembilang, dalam hal ini, antara contoh latihan pada tegak dalam gambar di atas dengan kontur di sebelah kiri gambar di atas. Ia mengembalikan nilai antara 0 hingga 2 atau 3, sesuai dengan variasi yang ada dalam bentuk dua kontur. Untuk kontur yang sama, ia mengembalikan 0.

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

Di sini, cn1 dan cnt2 adalah dua kontur yang hendak dibandingkan.

Langkah 12: KAWALAN GERAKAN:

KAWALAN GERAKAN
KAWALAN GERAKAN

PySerial:

Kami menggunakan perpustakaan PySerial python untuk menukar data yang diproses menjadi data bersiri untuk disampaikan kepada Arduino Uno melalui Kabel USB Arduino. Setelah isyarat tertentu dikesan oleh opencv, kami membuat pemboleh ubah sementara yang mengatakan ‘x’ dan memberikannya beberapa nilai unik dan menukarnya menjadi input bersiri menggunakan baris perintah berikut: -

import siri #untuk mengimport perpustakaan Pyserial

serial. Serial ('', baudrate = '9600', timeout = '0') # menyiapkan output bersiri.. PORT NAME adalah nama port yang akan digunakan untuk menghantar data.

serial.write (b'x ') # x adalah abjad yang dihantar ke port … b adalah untuk menukar rentetan ini menjadi bait.

Pemprosesan Arduino:

Sekarang arduino dikodkan sedemikian rupa sehingga setiap siri x yang berlainan dipetakan secara linear ke tindakan tertentu yang bertanggungjawab untuk pergerakan robot yang lancar (katakan pengesanan gerak kiri akan memicu motor ke kanan untuk membelok ke kiri). Kita dapat mengawal pergerakan setiap roda secara terjemahan dan berpusing dengan menukar kod dengan betul.

Pemandu Motor L298N: -

Pemandu Motor digunakan sebagai pengantara antara motor dan sumber kuasa kerana motor tidak dapat dihidupkan secara langsung kerana penilaian voltan rendah. Li-Po Battery disambungkan ke terminal input 12V dan kami menyambungkan soket 5V arduino ke soket input 5V pemandu motor akhirnya menghubungkan ground Li-Po serta arduino di soket ground umum pemandu motor.

Sekarang terminal motor disambungkan pada soket yang diberikan. Akhirnya kami menyambungkan terminal input untuk motor ke soket output PWM arduino yang membolehkan kami bebas untuk memutuskan aspek putaran dan terjemahan pergerakan dengan tepat.

Disyorkan: