
Pengarang: Rokas Balsys
Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda sedang membangun produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan untuk menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.
Tutorial ini akan mengajarkan kita untuk mendeteksi wajah dan landmark wajah dalam aliran gambar, video, atau webcam menggunakan perpustakaan MediaPipe dan menampilkannya!
https://medium.com/media/6652b48712a909cb75720be88b10c443/href
Apakah mungkin untuk menerapkan model deteksi objek kinerja waktu nyata tanpa GPU? Deteksi wajah MediaPipe adalah bukti konsep yang memungkinkan untuk menjalankan deteksi wajah kelas tunggal secara real-time di hampir semua CPU.
Sumber: Gambar oleh juricakoletic di Unsplash
Apa masalahnya?
Mungkin ada banyak skenario di mana deteksi objek kelas tunggal diperlukan. Misalnya, kami ingin mendeteksi lokasi semua objek yang termasuk dalam satu kelas. Misalnya, kami dapat mendeteksi wajah untuk sistem identifikasi wajah atau melacak wajah dalam percakapan kamera waktu nyata.
Terlebih lagi, sebagian besar waktu, kami ingin menjalankan model ini secara real time. Untuk mencapai ini, kita harus menangkap frame dengan cukup cepat, dan model kita harus menjalankan inferensi pada frame ini lebih cepat! Ini memungkinkan kami untuk memproses gambar segera setelah tersedia.
Solusi yang paling mudah diakses dan digunakan untuk menyelesaikan tugas ini beberapa tahun yang lalu (dan banyak lainnya dalam visi komputer) adalah melakukan pembelajaran transfer pada model yang dilatih sebelumnya (secara umum, model standar yang dilatih pada kumpulan data masif seperti yang ditemukan di Tensorflow Hub atau Objek TF API Deteksi).
Model deteksi objek umum (seperti yang disebutkan di atas) gagal berjalan secara real time tanpa GPU. Banyak arsitektur deteksi objek terlatih (misalnya, YOLO, FasterRCNN, SSD) mencapai akurasi yang mengesankan dalam inferensi waktu nyata yang berjalan di GPU. Namun, memiliki GPU khusus untuk mencapai inferensi waktu nyata hanya untuk bersenang-senang tidak layak dan tidak sepadan.
Model yang saya sebutkan didedikasikan untuk memecahkan masalah deteksi multi-kelas. Mendeteksi hanya wajah dalam gambar lebih mudah daripada mendeteksi mobil, orang, rambu lalu lintas, dan anjing (semua dalam model yang sama). Jika kita mendefinisikan tugas yang lebih rinci, kita dapat mengasumsikan bahwa jaringan perlu mempelajari lebih sedikit fitur untuk melakukan pekerjaan itu.
Pengantar:
Tutorial ini akan mengajarkan kita untuk mendeteksi wajah pada gambar, video, atau aliran webcam menggunakan library MediaPipe. Banyak algoritma dan model serupa dapat melakukan tugas yang sama. Di sini kita akan berjalan melalui pipa deteksi dengan bantuan perpustakaan Mediapipe dan menjalani penjelasan kode langkah demi langkah.
Sebelum melanjutkan, jangan bingung antara deteksi wajah dengan deteksi landmark wajah. Deteksi wajah mendeteksi seluruh wajah Anda dan menggambar kotak persegi panjang. Landmark wajah mendeteksi fitur wajah, seperti hidung, mata, mulut, dan telinga. Dalam tutorial ini, kita akan menangkap keduanya secara bersamaan karena algoritma deteksi wajah MediaPipe menawarkan keduanya dalam satu model.
GAMBAR
Beberapa aplikasi pendeteksi wajah:
Deteksi wajah hanya satu langkah sebelum pengenalan wajah karena sebelum kita dapat mengenali wajah, pertama-tama kita harus melokalisasinya; Pengenalan emosi wajah adalah kasus penggunaan deteksi wajah lainnya yang diterapkan secara luas; Jadi, aplikasi itu mengenali wajah kita saat kita menggunakan layar kunci smartphone kita. Deteksi wajah adalah langkah pertama yang harus diikuti; Perusahaan keamanan menggunakan pengenalan wajah untuk melindungi tempat mereka; Pos pemeriksaan imigrasi menggunakan pengenalan wajah untuk menegakkan kontrol perbatasan yang lebih cerdas; Perusahaan armada dapat menggunakan pengenalan wajah untuk mengamankan kendaraan mereka; Perusahaan ride-sharing dapat menggunakan pengenalan wajah untuk memastikan pengemudi yang benar mengambil penumpang yang tepat; Pengenalan wajah berguna untuk IoT karena memungkinkan peningkatan langkah-langkah keamanan dan kontrol akses otomatis di rumah; Teknologi pengenalan wajah sebagai bagian dari sistem pengawasan bertenaga AI dapat digunakan oleh penegak hukum; Pengecer dapat menggunakan pengenalan wajah untuk menyesuaikan penawaran offline dan secara teoritis memetakan kebiasaan pembelian online dengan yang online;
Teknologi deteksi dan pengenalan wajah telah menjadi komoditas yang digunakan oleh banyak industri, dan saya yakin tidak mungkin untuk membuat daftar semua aplikasi yang tersedia.
Deteksi Wajah dengan Perpustakaan MediaPipe
Dalam tutorial ini, kita akan melakukan fungsi deteksi wajah dengan model deteksi wajah Mediapipe. Jika kita membuka ikhtisar mendalam yang diberikan dari model ini, kita dapat mengetahui bahwa itu sepenuhnya didasarkan pada model BlazeFace, yang berkinerja baik dan ringan. Model ini berfokus pada berjalan pada CPU kelas bawah dan GPU seluler untuk menghasilkan inferensi waktu nyata. Dikatakan bahwa kecepatan inferensi adalah 200-1000 frame per detik, tergantung pada spesifikasi perangkat.
Jika Anda mengikuti tutorial saya tentang segmentasi selfie real-time, Anda seharusnya sudah terbiasa dengan kode yang saya tulis. Jika Anda tidak memiliki kesempatan untuk melihatnya, saya sarankan untuk melihat sekilas karena saya akan terus mengerjakan proyek yang sama. Kali ini saya akan fokus membuat objek pendeteksi wajah yang akan kita gunakan di Engine itu.
Berikut adalah objek Deteksi wajah lengkap untuk menggunakan pendeteksi wajah MediaPipe:
https://medium.com/media/5fc23292545b0c3e878afa538f8148d3/href
Sebelum menggunakan model deteksi wajah Mediapipe, kita harus menginisialisasi model terlebih dahulu. Untuk itu, kita akan menggunakan sintaks sederhana sebagai mp.solution.face_detection, dan setelah menginisialisasi model, kita akan memanggil fungsi deteksi wajah dengan beberapa argumen. Berikut adalah dua argumen penting saat menginisialisasi model:
model_selection: Argumen ini mengambil indeks integer (0 atau 1). Angka 0 direkomendasikan untuk wajah jarak pendek, yang berfungsi paling baik dalam jarak 2 meter dari kamera. Angka 1 direkomendasikan untuk model jangkauan penuh, yang terbaik untuk wajah dalam jarak 5 meter. Nilai default, jika tidak ditentukan, adalah 0. min_detection_confidence: Argumen ini mengambil nilai float dalam rentang 0,0 dan 1,0. Di sini nilai default adalah 0,5, yang berarti kepercayaan 50%. Misalnya, saat mendeteksi wajah, hasilnya harus memiliki keyakinan setidaknya 50% bahwa wajah itu ada; jika tidak, itu tidak akan mendeteksi apa pun.
Jadi, ketika kami mendefinisikan objek MPfaceDetection kami, kami membuat model kami di memori pada saat yang tepat. Pada langkah selanjutnya, kita perlu memberi makan frame kita ke objek ini. Sekarang, ketika kita memberikan gambar ke objek kita, kita akan menggunakan fungsi process() dari objek FaceDetection. Jika kita melihat lebih dekat pada hasil kita, kita akan melihat enam koordinat untuk setiap wajah yang terdeteksi. Koordinat ini mewakili mata kanan, mata kiri, ujung hidung, pusat mulut, daerah telinga kanan, dan daerah telinga kiri.
Untuk memplot persegi panjang di sekitar wajah kita, MediaPipe memiliki fungsi bawaan yang disebut mp.drawing, yang kita inisialisasi pada langkah inisialisasi objek kita. Untuk menggambar persegi panjang dan bagian wajah utama semudah memanggil fungsi mp_drawing.draw_detection untuk setiap deteksi wajah.
Saya juga menambahkan argumen “mp_drawing_utils = True”, dengan argumen ini, kami menggunakan mp.drawing utils. Jika tidak, kami dapat menggunakan fungsi OpenCV cv2.rectangle untuk menggambar deteksi pada bingkai kami dengan warna dan ketebalan kami. Juga, terkadang kami tertarik hanya untuk mendapatkan koordinat deteksi. Kita bisa mendapatkannya dengan menyetel opsi return_tlbr bool saat kita memanggil objek kita. Jadi, kita hanya dapat mengembalikan hasil deteksi dalam kasus yang berbeda alih-alih menggambar persegi panjang pada bingkai, tergantung pada kasus penggunaan.
Berikut adalah contoh kode sederhana untuk menjalankan Engine kami hanya dengan objek deteksi wajah ini pada aliran webcam:
https://medium.com/media/80bfdcafc3b5a5b3e980df39d3b42ea0/href
Dengan itu, kita akan melihat tampilan yang mirip dengan milik saya:
Kesimpulan:
Dalam tutorial ini, kita mempelajari betapa sederhananya menggunakan perpustakaan MediaPipe untuk mendeteksi wajah dalam gambar, video yang disimpan, atau streaming webcam waktu nyata. Saya memperkenalkan Anda bagaimana kami dapat membuat objek khusus untuk digunakan di objek Engine saya. Demikian pula, kita dapat membuat objek untuk implementasi deteksi wajah lainnya dan menggunakannya dengan Engine yang sama.
Dengan semua kode ini, kami telah memvisualisasikan hasil wajah yang terdeteksi dengan beberapa landmark seperti mulut, telinga, mata, dan hidung. Hasil untuk tengara mungkin tidak begitu akurat untuk sudut yang berbeda, tetapi nyaman untuk wajah bagian depan.
Dalam tutorial berikutnya, saya akan membuat objek lain yang memungkinkan kita membuat sketsa atau menganimasikan diri kita sendiri. Itu akan luar biasa!
Terima kasih sudah membaca! Seperti biasa, semua kode yang diberikan dalam tutorial ini dapat ditemukan di halaman GitHub saya dan gratis untuk digunakan!
Awalnya diterbitkan di https://pylessons.com/face-detection
CPU Real-time Face Detection With Python awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.
Diterbitkan melalui Menuju AI