Ar kada susimąstėte, kaip „Snapchat“ tiksliai pritaiko įvairius filtrus ant veido? Ar jūsų išmanusis telefonas veikia stebuklingai, kai jis atrakinamas naudojant jūsų veido bruožus? Ne, jūs tik žiūrite, kaip veikia veido aptikimas.

Veido aptikimas yra dirbtinio intelekto technologija, galinti atpažinti žmonių veidus skaitmeniniame vaizde ar vaizdo įraše. Sužinokite, kaip galite sukurti veido aptikimo programą realiuoju laiku iš mažiau nei 25 kodo eilučių naudodami legendinį Haar Cascade algoritmą.

Kas yra Haar kaskada?

Haar Cascade yra objektų aptikimo algoritmas, kurį pristatė Paulas Viola ir Michaelas Jonesas, kad aptiktų veidus vaizduose ar vaizdo įrašuose. Kaskados funkcija mokoma naudojant daug teigiamų ir neigiamų vaizdų, kurie vėliau gali būti naudojami bet kuriam objektui ar veidui identifikuoti kitose laikmenose. Šiuos mokomuosius failus galima rasti OpenCV GitHub saugykla.

Naudojant slankiojo lango metodą, fiksuoto dydžio langas pakartojamas per vaizdą iš kairės į dešinę, iš viršaus į apačią. Kiekvienoje fazėje langas sustoja ir klasifikuoja, ar srityje yra veidas, ar ne.

instagram viewer

OpenCV, kompiuterinio matymo įrankis, veikia su iš anksto paruoštu Haar Cascade modeliu, kad klasifikuotų funkcijas. Kiekviena fazė patikrina penkias savybes: dvi briaunos, dvi linijos ir vieną keturių stačiakampių ypatybes.

Stebint, akių sritis atrodo tamsesnė nei skruostų sritis, o nosies sritis – šviesesnė nei akių sritis. Galite vizualizuoti šias funkcijas taip, kaip nurodyta toliau.

Naudodamas šias funkcijas ir pikselių skaičiavimą, algoritmas identifikuoja daugiau nei 100 000 duomenų taškų. Tada galite naudoti Adaboost algoritmą, kad pagerintumėte tikslumą ir atmestumėte nesusijusias funkcijas. Per daugelį iteracijų šis metodas sumažina klaidų dažnį ir padidina funkcijos svorį, kol pasiekiamas priimtinas tikslumas.

Tačiau stumdomo lango technika sustoja, jei konkretus bandymo atvejis nepavyksta ir tai yra brangu. Norėdami tai išspręsti, galite pritaikyti klasifikatorių kaskados koncepciją. Užuot taikę visas funkcijas viename lange, šis metodas sugrupuoja ir taiko etapais.

Jei langas nepavyksta pirmame etape, procesas jį atmeta, priešingu atveju jis tęsiamas. Dėl to drastiškai sumažėja atliekamų operacijų skaičius, todėl jį galima naudoti realiojo laiko programoms.

Veido aptikimo darbo eiga

Norėdami sukurti veido aptikimo programą, vadovaukitės šiuo algoritmu:

  1. Įkelkite Haar kaskados priekinio veido algoritmą.
  2. Inicijuokite fotoaparatą.
  3. Skaityti kadrus iš fotoaparato.
  4. Konvertuoti spalvotus vaizdus į pilkos spalvos tonus.
  5. Gaukite veido koordinates.
  6. Nubrėžkite stačiakampį ir įrašykite atitinkamą pranešimą.
  7. Rodyti išvestį.

Kas yra OpenCV?

OpenCV yra atvirojo kodo kompiuterinės vizijos ir mašininio mokymosi biblioteka. Jame yra daugiau nei 2500 optimizuotų algoritmų įvairioms programoms. Tai apima veido / objektų aptikimą, atpažinimą, klasifikavimą ir daug daugiau.

