Kas olete kunagi mõelnud, kuidas Snapchat teie näole erinevaid filtreid täpselt rakendab? Kas teie nutitelefon teeb võlu, kui see avaneb teie näojoonte abil? Ei, te lihtsalt vaatate näotuvastust tegevuses.

Näotuvastus on tehisintellekti tehnoloogia, mis suudab tuvastada inimeste nägusid digitaalsel pildil või videol. Avastage, kuidas saate legendaarse Haar Cascade algoritmi abil luua reaalajas näotuvastusprogrammi alla 25 koodireaga.

Mis on Haari kaskaad?

Haar Cascade on Paul Viola ja Michael Jonesi poolt kasutusele võetud objektituvastusalgoritm, et tuvastada piltidel või videotes nägusid. Kaskaadifunktsiooni treenitakse, kasutades palju positiivseid ja negatiivseid kujutisi, mida saab hiljem kasutada mis tahes objekti või näo tuvastamiseks muus meedias. Need koolitatud failid on saadaval aadressil OpenCV GitHubi hoidla.

Kasutades libiseva akna lähenemist, itereerub fikseeritud suurusega aken üle pildi vasakult paremale, ülalt alla. Igas faasis aken peatub ja klassifitseerib, kas ala sisaldab nägu või mitte.

instagram viewer

Arvutinägemise tööriist OpenCV töötab funktsioonide klassifitseerimiseks eelkoolitatud Haar Cascade mudeliga. Iga faas kontrollib viit funktsiooni: kahte servaelementi, kahte joonefunktsiooni ja ühte neljast ristkülikust.

Vaatlemisel tundub silmaümbrus tumedam kui põsepiirkond, samas kui nina piirkond paistab silmaümbrusest heledam. Saate neid funktsioone visualiseerida järgmisel viisil.

Kasutades neid funktsioone ja pikslite arvutust, tuvastab algoritm rohkem kui 100 000 andmepunkti. Seejärel saate täpsuse parandamiseks ja ebaoluliste funktsioonide loobumiseks kasutada Adaboosti algoritmi. Paljude iteratsioonide jooksul minimeerib see lähenemisviis veamäära ja suurendab funktsioonide kaalu, kuni see saavutab vastuvõetava täpsuse.

Lükandakna tehnika aga peatub, kui konkreetne katsejuhtum ebaõnnestub ja see on arvutuslikult kallis. Selle lahendamiseks saate rakendada klassifikaatorite kaskaadi kontseptsiooni. Selle asemel, et rakendada kõiki funktsioone ühes aknas, rühmitab see lähenemisviis ja rakendab need etapiviisiliselt.

Kui aken esimeses etapis ebaõnnestub, loobub protsess sellest, vastasel juhul jätkub. See toob kaasa tehtavate toimingute arvu drastilise vähenemise ja muudab selle reaalajas rakenduste jaoks elujõuliseks.

Näotuvastuse töövoog

Näotuvastusprogrammi koostamiseks järgige seda algoritmi:

  1. Laadige Haar Cascade frontal Face algoritm.
  2. Initsialiseerige kaamera.
  3. Lugege kaamerast kaadreid.
  4. Teisendage värvilised pildid halltoonides.
  5. Hankige näo koordinaadid.
  6. Joonistage ristkülik ja pange vastav sõnum.
  7. Kuva väljund.

Mis on OpenCV?

OpenCV on avatud lähtekoodiga arvutivisiooni ja masinõppe raamatukogu. Sellel on üle 2500 optimeeritud algoritmi erinevate rakenduste jaoks. Nende hulka kuuluvad näo/objekti tuvastamine, tuvastamine, klassifitseerimine ja palju muud.

Teie näoandmete privaatsus on omaette murekoht. Sajad silmapaistvad ettevõtted, nagu Google, IBM ja Yahoo, kasutavad oma rakendustes OpenCV-d. Mõned inimesed, kelle eesmärk on hoida oma andmeid privaatsena, on näidanud näotuvastuse vältimiseks on viise.

OpenCV installimiseks Pythonis kasutage käsku:

pip installida opencv-python

Kuidas Pythoni abil näotuvastusprogrammi luua

Näodetektori ehitamiseks järgige neid samme:

