Oletko koskaan miettinyt, kuinka Snapchat soveltaa tarkasti erilaisia ​​suodattimia kasvoillesi? Tekeekö älypuhelimesi taikuutta, kun se avautuu kasvojen piirteilläsi? Ei, katsot vain kasvojentunnistusta toiminnassa.

Kasvojentunnistus on tekoälytekniikka, joka tunnistaa ihmisten kasvot digitaalisesta kuvasta tai videosta. Tutustu, kuinka voit rakentaa reaaliaikaisen kasvojentunnistusohjelman alle 25 koodirivillä legendaarisen Haar Cascade -algoritmin avulla.

Mikä on Haar Cascade?

Haar Cascade on Paul Violan ja Michael Jonesin kehittämä kohteen tunnistusalgoritmi kasvojen havaitsemiseksi kuvissa tai videoissa. Kaskaditoimintoa opetetaan käyttämällä monia positiivisia ja negatiivisia kuvia, joita voidaan myöhemmin käyttää minkä tahansa esineen tai kasvojen tunnistamiseen muissa medioissa. Nämä koulutetut tiedostot ovat saatavilla osoitteessa OpenCV GitHub -arkisto.

Liukuvaa ikkunaa käytettäessä kiinteän kokoinen ikkuna toistuu kuvan yli vasemmalta oikealle, ylhäältä alas. Jokaisessa vaiheessa ikkuna pysähtyy ja luokittelee, sisältääkö alueella kasvot vai ei.

OpenCV, tietokonenäkötyökalu, toimii valmiiksi koulutetun Haar Cascade -mallin kanssa ominaisuuksien luokittelemiseksi. Jokainen vaihe tarkistaa viisi ominaisuutta: kaksi reunapiirrettä, kaksi viivapiirrettä ja yksi neljän suorakulmion piirre.

Tarkasteltaessa silmänympärys näyttää tummemmalta kuin poskialue, kun taas nenäalue näyttää kirkkaammalta kuin silmänympärys. Voit visualisoida nämä ominaisuudet alla olevalla tavalla.

Käyttämällä näitä ominaisuuksia ja pikselien laskentaa algoritmi tunnistaa yli 100 000 datapistettä. Voit sitten käyttää Adaboost-algoritmia parantaaksesi tarkkuutta ja hylätäksesi epäolennaiset ominaisuudet. Useiden iteraatioiden aikana tämä lähestymistapa minimoi virhesuhteen ja lisää ominaisuuden painoa, kunnes se saavuttaa hyväksyttävän tarkkuuden.

Liukuikkunatekniikka kuitenkin pysähtyy, jos jokin testitapaus epäonnistuu ja se on laskennallisesti kallista. Tämän ratkaisemiseksi voit soveltaa luokittelusarjan konseptia. Sen sijaan, että kaikkia ominaisuuksia käytettäisiin yhdessä ikkunassa, tämä lähestymistapa ryhmittelee ja soveltaa niitä vaiheittain.

Jos ikkuna epäonnistuu ensimmäisessä vaiheessa, prosessi hylkää sen, muuten se jatkuu. Tämä vähentää jyrkästi suoritettavien toimintojen määrää ja tekee siitä kannattavan käyttää reaaliaikaisissa sovelluksissa.

Kasvojentunnistuksen työnkulku

Rakenna kasvojentunnistusohjelmasi noudattamalla tätä algoritmia:

  1. Lataa Haar Cascade Frontal Face -algoritmi.
  2. Alusta kamera.
  3. Lue kehyksiä kamerasta.
  4. Muunna värikuvat harmaasävyiksi.
  5. Hanki kasvojen koordinaatit.
  6. Piirrä suorakulmio ja laita sopiva viesti.
  7. Näytä tulos.

Mikä on OpenCV?

OpenCV on avoimen lähdekoodin tietokonevisio- ja koneoppimiskirjasto. Siinä on yli 2 500 optimoitua algoritmia eri sovelluksille. Näitä ovat kasvojen/objektien tunnistus, tunnistus, luokittelu ja monet muut.

