Kasvontunnistus Pythonilla ja OpenCV:llä

Jaa

Facebook
Twitter
WhatsApp

Tässä artikkelissa, tiedämme, mitä on kasvojentunnistus ja miten se eroaa kasvojentunnistuksesta. Käymme lyhyesti läpi kasvojentunnistuksen teoriaa ja siirrymme sitten koodausosioon. Tämän artikkelin lopussa pystyt tekemään kasvojentunnistusohjelman, jolla voit tunnistaa kasvot kuvista sekä suorasta webbikameran syötteestä.

  1. Mitä on kasvojen tunnistus?
  2. Mitä on kasvojentunnistus?
  3. Kasvontunnistus Pythonilla
    1. Kasvojen tunnistaminen webbikameran syötteestä
    2. Kasvojen tunnistaminen kuvista

Mitä on kasvontunnistus?

Tietokonenäköalalla eräs olennainen ongelma, jota yritämme selvittää, on kohteiden automaattinen havaitseminen kuvassa ilman ihmisen toimenpiteitä. Kasvojen havaitseminen voidaan ajatella tällaiseksi ongelmaksi, jossa havaitsemme ihmisen kasvot kuvasta. Ihmisten kasvoissa voi olla pieniä eroja, mutta kaiken kaikkiaan voidaan sanoa, että on olemassa tiettyjä piirteitä, jotka liittyvät kaikkiin ihmiskasvoihin. Kasvontunnistusalgoritmeja on erilaisia, mutta Viola-Jonesin algoritmi on yksi vanhimmista menetelmistä, jota käytetään myös nykyään, ja käytämme sitä myöhemmin artikkelissa. Voit käydä läpi Viola-Jonesin algoritmin tämän artikkelin jälkeen, sillä linkitän sen tämän artikkelin lopussa.

Kasvojentunnistus on yleensä ensimmäinen askel kohti monia kasvoihin liittyviä tekniikoita, kuten kasvojentunnistusta tai verifiointia. Kasvontunnistuksella voi kuitenkin olla hyvin hyödyllisiä sovelluksia. Kasvontunnistuksen menestyksekkäin sovellus lienee valokuvien ottaminen. Kun otat valokuvan ystävistäsi, digitaalikameraan sisäänrakennettu kasvontunnistusalgoritmi havaitsee, missä kasvot ovat, ja säätää tarkennuksen sen mukaisesti.

Katso pelkkää kasvontunnistusta käsittelevä opetusohjelma täältä

Mitä on kasvontunnistus?

Nyt kun olemme onnistuneet tekemään tällaisia algoritmeja, jotka pystyvät havaitsemaan kasvot, pystymmekö myös tunnistamaan, kenen kasvoja ne ovat?

Kasvojentunnistus on menetelmä, jolla yksilön henkilöllisyys tunnistetaan tai todennetaan kasvojen avulla. On olemassa erilaisia algoritmeja, jotka voivat tehdä kasvojentunnistusta, mutta niiden tarkkuus saattaa vaihdella. Tässä aion kuvata, miten teemme kasvojentunnistuksen syväoppimisen avulla.

Ymmärretään nyt, miten tunnistamme kasvot syväoppimisen avulla. Hyödynnämme kasvojen upottamista, jossa jokainen kasvo muunnetaan vektoriksi, ja tätä tekniikkaa kutsutaan syväksi metrioppimiseksi. Jaottelen tämän prosessin edelleen kolmeen yksinkertaiseen vaiheeseen, jotta se olisi helppo ymmärtää:

Kasvojen tunnistaminen: Aivan ensimmäinen tehtävä, jonka suoritamme, on kasvojen havaitseminen kuva- tai videovirrassa. Nyt kun tiedämme kasvojen tarkan sijainnin/koordinaatit, poimimme nämä kasvot jatkokäsittelyä varten eteenpäin.