See näidiskood koos Haar Cascade algoritmifailiga on saadaval a GitHubi hoidla ja seda saate MIT-i litsentsi alusel tasuta kasutada.

  1. Laadige alla Haar Cascade Frontal Face Vaikimisi XML faili ja asetage see samasse kohta, kus teie Pythoni programm.
  2. Importige OpenCV teek.
    # vajalike teekide importimine
    importida cv2
  3. Lihtsaks viitamiseks salvestage Haar Cascade Frontal Face algoritmifail.
    # laadib haar-juhtumi algoritmi faili alg muutujasse
    alg = "haarcascade_frontalface_default.xml"
  4. Kasutage XML-faili OpenCV-sse laadimiseks klassi CascadeClassifier.
    # algoritmi edastamine OpenCV-le
    haar_cascade = cv2.CascadeClassifier (alg)
  5. Jäädvustage video kaamerast. Anna 0 edasi VideoCapture() põhikaamera kasutamiseks. Kui olete ühendanud välise kaamera, saate selle asemel kasutada järjestikuseid numbreid 1, 2 ja nii edasi.
    # kaamerast videovoo jäädvustamine
    cam = cv2.VideoCapture (0)
  6. Seadistage kaamera sisendi kaadri haaval lugemiseks lõpmatu silmus. The loe () funktsioon tagastab kaks parameetrit. Esimene väärtus on tõeväärtuse tüüpi, mis näitab, kas toiming on edukas või mitte. Teine parameeter sisaldab tegelikku kaadrit, millega kavatsete töötada. Hoidke seda raami img muutuv.
    samal ajalTõsi:
    _, img = cam.read()
  7. Määrake vaiketekst, mis kuvatakse kujul Nägu ei tuvastatud. Kui see tuvastatakse, värskendage selle muutuja väärtust.
     tekst = "Nägu ei tuvastatud"
  8. Reaalsest maailmast saadud sisend on värviline, BGR-vormingus. BGR tähistab sinist, rohelist ja punast. See loob arvutinägemisrakenduste jaoks palju töötlemist. Selle vähendamiseks kasutage halltoonide vormingut.
    # teisendage iga kaader BGR-st halltooniks
    grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
    Edastage raami ja konversioonikoodi vorming, COLOR_BGR2GRAY, kuni cvtColor() et muuta video iga kaader värvilisest halltooniks.
  9. Kasutage detectMultiScale() nägude tuvastamiseks. See meetod võtab sisendiks kolm parameetrit. Esiteks on lähtepilt, hall Pilt. Teine parameeter on scaleFactor. See määrab, kui palju peate pildi suurust igal pildiskaalal vähendama. Kasutage skaleerimistegurina vaikeväärtust 1,3. Mida suurem on mastaabitegur, seda vähem samme ja seda kiirem on täitmine. Siiski on ka suurem tõenäosus, et näod puuduvad. Kolmas parameeter on minNeighbors. See määrab, kui palju naabreid peaks igal kandidaatristkülikul olema, et see säiliks. Mida suurem on väärtus, seda väiksem on valepositiivse tulemuse võimalus, kuid see tähendab ka ebaselgete näojälgede kaotamist.
    # tuvastage Haar Cascade abil nägusid 
    nägu = haar_cascade.detectMultiScale (greyImg, 1.3, 4)
  10. Kui tuvastate näo, saate neli koordinaati. x tähistab x-koordinaati, y tähistab y-koordinaati, w tähistab laiust ja h tähistab kõrgust. Värskendage teksti Nägu tuvastatud ja joonistage nende koordinaatide abil ristkülik. Ristküliku värvus on roheline (BGR) formaadis paksusega kaks pikslit.
    # joonistage näo ümber ristkülik ja värskendage tekstiks Face Detected
    (x, y, w, h) näol:
    tekst = "Nägu tuvastatud"
    cv2.ristkülik(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
  11. Soovi korral printige tekst väljundkonsoolil. Kuvage tekst ekraanil, kasutades allikana jäädvustatud kaadrit, ülaltoodud tekstis saadud teksti, fonti stiil FONT_HERSHEY_SIMPLEX, fondi mastaabitegur 1, sinine värv, kahe piksli paksus ja joone tüüp AA.
    # kuvage pildil tekst
    printida(tekst)
    pilt = cv2.putText (img, tekst, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)
  12. Kuvage pealkirjaga aken Näotuvastus ja pilt. Kasuta oodake () meetod akna kuvamiseks 10 millisekundiks ja klahvivajutuse kontrollimiseks. Kui kasutaja vajutab nuppu Esc klahvi (ASCII väärtus 27), väljuge tsüklist.
    # kuvage väljundaken ja vajutage väljumiseks paoklahvi
    cv2.imshow("Näotuvastus", pilt)
    võti = cv2.waitKey (10)

    kui klahv == 27:
    murda

  13. Lõpuks vabastage kaamera objekt Pythoni programmist ja sulgege kõik aknad.
    nukk.vabasta()
    cv2.destroyAllWindows()

Näotuvastus Pythoni abil tegevuses

Kui nägu on vaates, peaksite nägema sellist väljundit:

Kui nägu pole, näete sellist teadet:

Haari kaskaadi algoritmi kasutava näotuvastuse piirangud

Kuigi see algoritm on kerge, väikese mudeli suurusega ja töötab kiiresti, on sellel mõned piirangud.

  • Reaalajas videos peab nägu olema kaamera vaateväljas. Kui nägu on liiga kaugel või lähedal või liiga kallutatud, ei suuda algoritm funktsioone tuvastada.
  • See on eesmise näo algoritm, nii et te ei saa külgvaateid tuvastada.
  • Kõrged valepositiivsed tulemused. Sageli tuvastab see alad nägudena, isegi kui nägu pole olemas.
  • Peab olema optimaalsed valgustingimused. Liigne või hämar valgustus takistab algoritmi täpsust.

Näotuvastuse paljud rakendused

Näotuvastusel on tänapäeva maailmas lai valik rakendusi. Saate seda kasutada näotuvastuseks nutitelefonides, kodudes, sõidukites ja sisserände kontrollpunktides. Näotuvastus on juba levinud CCTV-seires, sotsiaalmeedia filtrites ja automaatses näojälgimises kinematograafias.

See on alles selle imelise tehnoloogia algus. Tänu edusammudele suudame tuvastada kadunud lapsi, tabada kurjategijaid ja ennetada selliseid kuritegusid nagu identiteedivargus.