Kasvotietojesi tietosuoja on erillinen huolenaihe. Sadat merkittävät yritykset, kuten Google, IBM ja Yahoo, käyttävät OpenCV: tä sovelluksissaan. Jotkut ihmiset, jotka pyrkivät pitämään tietonsa yksityisinä, ovat osoittaneet on tapoja välttää kasvojentunnistus.

Asenna OpenCV Pythonissa käyttämällä komentoa:

pip Asentaa opencv-python

Kuinka rakentaa kasvojentunnistusohjelma Pythonilla

Rakenna kasvotunnistin noudattamalla näitä ohjeita:

Tämä esimerkkikoodi yhdessä Haar Cascade -algoritmitiedoston kanssa on saatavilla a GitHub-arkisto ja sitä voi käyttää ilmaiseksi MIT-lisenssin alaisena.

  1. Lataa Haar Cascade Frontal Face -oletus-XML tiedosto ja aseta se samaan paikkaan kuin Python-ohjelmasi.
  2. Tuo OpenCV-kirjasto.
    # tuodaan tarvittavat kirjastot
    tuonti cv2
  3. Tallenna Haar Cascade Frontal Face -algoritmitiedosto viittausten helpottamiseksi.
    # ladataan haar-tapausalgoritmitiedosto alg-muuttujaan
    alg = "haarcascade_frontalface_default.xml"
  4. Käytä CascadeClassifier-luokkaa XML-tiedoston lataamiseen OpenCV: hen.
    # välittää algoritmin OpenCV: lle
    haar_cascade = cv2.CascadeClassifier (alg)
  5. Tallenna video kamerasta. Anna 0 VideoCapture() -toimintoa käyttääksesi pääkameraasi. Jos olet liittänyt ulkoisen kameran, voit käyttää sen sijaan peräkkäisiä numeroita 1, 2 ja niin edelleen.
    # videosyötteen sieppaaminen kamerasta
    cam = cv2.VideoCapture (0)
  6. Aseta ääretön silmukka lukeaksesi kameran syötteen kehys kuvalta. The lukea() funktio palauttaa kaksi parametria. Ensimmäinen arvo on tyyppiä boolean, joka osoittaa, onnistuiko toiminto vai ei. Toinen parametri sisältää todellisen kehyksen, jonka kanssa aiot työskennellä. Säilytä tämä kehys img muuttuja.
    sillä aikaaTotta:
    _, img = cam.read()
  7. Aseta oletusteksti näkyväksi muodossa Kasvoja ei tunnistettu. Päivitä tämän muuttujan arvo, kun se havaitaan.
     teksti = "Kasvoja ei tunnistettu"
  8. Todellisesta maailmasta saatu syöttö on värikästä, BGR-muodossa. BGR tarkoittaa sinistä, vihreää ja punaista. Tämä luo paljon käsittelyä tietokonenäkösovelluksille. Voit vähentää tätä käyttämällä harmaasävymuotoa.
    # muuntaa jokaisen kehyksen BGR: stä harmaasävyiksi
    grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
    Välitä kehys ja muunnoskoodimuoto, COLOR_BGR2GRAY, kohteeseen cvtColor() vaihtaaksesi jokaisen videon ruudun väristä harmaasävyiksi.
  9. Käyttää detectMultiScale() havaitsemaan kasvoja. Tämä menetelmä ottaa syötteenä kolme parametria. Ensimmäinen on lähdekuva, harmaa kuva. Toinen parametri on scaleFactor. Tämä määrittää, kuinka paljon sinun on pienennettävä kuvan kokoa kullakin kuva-asteikolla. Käytä oletusarvoa 1.3 skaalaustekijänä. Mitä suurempi skaalauskerroin, sitä vähemmän vaiheita ja sitä nopeampi suoritus. Kuitenkin myös kasvojen puuttumisen todennäköisyys on suurempi. Kolmas parametri on minNeighbors. Tämä määrittää, kuinka monta naapuria kullakin ehdokassuorakulmiolla tulee olla säilyttääkseen sen. Mitä korkeampi arvo, sitä pienempi on väärän positiivisen tuloksen mahdollisuus, mutta se tarkoittaa myös epäselvien kasvojen jäljet ​​puuttumista.
    # tunnista kasvot Haar Cascadella 
    face = haar_cascade.detectMultiScale (greyImg, 1.3, 4)
  10. Kun havaitset kasvot, saat neljä koordinaattia. x edustaa x-koordinaattia, y edustaa y-koordinaattia, w edustaa leveyttä ja h edustaa korkeutta. Päivitä teksti muotoon Kasvot tunnistettu ja piirrä suorakulmio näiden koordinaattien avulla. Suorakulmion väri on vihreä (BGR) ja sen paksuus on kaksi pikseliä.
    # piirrä suorakulmio kasvojen ympärille ja päivitä tekstiksi Face Detected
    (x, y, w, h) kasvoille:
    teksti = "Kasvot tunnistettu"
    cv2.suorakulmio(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
  11. Voit halutessasi tulostaa tekstin tulostuskonsoliin. Näytä teksti näytöllä käyttämällä kaapattua kehystä lähteenä, tekstiä sellaisena kuin se on saatu yllä olevasta tekstistä, fonttia tyyli FONT_HERSHEY_SIMPLEX, fontin skaalauskerroin 1, sininen väri, kahden pikselin paksuus ja viivatyyppi AA.
    # näyttää tekstin kuvassa
    Tulosta(teksti)
    kuva = cv2.putText (kuva, teksti, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)
  12. Näytä ikkuna otsikolla Kasvojentunnistus ja kuva. Käytä odotusavain () tapa näyttää ikkuna 10 millisekuntia ja tarkistaa näppäimen painallus. Jos käyttäjä painaa poistu -näppäintä (ASCII-arvo 27), poistu silmukasta.
    # Näytä tulosikkuna ja paina Esc-näppäintä poistuaksesi
    cv2.imshow("Kasvojentunnistus", kuva)
    avain = cv2.waitKey (10)

    jos avain == 27:
    tauko

  13. Lopuksi vapauta kameraobjekti python-ohjelmasta ja sulje kaikki ikkunat.
    nokka.vapauta()
    cv2.destroyAllWindows()

Kasvojentunnistus Pythonilla toiminnassa

Kun kasvot ovat näkyvissä, sinun pitäisi nähdä seuraavanlainen tulos:

Kun kasvoja ei ole, näet seuraavanlaisen viestin:

Haar Cascade -algoritmia käyttävän kasvontunnistuksen rajoitukset

Vaikka tämä algoritmi on kevyt, mallin pieni koko ja toimii nopeasti, siinä on muutamia rajoituksia:

  • Reaaliaikaisessa videossa kasvojen on oltava kameran näkökentässä. Jos kasvot ovat liian kaukana tai liian lähellä tai liian vinossa, algoritmi ei löydä ominaisuuksia.
  • Se on etusivualgoritmi, joten et voi havaita sivukuvia.
  • Korkeat väärät positiiviset tulokset. Se tunnistaa usein alueet kasvoiksi, vaikka kasvoja ei olisikaan.
  • On oltava optimaaliset valaistusolosuhteet. Liiallinen tai hämärä valaistus heikentää algoritmin tarkkuutta.

Kasvojentunnistuksen monet sovellukset

Kasvojentunnistuksella on laaja valikoima sovelluksia nykymaailmassa. Voit käyttää sitä kasvojentunnistukseen älypuhelimissa, kodeissa, ajoneuvoissa ja maahanmuuton tarkastuspisteissä. Kasvojen tunnistus on jo yleistä CCTV-valvonnassa, sosiaalisen median suodattimissa ja automaattisessa kasvojen seurannassa elokuvateollisuudessa.

Se on vasta tämän upean tekniikan alkua. Edistymisen myötä voimme ehkä tunnistaa kadonneita lapsia, saada kiinni rikollisia ja ehkäistä rikoksia, kuten identiteettivarkauksia.