Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu. Loe rohkem.

Näo hägustamise funktsiooni saate kasutada inimese näo varjamiseks videos või pildis mitmel põhjusel. Kõige olulisemad on privaatsus- ja turvaprobleemid. Enamikul videojagamisplatvormidel ja videotöötlustarkvaradel on näo hägustamise funktsioon sisse ehitatud.

Pythoni ning OpenCV ja NumPy teekide abil saate nullist luua oma näo hägustamise programmi.

Oma keskkonna seadistamine

Selle artikli jätkamiseks peate olema tuttav Pythoni põhitõed ja omama põhiteadmisi kasutades NumPy teeki.

Avage mis tahes Pythoni IDE, millega olete rahul. Looge virtuaalne keskkond, kuhu installite vajalikud teegid. Looge uus Pythoni fail. Liikuge terminali ja käivitage vajalike teekide installimiseks järgmine käsk. Edastage teegid tühikuga piiritletud loendina.

pip installi OpenCV-python NumPy

Videosisendi vastuvõtmiseks ja eeltöötlemiseks kasutate OpenCV-d ning massiividega töötamiseks NumPyt.

Kui olete teegid installinud, oodake, kuni IDE projekti skelette värskendab. Kui värskendus on lõppenud ja keskkond on valmis, võite alustada kodeerimist.

Täielik lähtekood on saadaval a GitHubi hoidla.

Nõutavate teekide importimine

Alustage OpenCV ja NumPy teekide importimisega. See võimaldab teil helistada ja kasutada kõiki nende toetatavaid funktsioone. Importige OpenCV-python cv2-na.

importida cv2
importida tuim nagu np

OpenCV-pythoni moodulid kasutavad nime cv2 kokkuleppena, mille OpenCV kogukond kehtestas. OpenCV-python on OpenCV teegi Pythoni ümbris, mis on kirjutatud C++ keeles.

Teie panuse vastuvõtmine

Looge muutuja ja initsialiseerige VideoCapture objektiks. Kui soovite sisendallikana kasutada arvuti peamist kaamerat, jätke argumendiks null. Arvutiga ühendatud välise kaamera kasutamiseks läbige üks. Eelsalvestatud videol näo hägustamise tegemiseks läbige selle asemel video tee. To kasutage kaugkaamerat, edastage kaamera URL, mis sisaldab selle IP-aadressi ja pordi numbrit.

cap = cv2.VideoCapture(0)

Sisendis näo hägustamise tegemiseks vajate kolme funktsiooni:

  • Funktsioon, mis eeltöötleb sisendit.
  • Funktsioon, mis hägustab sisendis oleva näo.
  • Põhifunktsioon, mis juhib programmi voogu ja kuvab väljundit.

Videosisendi eeltöötlus

Looge sisendi eeltöötlusfunktsioon, mis võtab sisendiks iga sisendvideo kaadri. Initsialiseerige CascadeClassifier klass, mida kasutate näotuvastuseks. Muutke raami suuruseks 640 x 640 pikslit. Töötlemise hõlbustamiseks teisendage muudetud suurusega raam halltooniks ning lõpuks tuvastage sisendis olevad näod ja siduge need ristkülikutega.

defimage_preprocess(raam):
face_detector = cv2.CascadeClassifier (cv2.data.haarcascades
+ 'haarcascade_frontalface_default.xml')

resized_image = cv2.resize (raam, (640, 640))

gray_image = cv2.cvtColor (suurusega_pilt,
cv2.COLOR_BGR2GRAY)

face_rects = näo_detektor.detectMultiScale(
gray_image, 1.04, 5, minSize=(20, 20))

tagasi resized_image, face_rects

See funktsioon tagastab korteeži, mis sisaldab muudetud suurusega kujutist ja tuvastatud nägusid tähistavate ristkülikute loendit.

Näo hägustamine

