Smart Edge Cam dengan Alarm Gerakan – Menuju AI — Publikasi AI dan Teknologi Terkemuka di Dunia

Pengarang: Anand PV

IoT

Alarm Pemicu Gerakan untuk Keamanan berdasarkan CV, Estimasi Kecekungan Vektor, OpenVINO, MQTT, dan Pimoroni Blinkt pada RPi atau Jetson Nano.

Terlepas dari kemajuan teknologi yang menonjol, negara-negara berkembang masih terjebak dalam cengkeraman kejahatan patriarki seperti pencabulan, pemerkosaan, atau kejahatan terhadap perempuan secara umum. Wanita seringkali tidak diizinkan untuk tetap berada di ruang kerja profesional mereka pada jam-jam larut, juga tidak dianggap aman sendirian bahkan di siang hari, terutama di negara berkembang. Sudah menjadi keharusan, untuk memungkinkan separuh populasi lainnya menjadi lebih aman & produktif. Mengapa tidak menggunakan kemajuan teknologi untuk mempersenjatai mereka dengan lebih banyak kekuatan?

Bayangkan seorang wanita yang duduk sendirian di klinik, toko, perusahaan, atau tempat lain yang terisolasi membutuhkan penyelamatan segera. Dia mungkin tidak memiliki kesempatan atau kebebasan untuk menelepon. Kamera pengintai harus cukup pintar untuk mendeteksi gerakannya, baik itu dengan tangan atau benda, sebagai sinyal SOS. Solusi serupa dapat digunakan oleh orang tua di rumah, untuk mengirim permintaan atau meminta bantuan.

https://medium.com/media/9cc1b77beb9e4bd839600ca94b471bb7/href

Mari kita evaluasi pilihan kita, apakah akan menggunakan pemrosesan gambar, pembelajaran mendalam, atau algoritma aritmatika untuk menganalisis bingkai video yang masuk dari SoC dengan kamera, untuk memicu peringatan.

Ada 3 modul utama untuk proyek ini,

a) Lokalisasi objek, digunakan untuk memicu acara.

b) Menganalisis gerakan benda untuk mengenali sinyal

c) Deployment pada SoC untuk memasang gadget di lingkungan.

Ini adalah masalah yang rumit, karena kami membutuhkan solusi murah untuk adopsi yang mudah, tetapi tidak mengorbankan akurasi, karena kami menangani keadaan darurat di sini. Demikian pula, lebih mudah untuk mendeteksi objek khusus tetapi lebih berguna untuk menggunakan tubuh Anda sendiri untuk memberi sinyal keadaan darurat. Mengingat semua ini, mari kita bahas solusi untuk Lokalisasi & Deteksi Gerakan.

A) Metode Lokalisasi Objek

i) Deteksi Objek

Kami dapat menggunakan YOLO yang dioptimalkan perangkat keras untuk mendeteksi, katakanlah ponsel, dan dengan mudah mendapatkan 5–6 FPS pada 4GB Raspberry Pi 4B dengan Movidius NCS 2. Kami dapat melatih YOLO untuk mendeteksi objek khusus seperti tangan. Tetapi solusinya tidak ideal karena tongkat NCS akan menaikkan harga produk (vanila YOLO memberikan hampir 1 FPS pada 4GB RPi 4B).

ii) Pencocokan Template Multi-skala

Template Matching adalah metode berbasis konvolusi 2D untuk mencari dan menemukan lokasi gambar template, dalam gambar yang lebih besar. Kami juga dapat membuat pencocokan template terjemahan-invarian dan skala-invarian.

Hasilkan topeng biner dari gambar template, menggunakan thresholding adaptif. Gambar template berisi objek yang akan dideteksi. Ambil bingkai dari kamera dan buat topeng binernya Hasilkan titik-titik dengan spasi linier antara 0 dan 1 dalam daftar, x. Ubah ukuran bingkai input secara berulang dengan faktor elemen di x. Lakukan pencocokan template menggunakan cv2.matchTemplate. Temukan lokasi area yang cocok dan gambar persegi panjang.

Deteksi Tangan menggunakan Pencocokan Template Multi-skala

