Vai esat kādreiz domājuši, kā Snapchat precīzi uzklāj dažādus filtrus uz jūsu sejas? Vai jūsu viedtālrunis darbojas maģiski, kad tas tiek atbloķēts, izmantojot jūsu sejas vaibstus? Nē, jūs tikai skatāties, kā darbojas sejas noteikšanas funkcija.

Sejas noteikšana ir mākslīgā intelekta tehnoloģija, kas digitālā attēlā vai video var identificēt cilvēku sejas. Atklājiet, kā varat izveidot reāllaika sejas noteikšanas programmu mazāk nekā 25 koda rindās, izmantojot leģendāro Haar Cascade algoritmu.

Kas ir Hāras kaskāde?

Haar Cascade ir objektu noteikšanas algoritms, ko ieviesa Pols Viola un Maikls Džonss, lai attēlos vai videoklipos noteiktu sejas. Kaskādes funkcija tiek apmācīta, izmantojot daudzus pozitīvus un negatīvus attēlus, kurus vēlāk var izmantot, lai identificētu jebkuru objektu vai seju citos medijos. Šie apmācītie faili ir pieejami vietnē OpenCV GitHub repozitorijs.

Izmantojot bīdāmā loga pieeju, fiksēta izmēra logs atkārto attēlu no kreisās puses uz labo, no augšas uz leju. Katrā fāzē logs apstājas un klasificē, vai apgabalā ir seja vai nav.

Datorredzes rīks OpenCV darbojas ar iepriekš apmācītu Haar Cascade modeli, lai klasificētu funkcijas. Katrā fāzē tiek pārbaudīti pieci elementi: divi malu elementi, divi līniju elementi un viena četru taisnstūra iezīme.

Novērojot, acu zona šķiet tumšāka nekā vaigu zona, savukārt deguna zona izskatās gaišāka nekā acu zona. Šīs funkcijas varat vizualizēt tālāk norādītajā veidā.

Izmantojot šīs funkcijas un pikseļu aprēķināšanu, algoritms identificē vairāk nekā 100 000 datu punktu. Pēc tam varat izmantot Adaboost algoritmu, lai uzlabotu precizitāti un atmestu neatbilstošas ​​funkcijas. Daudzu iterāciju laikā šī pieeja samazina kļūdu biežumu un palielina līdzekļa svaru, līdz tiek sasniegta pieņemama precizitāte.

Tomēr bīdāmo logu tehnika tiek pārtraukta, ja konkrētais testa gadījums neizdodas un tas ir skaitļošanas ziņā dārgs. Lai to atrisinātu, varat izmantot klasifikatoru kaskādes koncepciju. Tā vietā, lai visas funkcijas lietotu vienā logā, šī pieeja grupē un piemēro tos pa posmiem.

Ja logs neizdodas pirmajā posmā, process to izmet, pretējā gadījumā tas turpinās. Tas noved pie krasa veicamo darbību skaita samazināšanās un padara to izmantojamu reāllaika lietojumprogrammām.

Sejas noteikšanas darbplūsma

Izpildiet šo algoritmu, lai izveidotu sejas noteikšanas programmu:

  1. Ielādējiet Haar Cascade frontālās sejas algoritmu.
  2. Inicializējiet kameru.
  3. Lasīt kadrus no kameras.
  4. Pārvērtiet krāsu attēlus pelēktoņos.
  5. Iegūstiet sejas koordinātas.
  6. Uzzīmējiet taisnstūri un ievietojiet atbilstošo ziņojumu.
  7. Parādiet izvadi.

Kas ir OpenCV?

OpenCV ir atvērtā pirmkoda datora redzes un mašīnmācīšanās bibliotēka. Tam ir vairāk nekā 2500 optimizētu algoritmu dažādām lietojumprogrammām. Tie ietver sejas/objektu noteikšanu, atpazīšanu, klasifikāciju un daudz ko citu.