Jūsų veido duomenų privatumas yra atskiras rūpestis. Šimtai žinomų įmonių, tokių kaip Google, IBM ir Yahoo, savo programose naudoja OpenCV. Kai kurie žmonės, kurie siekia išlaikyti savo duomenis privačius, įrodė yra būdų, kaip išvengti veido atpažinimo.

Norėdami įdiegti OpenCV Python, naudokite komandą:

pip diegti opencv-python

Kaip sukurti veido aptikimo programą naudojant Python

Norėdami sukurti veido detektorių, atlikite šiuos veiksmus:

Šis pavyzdinis kodas kartu su Haar Cascade algoritmo failu yra prieinamas a GitHub saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.

  1. Atsisiųskite Haar Cascade priekinio veido numatytasis XML failą ir įdėkite jį į tą pačią vietą kaip ir jūsų Python programa.
  2. Importuokite OpenCV biblioteką.
    # importuojamos reikalingos bibliotekos
    importuoti cv2
  3. Išsaugokite „Haar Cascade Frontal Face“ algoritmo failą, kad galėtumėte lengvai pateikti nuorodas.
    # įkeliamas haar atvejo algoritmo failas į alg kintamąjį
    alg = "haarcascade_frontalface_default.xml"
  4. Norėdami įkelti XML failą į OpenCV, naudokite klasę CascadeClassifier.
    # perduodamas algoritmas OpenCV
    haar_cascade = cv2.CascadeClassifier (alg)
  5. Užfiksuokite vaizdo įrašą iš fotoaparato. Perduokite 0 į Vaizdo įrašas () funkcija, skirta naudoti pagrindinę kamerą. Jei prijungėte išorinę kamerą, vietoj jos galite naudoti skaičius 1, 2 ir tt.
    # fiksuojamas vaizdo įrašas iš fotoaparato
    cam = cv2.VideoCapture (0)
  6. Nustatykite begalinę ciklą, kad galėtumėte skaityti fotoaparato įvestį kadras po kadro. The skaityti () funkcija grąžina du parametrus. Pirmoji reikšmė yra loginio tipo, nurodanti, ar operacija sėkminga, ar ne. Antrajame parametre yra faktinis kadras, su kuriuo ketinate dirbti. Laikykite šį rėmelį img kintamasis.
    kolTiesa:
    _, img = cam.read()
  7. Nustatykite numatytąjį tekstą, kad jis būtų rodomas kaip Veidas neaptiktas. Kai aptiksite, atnaujinkite šio kintamojo reikšmę.
     tekstas = "Veidas neaptiktas"
  8. Iš realaus pasaulio gaunama įvestis yra spalvinga, BGR formatu. BGR reiškia mėlyną, žalią ir raudoną. Tai sukuria daug apdorojimo kompiuterinio regėjimo programoms. Norėdami tai sumažinti, naudokite pilkos spalvos formatą.
    # konvertuoti kiekvieną kadrą iš BGR į pilkos spalvos toną
    grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
    Perduokite rėmelio ir konversijos kodo formatą, COLOR_BGR2GRAY, į cvtColor() norėdami pakeisti kiekvieną vaizdo įrašo kadrą iš spalvoto į pilkos spalvos toną.
  9. Naudokite detectMultiScale() aptikti veidus. Šis metodas naudoja tris parametrus kaip įvestį. Pirmas yra šaltinio vaizdas, pilkasImg. Antrasis parametras yra skalės koeficientas. Tai nurodo, kiek turite sumažinti vaizdo dydį kiekvienoje vaizdo skalėje. Kaip mastelio koeficientą naudokite numatytąją reikšmę 1,3. Kuo didesnis masto koeficientas, tuo mažiau žingsnių ir greitesnis vykdymas. Tačiau taip pat yra didesnė veidų praradimo tikimybė. Trečias parametras yra minNeighbors. Tai nurodo, kiek kaimynų turi turėti kiekvienas kandidatas stačiakampis, kad jį išlaikytų. Kuo didesnė vertė, tuo mažesnė klaidingo teigiamo rezultato tikimybė, tačiau tai taip pat reiškia, kad prarandami neaiškūs veido pėdsakai.
    # aptikti veidus naudojant Haar Cascade 
    veidas = haar_cascade.detectMultiScale (greyImg, 1.3, 4)
  10. Kai aptinkate veidą, gaunate keturias koordinates. x žymi x koordinatę, y – y koordinatę, w – plotį, o h – aukštį. Atnaujinkite tekstą į Veidas aptiktas ir nubrėžkite stačiakampį naudodami šias koordinates. Stačiakampio spalva yra žalia (BGR) formato, kurio storis yra du pikseliai.
    # nupieškite stačiakampį aplink veidą ir atnaujinkite tekstą į Face Detected
    (x, y, w, h) veidui:
    tekstas = "Veidas aptiktas"
    cv2.stačiakampis(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
  11. Pasirinktinai atspausdinkite tekstą išvesties konsolėje. Rodyti tekstą ekrane naudodami užfiksuotą kadrą kaip šaltinį, tekstą, gautą aukščiau pateiktame tekste, šriftą stilius FONT_HERSHEY_SIMPLEX, šrifto mastelio koeficientas 1, mėlyna spalva, dviejų pikselių storis ir linijos tipas AA.
    # rodyti tekstą paveikslėlyje
    spausdinti(tekstas)
    vaizdas = cv2.putText (img, text, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)
  12. Rodyti langą su pavadinimu Veido atpažinimas ir vaizdas. Naudoti palaukti () langą rodyti 10 milisekundžių ir patikrinti, ar nepaspaustas klavišas. Jei vartotojas paspaudžia Esc klavišą (ASCII reikšmė 27), išeikite iš ciklo.
    # parodykite išvesties langą ir paspauskite pabėgimo klavišą, kad išeitumėte
    cv2.imshow("Veido atpažinimas", vaizdas)
    raktas = cv2.waitKey (10)

    jei raktas == 27:
    pertrauka

  13. Galiausiai atleiskite kameros objektą iš python programos ir uždarykite visus langus.
    kumštelis.paleisk()
    cv2.destroyAllWindows()

Veido aptikimas naudojant Python

Kai matomas veidas, turėtumėte matyti tokią išvestį:

Kai nėra veido, matysite tokį pranešimą:

Veido aptikimo naudojant Haar kaskados algoritmą apribojimai

Nors šis algoritmas yra lengvas, mažo modelio dydžio ir veikia greitai, yra keletas apribojimų:

  • Vaizdo įraše realiuoju laiku veidas turi būti kameros matymo zonoje. Jei veidas yra per toli, per arti arba per daug pakreiptas, algoritmas neatpažįsta funkcijų.
  • Tai priekinio veido algoritmas, todėl negalite aptikti šoninių vaizdų.
  • Dideli klaidingai teigiami rezultatai. Jis dažnai aptinka sritis kaip veidus, net jei veido nėra.
  • Turi būti optimalios apšvietimo sąlygos. Per didelis arba silpnas apšvietimas trukdo algoritmo tikslumui.

Daugybė veido aptikimo programų

Veido aptikimas šiuolaikiniame pasaulyje turi platų pritaikymo spektrą. Jį galite naudoti veido atpažinimui išmaniuosiuose telefonuose, namuose, transporto priemonėse ir imigracijos kontrolės punktuose. Veido aptikimas jau įprastas CCTV stebėjimo, socialinės žiniasklaidos filtruose ir automatinio veido sekimo kinematografijoje.

Tai tik šios nuostabios technologijos pradžia. Su pažanga galėtume nustatyti dingusius vaikus, sugauti nusikaltėlius ir užkirsti kelią tokiems nusikaltimams kaip tapatybės vagystė.