Feature Extraction: Nyt kun olemme rajanneet kasvot kuvasta, poimimme niistä piirteitä. Tässä käytämme kasvojen sulauttamista kasvojen piirteiden poimimiseen kasvoista. Neuroverkko ottaa syötteenä kuvan henkilön kasvoista ja tuottaa vektorin, joka edustaa kasvojen tärkeimpiä piirteitä. Koneoppimisessa tätä vektoria kutsutaan sulauttamiseksi, ja siksi kutsumme tätä vektoria kasvojen sulauttamiseksi. Miten tämä auttaa tunnistamaan eri henkilöiden kasvoja?

Koulutettaessa neuroverkkoa verkko oppii tuottamaan samankaltaisia vektoreita samannäköisille kasvoille. Jos minulla on esimerkiksi useita kuvia kasvoista eri aikavälien sisällä, jotkin kasvojen piirteet saattavat tietysti muuttua, mutta eivät kovin suuressa määrin. Tällöin kasvoihin liittyvät vektorit ovat samankaltaisia tai lyhyesti sanottuna ne ovat hyvin lähellä toisiaan vektoriavaruudessa. Katso alla olevaa kaaviota saadaksesi karkean käsityksen:

Nyt verkon harjoittelun jälkeen verkko oppii tuottamaan vektoreita, jotka ovat lähempänä toisiaan (samankaltaisia) saman henkilön kasvojen kohdalla (näyttävät samankaltaisilta). Edellä mainitut vektorit muuttuvat nyt:

Me emme aio kouluttaa tällaista verkkoa tässä, koska tällaisten verkkojen kouluttaminen vaatii huomattavan määrän dataa ja laskentatehoa. Käytämme valmiiksi koulutettua verkkoa, jonka Davis King on kouluttanut ~3 miljoonan kuvan aineistolla. Verkko tuottaa 128 numeron vektorin, joka edustaa kasvojen tärkeimpiä piirteitä.

Nyt kun tiedämme, miten tämä verkko toimii, katsotaanpa, miten käytämme tätä verkkoa omassa datassamme. Siirrämme kaikki aineistomme kuvat tälle esivalmennetulle verkolle saadaksemme vastaavat upotukset ja tallennamme nämä upotukset tiedostoon seuraavaa vaihetta varten.

Kasvojen vertailu: Nyt kun meillä on tiedostoon tallennetut kasvojen upotukset jokaiselle aineistossamme olevalle kasvolle, seuraava vaihe on tunnistaa uusi t-kuva, jota ei ole aineistossamme. Ensimmäinen vaihe on siis laskea kuvan kasvojen upotus käyttäen samaa verkkoa, jota käytimme edellä, ja sitten verrata tätä upotusta muihin upotuksiin, joita meillä on. Tunnistamme kasvot, jos luotu upotus on lähempänä tai samankaltainen kuin jokin muu upotus, kuten alla on esitetty:

Syötimme siis kaksi kuvaa, joista toinen on Vladimir Putinin ja toinen George W. Bushin kuva. Yllä olevassa esimerkissämme emme tallentaneet Putinin upotuksia, mutta tallensimme Bushin upotukset. Kun siis vertasimme kahta uutta upotusta olemassa oleviin upotuksiin, Bushin vektori on lähempänä muita Bushin kasvojen upotuksia, kun taas Putinin kasvojen upotukset eivät ole lähempänä mitään muuta upotusta, joten ohjelma ei pysty tunnistamaan häntä.

Kasvojentunnistus Pythonin avulla

Tässä osiossa toteutamme kasvojentunnistuksen OpenCV:n ja Pythonin avulla. Katsotaan ensin, mitä kirjastoja tarvitsemme ja miten ne asennetaan:

  • OpenCV
  • dlib
  • Face_recognition

OpenCV on kuvan- ja videonkäsittelykirjasto, ja sitä käytetään kuva- ja videoanalyyseihin, kuten kasvojen tunnistamiseen, rekisterikilpien lukemiseen, kuvankäsittelyyn, edistyneeseen robottinäkemykseen, optiseen hahmontunnistukseen ja paljon muuhun.