Tetapi untuk mendeteksi gerakan, yang merupakan urutan gerakan suatu objek, kita membutuhkan deteksi yang stabil di semua frame. Eksperimen membuktikan pencocokan multi-skala template tangan tidak begitu konsisten untuk mendeteksi objek di setiap frame. Selain itu, pencocokan template tidak ideal jika Anda mencoba mencocokkan objek yang diputar atau objek yang menunjukkan transformasi non-affine.

iii) Masking Warna Objek menggunakan Computer Vision

Sangat hemat komputasi untuk membuat topeng untuk warna tertentu guna mengidentifikasi objek berdasarkan warnanya. Kami kemudian dapat memeriksa ukuran dan bentuk kontur untuk mengonfirmasi temuan. Akan lebih bijaksana untuk menggunakan objek dengan warna yang berbeda untuk menghindari positif palsu.

Metode ini tidak hanya sangat efisien dan akurat tetapi juga membuka jalan untuk melakukan pengenalan gerakan menggunakan model matematika murni, menjadikannya solusi ideal di Edge. Demonstrasi metode ini bersama dengan pengenalan gerakan matematika diberikan di bawah ini.

B) Teknik Pengenalan Gerakan

Kita bisa mendefinisikan gestur sederhana sehingga efisien untuk dideteksi. Mari kita definisikan gerakan menjadi gerakan melingkar dan sekarang kita mencoba mendeteksi hal yang sama.

i) Pencocokan Kemiringan Berkorelasi Otomatis

Hasilkan titik ‘n’ di sepanjang keliling lingkaran, dengan jari-jari = r

‘i’ menunjukkan titik ke-n pada lingkaran Hitung kemiringan garis yang menghubungkan setiap titik dalam barisan,

Hasilkan awan titik menggunakan salah satu Metode pelokalan objek di atas. Untuk setiap frame, tambahkan bagian tengah objek yang dilokalkan ke titik cloud. Hitung kemiringan garis yang menghubungkan setiap titik dalam barisan tersebut. Hitung korelasi kurva kemiringan yang dihasilkan pada langkah-langkah di atas. Cari indeks maxima dari kurva korelasi menggunakan np.argmax() Putar antrian titik cloud dengan nilai indeks untuk yang paling cocok Hitung kesamaan lingkaran = 1- jarak kosinus antara titik awan Jika korelasi > ambang batas, maka lingkaran terdeteksi dan waspada dipicu.

Setelah implementasi, algoritma di atas ditemukan bekerja. Namun dalam praktiknya, jarak antara titik lokal bervariasi berdasarkan kecepatan rotasi dan FPS. Solusi lain yang rapi dan sederhana adalah menggunakan Aljabar Linier untuk memeriksa apakah pergerakan titik cembung atau cekung.

ii) Estimasi Kecekungan menggunakan Aljabar Vektor

Jika semua vektor di awan titik cekung, maka itu mewakili gerakan melingkar.

Hitunglah vektor-vektor tersebut dengan cara membedakan titik-titik yang berdekatan. Hitung panjang vektor menggunakan np.linalg.norm Kecualikan vektor outlier dengan mendefinisikan distribusi batas

Jika jarak antar titik < ambang batas, maka abaikan gerakan Ambil perkalian silang vektor untuk mendeteksi belokan kiri atau kanan. Aturan Tangan Kanan: jika B berlawanan arah jarum jam dari A, maka AxB menunjuk ke atas, sebaliknya ke bawah Jika ada nilai berurutan yang memiliki tanda berbeda, maka arahnya berubah. Oleh karena itu, hitunglah perkalian bergulir.

Hitung vektor, Ambil determinan, Cari tanda setelah perkalian Cari tahu lokasi perubahan arah (di mana pun indeks negatif) Hitung varians indeks negatif Jika semua nilai perkalian bergulir > 0, maka gerak melingkar Jika varians indeks negatif > ambang , maka gerakan tidak melingkar Jika % nilai negatif > ambang, maka gerakan tidak melingkar Berdasarkan 3 kondisi di atas, gerakan melingkar terdeteksi.