Jūsu sejas datu konfidencialitāte ir atsevišķa problēma. Simtiem ievērojamu uzņēmumu, piemēram, Google, IBM un Yahoo, savās lietojumprogrammās izmanto OpenCV. Daži cilvēki, kuru mērķis ir saglabāt savus datus privātus, ir pierādījuši ir veidi, kā izvairīties no sejas atpazīšanas.

Lai instalētu OpenCV programmā Python, izmantojiet komandu:

pip uzstādīt opencv-python

Kā izveidot sejas noteikšanas programmu, izmantojot Python

Veiciet šīs darbības, lai izveidotu sejas detektoru:

Šis parauga kods kopā ar Haar Cascade algoritma failu ir pieejams a GitHub repozitorijs un to varat izmantot bez maksas saskaņā ar MIT licenci.

  1. Lejupielādēt Haar Cascade Frontal Face noklusējuma XML failu un ievietojiet to tajā pašā vietā, kur jūsu Python programma.
  2. Importējiet OpenCV bibliotēku.
    # nepieciešamo bibliotēku importēšana
    imports cv2
  3. Saglabājiet Haar Cascade Frontal Face algoritma failu, lai atvieglotu atsauces.
    # ielādējot haar gadījuma algoritma failu alg mainīgajā
    alg = "haarcascade_frontalface_default.xml"
  4. Izmantojiet CascadeClassifier klasi, lai ielādētu XML failu OpenCV.
    # nododot algoritmu OpenCV
    haar_cascade = cv2.CascadeClassifier (alg)
  5. Uzņemiet video no kameras. Pasūtiet 0 uz Videotver () funkciju, lai izmantotu galveno kameru. Ja esat pievienojis ārējo kameru, varat izmantot secīgus ciparus 1, 2 un tā tālāk, lai to izmantotu.
    # video plūsmas uzņemšana no kameras
    kamera = cv2.VideoCapture (0)
  6. Iestatiet bezgalīgu cilpu, lai nolasītu kameras ievadi kadru pa kadram. The lasīt () funkcija atgriež divus parametrus. Pirmā vērtība ir Būla tips, kas norāda, vai darbība ir veiksmīga vai nē. Otrais parametrs satur faktisko kadru, ar kuru jūs gatavojaties strādāt. Glabājiet šo rāmi img mainīgs.
    kamērTaisnība:
    _, img = cam.read()
  7. Iestatiet noklusējuma tekstu, kas parādās kā Seja nav noteikta. Kad tas tiek noteikts, atjauniniet šī mainīgā vērtību.
     teksts = "Seja nav noteikta"
  8. No reālās pasaules saņemtā ievade ir krāsaina BGR formātā. BGR apzīmē zilu, zaļu un sarkanu. Tas rada daudz apstrādes datora redzes lietojumprogrammām. Lai to samazinātu, izmantojiet pelēktoņu formātu.
    # pārvērš katru kadru no BGR uz pelēktoņu
    grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
    Nododiet rāmja un konversijas koda formātu, KRĀSA_BGR2GRAY, uz cvtColor() lai mainītu katru video kadru no krāsainas uz pelēktoņu.
  9. Izmantot detectMultiScale() lai noteiktu sejas. Šī metode izmanto trīs parametrus kā ievadi. Pirmais ir avota attēls, pelēksAttēls. Otrais parametrs ir scaleFactor. Tas norāda, cik daudz jums jāsamazina attēla izmērs katrā attēla mērogā. Kā mērogošanas koeficientu izmantojiet noklusējuma vērtību 1,3. Jo augstāks mēroga koeficients, jo mazāk soļu un ātrāka izpilde. Tomēr pastāv arī lielāka seju pazušanas iespējamība. Trešais parametrs ir minNeighbors. Tas norāda, cik kaimiņu vajadzētu būt katram kandidāta taisnstūrim, lai to saglabātu. Jo lielāka vērtība, jo mazāka ir viltus pozitīva iespēja, taču tas nozīmē arī neskaidru sejas pēdu izlaišanu.
    # noteikt sejas, izmantojot Haar Cascade 
    seja = haar_cascade.detectMultiScale (greyImg, 1.3, 4)
  10. Atklājot seju, tiek iegūtas četras koordinātas. x apzīmē x koordinātu, y apzīmē y koordinātu, w apzīmē platumu un h apzīmē augstumu. Atjauniniet tekstu uz Seja noteikta un uzzīmējiet taisnstūri, izmantojot šīs koordinātas. Taisnstūra krāsa ir zaļā (BGR) formātā ar divu pikseļu biezumu.
    # uzzīmējiet taisnstūri ap seju un atjauniniet tekstu uz Seja noteikta
    priekš (x, y, w, h) sejā:
    teksts = "Seja noteikta"
    cv2.taisnstūris(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
  11. Pēc izvēles izdrukājiet tekstu izvades konsolē. Parādiet tekstu ekrānā, izmantojot uzņemto kadru kā avotu, tekstu, kas iegūts iepriekš tekstā, fontu stils FONT_HERSHEY_SIMPLEX, fonta mēroga koeficients 1, zila krāsa, divu pikseļu biezums un līnijas veids AA.
    # parādīt tekstu uz attēla
    drukāt(teksts)
    attēls = cv2.putText (attēls, teksts, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)
  12. Parādiet logu ar nosaukumu Sejas noteikšana un attēls. Izmantojiet gaidiet taustiņu () metode, lai parādītu logu 10 milisekundes un pārbaudītu, vai nav nospiests taustiņš. Ja lietotājs nospiež Esc taustiņu (ASCII vērtība 27), izejiet no cilpas.
    # parādiet izvades logu un nospiediet evakuācijas taustiņu, lai izietu
    cv2.imshow("Sejas noteikšana", attēls)
    atslēga = cv2.waitKey (10)

    ja atslēga == 27:
    pārtraukums

  13. Visbeidzot, atlaidiet kameras objektu no python programmas un aizveriet visus logus.
    cam.atlaidiet()
    cv2.destroyAllWindows()

Sejas noteikšana, izmantojot Python darbībā

Kad ir redzama seja, jums vajadzētu redzēt šādu izvadi:

Ja nav redzama neviena seja, tiks parādīts šāds ziņojums:

Sejas noteikšanas ierobežojumi, izmantojot Hāra kaskādes algoritmu

Lai gan šis algoritms ir viegls, ar mazu modeļa izmēru un darbojas ātri, ir daži ierobežojumi:

  • Reāllaika videoklipā sejai ir jāatrodas kameras redzamības zonā. Ja seja ir pārāk tālu vai pārāk tuvu vai pārāk noliekta, algoritms nespēj uztvert funkcijas.
  • Tas ir frontālās sejas algoritms, tāpēc jūs nevarat noteikt sānskatus.
  • Augsti kļūdaini pozitīvi rezultāti. Tas bieži nosaka apgabalus kā sejas, pat ja tajā nav sejas.
  • Nepieciešami optimāli apgaismojuma apstākļi. Pārmērīgs vai vājš apgaismojums kavē algoritma precizitāti.

Daudzas sejas noteikšanas lietojumprogrammas

Mūsdienu pasaulē sejas noteikšanai ir plašs lietojumu klāsts. Varat to izmantot sejas atpazīšanai viedtālruņos, mājās, transportlīdzekļos un imigrācijas kontrolpunktos. Sejas noteikšana jau ir izplatīta videonovērošanas novērošanā, sociālo mediju filtros un automātiskā sejas izsekošana kinematogrāfijā.

Tas ir tikai šīs brīnišķīgās tehnoloģijas sākums. Pateicoties progresam, mēs varētu identificēt pazudušos bērnus, notvert noziedzniekus un novērst tādus noziegumus kā identitātes zādzības.