Pengesanan muka dan keupayaan analisis sangat berguna kerana ia membolehkan kita menambah ciri -ciri pintar. Fikirkan muka yang kabur secara automatik (seperti Peta Google), imej Webcam yang panning dan zoom untuk memberi tumpuan kepada orang (seperti Microsoft Team), mengesahkan pasport, menambah penapis yang menyeronokkan (seperti Instagram dan Snapchat), dan lebih pelbagai fungsi. Tetapi sebelum kita dapat melakukan semua ini, kita perlu mencari wajah terlebih dahulu!
face-api.js adalah perpustakaan yang membolehkan pemaju menggunakan pengesanan muka dalam aplikasi mereka tanpa latar belakang dalam pembelajaran mesin.
Kod untuk tutorial ini boleh didapati di GitHub.
mata utamaWalau bagaimanapun, rangkaian saraf adalah baik untuk menangani masalah tersebut dan boleh umum sesuai dengan yang paling sesuai, jika tidak semua, syarat. Kami boleh membuat, melatih dan menggunakan rangkaian saraf dalam penyemak imbas menggunakan TensorFlow.js (Perpustakaan Pembelajaran Mesin JavaScript yang popular). Walau bagaimanapun, walaupun kita menggunakan model pretrained off-the-shelf, kita masih perlu menggali jauh ke dalam cara memberikan maklumat kepada Tensorflow dan bagaimana output ditafsirkan. Jika anda berminat dengan butiran teknikal pembelajaran mesin, lihat "Pemula untuk Pembelajaran Mesin dengan Python".
face-api.js muncul. Ia merangkumi semua ini dalam API intuitif. Kita boleh lulus elemen IMG, kanvas, atau video, dan perpustakaan akan mengembalikan satu atau satu set hasil. Face-api.js dapat mengesan wajah dan menganggarkan pelbagai ciri di muka, seperti yang ditunjukkan di bawah.
Sebelum anda menggunakan kandungan ini di luar eksperimen, sila ambil perhatian bahawa AI adalah baik untuk menguatkan bias. Klasifikasi jantina berfungsi dengan baik untuk orang cisgender, tetapi ia tidak dapat mengesan jantina rakan bukan saya. Ia mengiktiraf orang kulit putih sepanjang masa, tetapi sering gagal mengesan orang yang berwarna.
sangat berhati -hati apabila menggunakan teknologi ini dan menggunakan pasukan ujian yang pelbagai untuk ujian menyeluruh.
kita boleh memasang face-api.js melalui npm:
<code>npm install face-api.js </code>
Selepas itu, kita perlu memuat turun model pretrain yang betul dari repositori perpustakaan. Tentukan apa yang ingin kita ketahui dari muka dan gunakan bahagian Model yang tersedia untuk menentukan model yang diperlukan. Sesetengah ciri boleh menggunakan pelbagai model. Dalam kes ini, kita perlu memilih antara jalur lebar/prestasi dan ketepatan. Bandingkan saiz fail pelbagai model yang tersedia dan pilih model yang anda fikir adalah yang terbaik untuk projek anda.
<code>/* globals faceapi */ import 'https://unpkg.com/face-api.js@0.22.2/dist/face-api.min.js'; </code>
Tidak pasti model apa yang anda perlukan untuk digunakan? Anda boleh kembali ke langkah ini kemudian. Apabila kita menggunakan API tanpa memuatkan model yang diperlukan, ralat dilemparkan, menunjukkan model yang diharapkan oleh perpustakaan.
kita kini boleh menggunakan API Face-API.js.
mari kita bina sesuatu!
Gambar dipotong
<code>function loadRandomImage() { const image = new Image(); image.crossOrigin = true; return new Promise((resolve, reject) => { image.addEventListener('error', (error) => reject(error)); image.addEventListener('load', () => resolve(image)); image.src = 'https://source.unsplash.com/512x512/?face,friends'; }); } </code>
Pertama, kita perlu memilih dan memuatkan model. Untuk menanam imej, kita hanya perlu mengetahui kotak batas muka, jadi pengesanan muka sudah cukup. Kita boleh melakukan ini dengan dua model: model SSD Mobilenet V1 (sedikit di bawah 6MB) dan model pengesan muka kecil (lambat 200kb). Dengan mengandaikan ketepatan tidak relevan, kerana pengguna juga boleh menanamnya secara manual. Juga, mari kita anggap bahawa pelawat menggunakan ciri ini pada sambungan internet yang perlahan. Oleh kerana tumpuan kami adalah pada jalur lebar dan prestasi, kami akan memilih model pengesan muka kecil yang lebih kecil.
Selepas memuat turun model, kita boleh memuatkannya:
<code>npm install face-api.js </code>
kita kini boleh memuatkan imej dan lulus ke muka-api.js. FACEAPI.DetectallFaces menggunakan model SSD MobileNet V1 secara lalai, jadi kita perlu lulus faceapi.tinyfacedetectoroptions baru () untuk memaksanya menggunakan model pengesan muka kecil.
<code>/* globals faceapi */ import 'https://unpkg.com/face-api.js@0.22.2/dist/face-api.min.js'; </code>
Variable Faces kini mengandungi array hasil. Setiap hasil mempunyai kotak dan skor atribut. Skor menunjukkan tahap keyakinan bahawa rangkaian saraf memang di muka. Atribut kotak mengandungi objek koordinat muka. Kita boleh memilih hasil pertama (atau kita boleh menggunakan faceapi.detectsingleface ()), tetapi jika pengguna mengemukakan foto kumpulan, kita mahu melihat semua wajah dalam imej yang dipotong. Untuk melakukan ini, kita boleh mengira kotak batas tersuai:
<code>function loadRandomImage() { const image = new Image(); image.crossOrigin = true; return new Promise((resolve, reject) => { image.addEventListener('error', (error) => reject(error)); image.addEventListener('load', () => resolve(image)); image.src = 'https://source.unsplash.com/512x512/?face,friends'; }); } </code>
Akhirnya, kita boleh membuat kanvas dan memaparkan hasilnya:
<code>await faceapi.nets.tinyFaceDetector.loadFromUri('/models'); </code>
Anda boleh mencari kod untuk demo ini dalam repositori GitHub yang disertakan.
Mengapa tidak bersenang -senang? Kita boleh membuat penapis yang meletakkan emoji mulut (?) Pada semua mata. Untuk mencari mata ciri mata, kami memerlukan model lain. Kali ini, kami bimbang tentang ketepatan, jadi kami menggunakan model pengesanan titik ciri SSD Mobilenet V1 dan 68 mata.
Begitu juga, kita perlu memuatkan model dan imej pertama:
<code>const image = await loadRandomImage(); const faces = await faceapi.detectAllFaces(image, new faceapi.TinyFaceDetectorOptions()); </code>
Untuk mendapatkan titik ciri, kita mesti menambahkan panggilan fungsi dengan Fungsi () untuk mengesan () untuk mendapatkan data titik ciri:
<code>const box = { // 将边界设置为其反向无穷大,因此任何数字都大于/小于 bottom: -Infinity, left: Infinity, right: -Infinity, top: Infinity, // 给定边界,我们可以计算宽度和高度 get height() { return this.bottom - this.top; }, get width() { return this.right - this.left; }, }; // 更新边界框 for (const face of faces) { box.bottom = Math.max(box.bottom, face.box.bottom); box.left = Math.min(box.left, face.box.left); box.right = Math.max(box.right, face.box.right); box.top = Math.min(box.top, face.box.top); } </code>
Seperti kali terakhir, wajah mengandungi senarai hasil. Sebagai tambahan kepada kedudukan muka, setiap hasil juga mengandungi senarai titik asal titik ciri. Untuk mendapatkan titik ciri yang betul untuk setiap ciri, kita perlu mengiris senarai mata. Kerana bilangan mata tetap, saya memilih indeks hardcoded:
<code>npm install face-api.js </code>
Sekarang kita boleh mula melukis emojis pada gambar. Oleh kerana kita perlu melakukan ini dengan kedua -dua mata, kita boleh meletakkan ciri.eyeleft dan feature.eyeright dalam array dan berulang di atasnya untuk melaksanakan kod yang sama untuk setiap mata. Semua yang tersisa adalah untuk menarik emoji ke kanvas!
<code>/* globals faceapi */ import 'https://unpkg.com/face-api.js@0.22.2/dist/face-api.min.js'; </code>
Perhatikan bahawa saya menggunakan beberapa nombor sihir untuk menyesuaikan saiz fon dan kedudukan teks yang tepat. Kerana emojis adalah Unicode dan tipografi di web adalah pelik (sekurang -kurangnya untuk saya), saya hanya menyesuaikan nombor sehingga mereka kelihatan hampir sama. Alternatif yang lebih kuat ialah menggunakan imej sebagai lapisan.
face-api.js adalah perpustakaan hebat yang membuat pengesanan wajah dan pengiktirafan benar-benar boleh diakses. Tidak perlu terbiasa dengan pembelajaran mesin dan rangkaian saraf. Saya suka alat -alat yang telah membolehkan ciri -ciri, dan ini pasti salah satu daripada mereka.
Dari pengalaman saya, pengiktirafan muka di web boleh menjejaskan prestasi. Kita perlu memilih antara jalur lebar dan prestasi atau ketepatan. Model yang lebih kecil pastinya kurang tepat dan akan terlepas wajah dalam beberapa faktor yang disebutkan sebelumnya, seperti cahaya atau wajah yang tidak mencukupi.
Microsoft Azure, Google Cloud dan mungkin perniagaan lain menyediakan pengesanan muka di awan. Kerana kita mengelakkan memuat turun model besar, pengesanan berasaskan awan mengelakkan pemuatan halaman berat dan sering lebih tepat kerana ia sering bertambah baik dan mungkin lebih cepat kerana perkakasan dioptimumkan. Jika anda memerlukan ketepatan yang tinggi, anda mungkin ingin mempertimbangkan rancangan yang anda puas.
Saya pasti mengesyorkan menggunakan face-api.js untuk projek amatur, eksperimen, dan mungkin MVP.
Face Api.js adalah perpustakaan JavaScript yang menggunakan tensorflow.js untuk melakukan pengesanan muka, pengiktirafan wajah dan pengesanan titik ciri wajah dalam penyemak imbas. Ia mengesan dan mengiktiraf wajah dalam imej atau aliran video langsung dengan menggunakan model pembelajaran mesin. Perpustakaan menyediakan beberapa API yang membolehkan pemaju melakukan tugas seperti mengesan semua wajah dalam imej, mengenal pasti wajah orang tertentu, dan mengenal pasti ciri -ciri wajah seperti mata, hidung, dan mulut.
Untuk memasang muka Api.js, anda boleh menggunakan npm atau benang. Setelah dipasang, anda boleh mengimport perpustakaan ke dalam projek anda dan mula menggunakan APInya. Perpustakaan ini menyediakan satu set contoh dan tutorial yang komprehensif untuk memulakan anda.
Ya, muka API.js boleh digunakan untuk pengesanan dan pengiktirafan muka masa nyata. Perpustakaan ini menyediakan API yang boleh memproses aliran video dan mengesan atau mengenali wajah dalam masa nyata. Ini menjadikannya sesuai untuk aplikasi seperti pemantauan, persidangan video, dan pemasangan interaktif.
Face Api.js memerlukan pelayar moden yang menyokong WebGL dan WebAssembly. Ia juga memerlukan CPU dan GPU yang agak kuat, kerana pengesanan muka dan pengiktirafan adalah tugas-tugas yang berintensifkan. Walau bagaimanapun, keperluan yang tepat akan bergantung kepada kes penggunaan tertentu dan bilangan muka yang akan diproses.
Ketepatan muka API.js bergantung kepada beberapa faktor, termasuk kualiti imej input atau video, keadaan pencahayaan, dan postur muka. Walau bagaimanapun, perpustakaan menggunakan model pembelajaran mesin terkini yang dilatih pada dataset yang besar, jadi ia dapat mencapai ketepatan yang tinggi dalam kebanyakan keadaan.
Ya, muka API.js dapat mengesan dan mengenali wajah di bawah pelbagai keadaan pencahayaan dan postur. Walau bagaimanapun, seperti semua model pembelajaran mesin, prestasinya mungkin dipengaruhi oleh keadaan pencahayaan yang melampau atau postur yang tidak normal.
Ya, muka API.js adalah sumber terbuka dan boleh digunakan untuk projek peribadi dan komersial. Walau bagaimanapun, adalah lebih baik untuk menyemak terma lesen sebelum menggunakan mana -mana perpustakaan sumber terbuka dalam projek komersial.
Terdapat beberapa cara untuk meningkatkan prestasi Face Api.js. Salah satu cara adalah untuk mengoptimumkan imej input atau video, contohnya dengan mengurangkan resolusinya atau menukarnya ke skala kelabu. Kaedah lain adalah untuk menyempurnakan parameter pengesanan muka dan algoritma pengiktirafan.
Ya, muka API.js dapat mengesan dan mengenali pelbagai muka dalam imej atau video yang sama. Perpustakaan ini menyediakan API untuk mengembalikan array muka yang dikesan, masing -masing dengan kotak terikat sendiri dan hasil pengiktirafan.
Ya, muka API.js boleh digunakan dengan mana -mana perpustakaan atau rangka kerja JavaScript. Ia direka untuk menjadi fleksibel dan mudah diintegrasikan ke dalam projek sedia ada.
Atas ialah kandungan terperinci Pengesanan muka di web dengan face-api.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!