Dari pembahasan di atas, jelas bahwa kita dapat menggunakan Object Color Masking (untuk mendeteksi suatu objek) dan menggunakan estimasi kecekungan berbasis aljabar yang efisien (untuk mendeteksi suatu gerakan). Jika objeknya jauh, maka hanya lingkaran kecil yang akan terlihat. Jadi kita perlu memperbesar vektor berdasarkan kedalaman objek, jangan sampai melewatkan gerakannya. Untuk tujuan demo, kami akan menerapkan algoritme ini pada RPi dengan kamera dan melihat kinerjanya.

Sekarang mari kita lihat retasan matematika deteksi gerakan sebagai kode.

https://medium.com/media/ec463e580a1f6791f4b57388a097691d/href

Jika gerakan melingkar terdeteksi, maka pesan dikirim ke orang yang bersangkutan dan alarm dipicu. Pemicu peristiwa ditunjukkan dengan menyalakan lampu ‘merah’ pada Pimoroni Blinkt! ditandai menggunakan pesan MQTT dan SMS ke ponsel menggunakan integrasi Twilio. Tonton aksi proyek dalam video di atas.

Ini adalah solusi yang efisien dan praktis untuk deteksi gerakan pada perangkat edge. Harap dicatat bahwa Anda dapat menggunakan benda apa pun sebagai pengganti bola tenis atau gerakan apa pun selain gerakan melingkar. Hanya saja Anda perlu mengubah rumus matematika yang sesuai. Mungkin satu-satunya downside mungkin, kepekaan terhadap kondisi pencahayaan yang ekstrim atau kebutuhan untuk objek eksternal (bukan tubuh Anda), untuk memicu alarm.

Untuk mengatasi kelemahan ini, kami juga dapat menggunakan model pengenalan gerakan yang dioptimalkan oleh OpenVINO untuk mengenali bahasa isyarat dan memicu peringatan. Anda juga dapat melatih gerakan kustom Anda sendiri, seperti yang dijelaskan di sini.

Namun, beberapa lapisan model OpenVINO tersebut tidak didukung oleh perangkat MYRIAD seperti yang diberikan dalam tabel di sini. Oleh karena itu, modul ini perlu di-host di server jauh sebagai API, dan bukan di RPi.

Atau, latih model klasifikasi gerakan tangan dan konversikan ke format OpenVINO Intermediate Representation untuk diterapkan pada SoC.

1. Pertama, pilih model deteksi objek yang efisien seperti SSD-Mobilenet, Efficientdet, Tiny-YOLO, YOLOX, dll yang ditargetkan untuk perangkat keras berdaya rendah. Setelah bereksperimen dengan semua model ini pada RPi 4B, SSD-Mobilenet ternyata memberikan FPS maksimum.

2. Lakukan transfer pembelajaran model deteksi objek dengan data khusus Anda

3. Konversikan file *.pb terlatih ke representasi Menengah — *.xml dan *.bin menggunakan Pengoptimal Model.

export PATH=”/deployment_tools/inference_engine/demos/common/python/:$PATH”

/deployment_tools/model_optimizer/mo_tf.py — input_model — reverse_input_channels — output_dir — tensorflow_object_detection_api_pipeline_config

python3 object_detection_demo.py -d CPU -i — memberi label labels.txt -m -di ssd

4. Terakhir, terapkan model yang dioptimalkan perangkat keras pada Pi.

Dalam percobaan serupa, model klasifikasi gerakan tangan terlatih dikerahkan pada Jetson Nano yang memberikan hampir 3-5 FPS. Ini tidak begitu efisien dan juga biaya perangkat keras lebih tinggi. Perhatikan, bahwa pemicu gerakan dapat digunakan tidak hanya untuk menandakan keadaan darurat tetapi juga untuk menyampaikan pesan.

Sebagai kesimpulan, kita dapat menganggap model aljabar vektor sebagai solusi yang efisien, murah, dan umum untuk mendeteksi gerakan. Cara kreatif lain untuk mendeteksi gestur adalah dengan menggunakan IMU onboard pada SoC seperti Pico4ML untuk mengidentifikasi gestur. Cukup kenakan topi kreatif Anda untuk memodelkan bentuk geometris lainnya secara matematis!

Kode sumber dari solusi ini tersedia di sini

Jika Anda memiliki pertanyaan atau saran, Anda dapat menghubungi saya di sini

Referensi

Open Model Zoo Demo – OpenVINO™ Toolkit

Smart Edge Cam dengan Gesture Alarm awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI