Pelacakan tangan adalah proses menggunakan computer vision untuk mendeteksi dan mengikuti gerakan tangan seseorang secara real time. Aplikasi pelacakan tangan yang paling dominan ada di headset realitas virtual. Headset memungkinkan Anda menggunakan tangan sebagai input sebagai pengganti pengontrol sentuh. Ini pada gilirannya membuat pengalaman lebih imersif.
Cari tahu cara melacak tangan seseorang menggunakan Python, OpenCV untuk computer vision, dan MediaPipe.
Google mengembangkan kerangka kerja MediaPipe, yang berisi banyak solusi pembelajaran mesin. Salah satu solusinya adalah solusi pelacakan tangan dan jari yang disebut Tangan MediaPipe. Untuk melacak tangan, MediaPipe Hands melakukan dua proses: deteksi telapak tangan dan deteksi tengara.
Deteksi Telapak Tangan
MediaPipe dimulai dengan mengidentifikasi di mana telapak tangan berada di gambar masukan. Karena menaksir kotak pembatas untuk benda kaku lebih sederhana daripada mengidentifikasi tangan dengan jari bersendi.
Deteksi Penanda Tangan
Setelah deteksi telapak tangan, MediaPipe melakukan deteksi penanda tangan. Model penanda tangan dapat memprediksi 21 koordinat tepat dari lokasi setiap penanda tangan.
Angka-angka mewakili pengidentifikasi unik untuk setiap landmark.
Menyiapkan Lingkungan Anda
Untuk mengikuti proyek ini, Anda harus terbiasa dengan dasar-dasar Python. Instal pustaka berikut di lingkungan Anda:
- OpenCV: Anda akan menggunakan perpustakaan ini untuk visi komputer dan melakukan teknik pemrosesan gambar pada gambar masukan.
- MediaPipe: Anda akan menggunakan perpustakaan ini untuk melakukan deteksi dan pelacakan tangan pada gambar masukan.
- imutils: Anda akan perpustakaan ini untuk mengubah ukuran frame video input.
Jalankan perintah berikut di terminal Anda untuk menginstal pustaka OpenCV, MediaPipe, dan imutils. Instal pip—manajer paket Python—jika perlu. Pastikan Anda meneruskan perpustakaan sebagai daftar yang dibatasi ruang.
pip install OpenCV-Python MediaPipe imutils
Saat pembaruan selesai, lingkungan siap bagi Anda untuk memulai pengkodean.
Kode sumber lengkap untuk proyek ini tersedia di dalamnya repositori GitHub.
Mengimpor Perpustakaan yang Diperlukan
Anda harus mengimpor pustaka yang Anda instal agar dapat menggunakannya. Buka apa saja IDE Python, buat file Python, dan tambahkan impor berikut:
impor cv2
impor mediapipe sebagai mp
impor imutil
Pastikan Anda mengimpor OpenCV sebagai cv2 dan MediaPipe dalam huruf kecil. Gagal melakukannya akan menimbulkan kesalahan.
Anda akan menggunakan mpHands untuk memanggil solusi hands MediaPipe, dan objek hands untuk mendeteksi dan melacak input hand. Anda akan menggunakan objek mpDraw untuk menggambar hubungan antara penanda tangan yang teridentifikasi.
mpHands = mp.solusi.tangan
tangan = mpHands. Tangan()
mpDraw = mp.solutions.drawing_utils
Anda dapat menyempurnakan model hands MediaPipe dengan meneruskan berbagai parameter ke konstruktor Hands(). Nilai default cukup baik untuk proyek ini, tetapi Anda dapat bereksperimen dengannya untuk melihat pengaruhnya terhadap model:
Anda harus meninggalkan mode_gambar_statis sebagai False untuk memastikan model mendeteksi jarum sekali sebelum mulai melacaknya. Itu hanya mengulangi proses pelacakan jika kepercayaan deteksi turun lebih rendah dari parameter yang dinyatakan, membuat pemrosesan input secara keseluruhan lebih cepat.
Melakukan Pelacakan Tangan
Anda memerlukan tiga fungsi untuk melakukan pelacakan tangan: satu untuk memproses masukan, satu untuk menggambar sambungan tengara tangan, dan satu fungsi utama untuk mengontrol alur program.
Fungsi Pemrosesan Masukan
Fungsi ini mengambil masukan, mengonversinya menjadi skala abu-abu, dan meneruskannya ke model jarum MediaPipe untuk mendeteksi dan melacak jarum pada masukan.
# Memproses gambar masukan
defprocess_image(img):
# Mengubah input menjadi skala abu-abu
gray_image = cv2.cvtColor (img, cv2.COLOR_BGR2RGB)
hasil = hands.process (gray_image)
# Mengembalikan tangan yang terdeteksi ke fungsi panggilan
kembali hasil
Fungsi mengembalikan hasil apakah ada tangan yang terdeteksi pada input.
Fungsi Menggambar Sambungan Penanda Tangan
Fungsi ini memeriksa apakah fungsi pemrosesan input mendeteksi adanya tangan. Jika ada tangan yang terdeteksi, itu melingkari setiap tengara dan menggambar lingkaran di sekitarnya, melacak tengara menggunakan Fungsi menghitung Python. Itu kemudian menarik koneksi antara tengara pada input video asli.
# Menggambar koneksi tengara
defdraw_hand_connections(img, hasil):
jika hasil.multi_hand_landmarks:
untuk handLms di dalam hasil.multi_hand_landmarks:
untuk id, lm di dalam menghitung (handLms.landmark):
h, w, c = img.bentuk# Menemukan koordinat setiap landmark
cx, cy = int (lm.x * w), int (lm.y * h)# Mencetak setiap ID tengara dan koordinat
# di terminal
cetak (id, cx, cy)# Membuat lingkaran di sekitar setiap landmark
cv2.circle (img, (cx, cy), 10, (0, 255, 0),
cv2.DIISI)
# Menggambar koneksi tengara
mpDraw.draw_landmarks (img, handLms,
mpHands. HAND_CONNECTIONS)
kembali img
Fungsi dimulai dengan melingkari setiap landmark:
Itu kemudian menarik koneksi tangan:
Akhirnya mengembalikan outputnya ke fungsi pemanggilan.
Fungsi Utama
Buat fungsi utama yang akan mengontrol aliran program Anda. Ini akan mengambil masukan dan mengubah ukuran bingkai video untuk memastikan konsistensi keluaran. Lewati input ke fungsi pemrosesan yang kemudian akan mendeteksi dan melacak tangan. Ambil hasil yang dikembalikan ke fungsi menggambar koneksi landmark tangan yang akan menggambar koneksi pada input video asli. Ini akhirnya akan menampilkan output ke pengguna.
defutama():
# Ganti 0 dengan jalur video untuk menggunakan a
# video yang direkam sebelumnya
tutup = cv2.VideoCapture(0)ketikaBENAR:
# Mengambil masukan
sukses, image = cap.read()
image = imutils.resize (gambar, lebar=500, tinggi =500)
hasil = process_image (gambar)
draw_hand_connections (gambar, hasil)# Menampilkan output
cv2.imshow("pelacak tangan", gambar)
# Program berhenti ketika tombol q ditekan
jika cv2.waitKey(1) == ord('Q'):
tutup.rilis()
cv2.hancurkanSemuaWindows()
Langkah terakhir adalah menjalankan program Anda. Kode di bawah ini memastikan bahwa saat Anda menjalankan program, fungsi utama dijalankan terlebih dahulu.
jika __nama__ == "__utama__":
utama()
Ketika program dijalankan, menghasilkan output seperti ini:
Program melacak tangan secara real time.
Pelacakan Tangan untuk Realitas Virtual Immersive
Pelacakan tangan dalam realitas virtual membuat teknologi lebih menarik. Headset realitas virtual telah mulai memperkenalkan pelacakan tangan, membawa rasa realitas yang tinggi ke dunia maya. Headset memungkinkan pengguna untuk memasukkan perintah menggunakan tangan virtual.
Pelacakan tangan di headset virtual hanyalah salah satu aplikasi dari teknologi ini. Anda dapat menggabungkan pelacakan tangan di area mana pun yang sesuai dengan keinginan Anda.