Davis Kingin ylläpitämä dlib-kirjasto sisältää ”syvän metrisen oppimisen” toteutuksemme, jota käytetään varsinaiseen tunnistukseen käytettävien kasvojen upotusten rakentamiseen.

Adam Geitgeyn luoma face_recognition-kirjasto ympäröi dlib:n kasvojentunnistustoiminnallisuutta, ja tämän kirjaston kanssa on erittäin helppo työskennellä, ja tulemme käyttämään sitä koodissamme. Muista asentaa dlib-kirjasto ensin ennen face_recognitionin asentamista.

Asenna OpenCV kirjoittamalla komentokehotteeseen

pip install opencv-python

Olen kokeillut eri tapoja asentaa dlib Windowsiin, mutta kaikista helpoin on Anacondan kautta. Asenna ensin Anaconda (tässä on opas sen asentamiseen) ja käytä sitten tätä komentoa komentokehotteessa:

conda install -c conda-forge dlib

Seuraavaksi asenna face_recognition, kirjoita komentokehotteeseen

pip install face_recognition

Nyt kun meillä on kaikki riippuvuudet asennettuna, aloitetaan koodaus. Meidän on luotava kolme tiedostoa, joista yksi ottaa tietokokonaisuutemme ja poimii kasvojen upotuksen jokaiselle kasvolle dlib:n avulla. Seuraavaksi tallennamme nämä upotukset tiedostoon.

Seuraavassa tiedostossa vertaamme kasvoja olemassa oleviin tunnistamme kasvot kuvista ja seuraavaksi teemme saman, mutta tunnistamme kasvot suorassa webbikameran syötteessä

Ominaisuuksien poimiminen kasvoista

Ensiksi sinun täytyy hankkia datasetti tai jopa luoda sellainen itse. Varmista vain, että järjestät kaikki kuvat kansioihin siten, että kussakin kansiossa on kuvia vain yhdestä henkilöstä.

Seuraavaksi tallenna dataset samaan kansioon, johon aiot tehdä tiedoston. Tässä on nyt koodi:

Nyt kun olemme tallentaneet upotukset tiedostoon nimeltä ”face_enc”, voimme käyttää niitä kasvojen tunnistamiseen kuvissa tai suorassa videovirrassa.

Kasvojen tunnistaminen suorassa webbikameran syötteessä

Tässä on skripti kasvojen tunnistamiseksi suorassa webbikameran syötteessä:

Vaikka yllä olevassa esimerkissä olemme käyttäneet haar-kaskadia kasvojen havaitsemiseen, voit myös käyttää face_recognitionia.face_locations kasvojen havaitsemiseen, kuten teimme edellisessä skriptissä

Kasvojentunnistus kuvissa

Skripti kasvojen havaitsemiseen ja tunnistamiseen kuvista on lähes samanlainen kuin edellä. Kokeile sitä itse ja jos et pysty, katso alla olevaa koodia:

Output:

  • Input
  • Output

Tämä vie meidät tämän artikkelin loppuun, jossa opimme kasvojen tunnistamisesta. Voit saada ilmaisen kurssin Great learning academyn eri kursseista. Klikkaa alla olevaa banneria saadaksesi lisätietoja

Voit myös päivittää taitojasi Great Learningin PGP Artificial Intelligence and Machine Learning -kurssilla. Kurssilla saat mentorointia alan johtajilta, ja sinulla on myös mahdollisuus työskennellä reaaliaikaisissa, alan kannalta merkityksellisissä projekteissa.

Lisälukemista

  1. Kasvojentunnistus käyttäen Viola-Jonesin algoritmia
  2. Reaaliaikainen kasvojentunnistus | Kasvonaamioiden tunnistus OpenCV:n avulla
  3. Reaaliaikainen objektien tunnistus TensorFlow:n avulla
  4. YOLO-objektien tunnistus OpenCV:n avulla
  5. Objektien tunnistus Pytorchissa | Mitä on objektien tunnistus?

Vastaa

Sähköpostiosoitettasi ei julkaista.