Membangun aplikasi Computer Vision berbasis Python + OpenCV + MediaPipe Hands yang memungkinkan pengguna membuat area efek kamera secara interaktif menggunakan gesture dua tangan.
Pengguna membuat sebuah rectangle dengan melakukan gesture pinch pada kedua tangan. Rectangle mengikuti pergerakan tangan selama pinch masih dilakukan. Ketika pinch dilepas, rectangle akan terkunci (locked) dan langsung menerapkan efek visual unik hanya pada area rectangle.
Aplikasi mendukung beberapa rectangle aktif secara bersamaan, sehingga setiap area dapat memiliki efek yang berbeda.
- Deteksi Tangan
Program mendeteksi:
- Tangan kiri
- Tangan kanan
Menggunakan MediaPipe Hands.
- Gesture Membuat Rectangle
Syarat:
-
Kedua tangan harus melakukan pinch (ujung ibu jari dan ujung telunjuk bersentuhan).
-
Ketika kondisi ini terpenuhi:
-
Rectangle dibuat.
-
Sudut diagonal rectangle menggunakan:
- Ujung telunjuk tangan kiri
- Ujung telunjuk tangan kanan
-
Rectangle akan terus mengikuti pergerakan kedua telunjuk selama pinch dipertahankan.
-
- Lock Rectangle
Saat salah satu atau kedua tangan melepaskan pinch:
- Rectangle berhenti bergerak.
- Posisi rectangle disimpan secara permanen.
- Efek visual langsung diterapkan pada area rectangle.
Rectangle yang sudah terkunci tidak dapat dipindahkan lagi.
Efek hanya diterapkan di dalam area rectangle, sedangkan area di luar rectangle tetap menampilkan tampilan kamera normal.
Empat efek yang digunakan:
| Urutan | Efek | Deskripsi |
|---|---|---|
| 1 | 🌫️ Gaussian Blur | Area menjadi buram dengan transisi halus. |
| 2 | 🟦 Pixelation | Area berubah menjadi tampilan kotak-kotak (mosaic). |
| 3 | 🎨 Cartoon | Area berubah menjadi gaya kartun menggunakan kombinasi smoothing dan edge detection. |
| 4 | ⚡ Edge Detection | Area hanya menampilkan garis tepi objek sehingga terlihat futuristik. |
Setiap rectangle baru akan mendapatkan efek secara berurutan:
Rectangle 1 → Gaussian Blur Rectangle 2 → Pixelation Rectangle 3 → Cartoon Rectangle 4 → Edge Detection Rectangle 5 → Gaussian Blur ...
Pengguna dapat membuat beberapa rectangle.
Contoh:
Rectangle 1 → Gaussian Blur Rectangle 2 → Pixelation Rectangle 3 → Cartoon Rectangle 4 → Edge Detection
Seluruh rectangle tetap aktif secara bersamaan.
Gesture:
- Closed Fist (tangan mengepal)
Fungsi:
- Menghapus rectangle terakhir yang dibuat (Undo).
- Rectangle lainnya tetap aktif beserta efeknya.
Webcam │ ▼ OpenCV │ ▼ MediaPipe Hands │ ▼ Gesture Detector │ ▼ Rectangle Manager │ ▼ Effect Manager │ ▼ Renderer │ ▼ Camera Display
gesture-camera-effects/ │ ├── main.py ├── camera.py ├── hand_tracker.py ├── gesture_detector.py ├── rectangle.py ├── rectangle_manager.py ├── effects.py ├── effect_manager.py ├── renderer.py ├── utils.py │ ├── assets/ │ └── requirements.txt
Idle │ ▼ Both Hands Pinch │ ▼ Drawing Rectangle │ Release Pinch │ ▼ Rectangle Locked │ ▼ Effect Applied │ ▼ Idle
Gesture Closed Fist:
Closed Fist │ ▼ Delete Last Rectangle │ ▼ Render Ulang
- Border rectangle memiliki warna berbeda sesuai efek.
- Nama efek ditampilkan di sudut rectangle (Blur, Pixel, Cartoon, Edge).
- Maksimal 10 rectangle aktif untuk menjaga performa.
- Tombol keyboard:
- R → Hapus semua rectangle.
- S → Simpan screenshot.
- Q → Keluar aplikasi.
- Animasi singkat saat rectangle berhasil terkunci agar interaksi terasa lebih hidup.
- Clone repository ini
- Install dependensi:
pip install -r requirements.txt - Jalankan aplikasi:
python main.py
- Pastikan webcam terhubung dan bekerja.
- Jadikan kedua tangan menghadap kamera.
- Lakukan pinch (ujung ibu jari dan jeli telunjuk menyentuh) dengan kedua tangan sekaligus untuk mulai membuat rectangle.
- Gerakkan tangan untuk mengubah ukuran rectangle.
- Lepaskan pinch untuk mengunci rectangle dan menerapkan efek.
- Untuk menghapus rectangle terakhir, buat kepalan tangan (closed fist) dengan salah satu tangan.
- Tekan 'R' untuk menghapus semua rectangle.
- Tekan 'S' untuk menyimpan screenshot.
- Tekan 'Q' untuk keluar.
- Aplikasi ini menggunakan MediaPipe Hands untuk deteksi tangan, sehingga kinerja mungkin tergantung pada hardware.
- Untuk hasil terbaik, pastikan pencahayaan adekuat dan background tidak terlalu ramai.