Looge hägustamise funktsioon, mis hägustab teie sisendis olevad näod. Funktsioon võtab sisendiks muudetud suurusega raami ja eeltöötlusfunktsiooni poolt tagastatud tahke piiravate ristkülikute loendi. Silmused üle iga näo ristküliku. Arvutab iga ristküliku keskpunkti ja hägustava ringi raadiuse. Loob musta kujutise, mille mõõtmed on samad kui muudetud raami suurust, lähtestades kõik pikslid nulliks. Joonistab arvutatud raadiuse abil mustale kujutisele valge ringi, mille keskpunkt on näo ristkülikus. Lõpuks hägustab see pildi valgel ringil.

defface_blur(suurusega_raam, näo_otsad):
jaoks (x, y, w, h) sisse face_rects:
# Keskpunkti ja raadiuse määramine
# hägustamise ringist
center_x = x + w // 3
center_y = y + h // 3
raadius = h // 1

# sarnase musta kujutise loomine
# mõõtmed raamina
mask = np.zeros((resized_frame.shape[:3]), np.uint8)

# joonistage raami näopiirkonda valge ring
cv2.circle (mask, (kesk_x, kesk_y), raadius,
(255, 255, 255), -1)

# kogu kaadri hägustamine
blurred_image = cv2.medianBlur (suurusega_raam, 99)

# raami rekonstrueerimine:
# – häguse kaadri pikslid, kui mask > 0
# - muul juhul võtke pikslid algsest kaadrist
resized_frame = np.where (mask > 0, hägune_pilt,
muudetud_raam)

tagasi muudetud_raam

Funktsioon kasutab NumPy kus () funktsioon kaadri taastamiseks hägustamise ajal.

Programmi voo juhtimine

Looge põhifunktsioon, mis toimib teie programmi sisenemispunktina. Seejärel juhib see programmi voogu. Funktsioon käivitab lõpmatu tsükli, et pidevalt jäädvustada videosisendi kaadreid. Kaamerast kaadri lugemiseks helistage korgiobjekti lugemismeetodile.

Seejärel edastab funktsioon kaadri eeltöötlusfunktsioonile ja tagastab väärtused teisele funktsioonile face_blur, et saada hägune pilt. Seejärel muudab see hägustamisfunktsiooni tagastatud kaadri suurust ja kuvab väljundi.

defpeamine():
samal ajalTõsi:
edu, raam = cap.read()
resized_input, face_rects = pildi_eeltöötlus (raam)
hägune_pilt = näo_hägu (suurusega_sisend, näo_otsad)

# Hägune kujutise kuvamine
cv2.imshow("Udus pilt", cv2.resize (hägune_pilt, (500, 500)))

kui cv2.waitKey(1) == tellimus("q"):
murda

Funktsioon lõpetab ka väljundi kuva, kui kasutaja vajutab klahvi q.

Programmi käitamine

Veenduge, et skripti käivitamisel käivitub esmalt põhifunktsioon. See tingimus on vale, kui impordite skripti mõne teise programmi moodulina.

kui __nimi__ == "__main__":
peamine ()

See võimaldab kasutada skripti moodulina või käivitada seda eraldiseisva programmina. Kui programm töötab, peaksite nägema sarnast väljundit:

Nägu on udune ja tundmatu.

Näo hägustamise tegelikud rakendused

Inimeste privaatsuse kaitsmiseks saate kasutada näo hägusust paljudes rakendustes. Tänavavaate- ja kaardistamisteenused kasutavad hägusust, et hägustada jäädvustatud piltidel olevate inimeste nägusid. Õiguskaitseorganid kasutavad tunnistajate identiteedi kaitsmiseks näo hägusust.

Paljud videojagamisplatvormid on integreerinud oma kasutajate jaoks ka näo hägustamise funktsiooni. Nendes piirkondades näo hägustamise kasutamise võrdlemine aitab teil jälgida, kuidas teised platvormid seda tehnoloogiat integreerivad.