Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

Možete upotrijebiti zamućivanje lica da biste sakrili nečije lice, u videu ili na slici, iz nekoliko razloga. Pitanja privatnosti i sigurnosti su najdominantnija. Većina platformi za dijeljenje videozapisa i softvera za uređivanje videozapisa imaju ugrađenu funkciju zamućivanja lica.

Možete izraditi vlastiti program za zamućivanje lica od nule koristeći Python i biblioteke OpenCV i NumPy.

Postavljanje vašeg okruženja

Da biste nastavili s ovim člankom, morate biti upoznati s osnove Pythona i imati osnovno razumijevanje pomoću biblioteke NumPy.

Otvorite bilo koji Python IDE koji vam odgovara. Stvorite virtualno okruženje u koje ćete instalirati potrebne biblioteke. Stvorite novu Python datoteku. Dođite do terminala i pokrenite sljedeću naredbu za instalaciju potrebnih biblioteka. Proslijedite biblioteke kao popis odijeljen razmakom.

pip instalirajte OpenCV-python NumPy

Koristit ćete OpenCV za uzimanje i prethodnu obradu video ulaza i NumPy za rad s nizovima.

Nakon što instalirate biblioteke, pričekajte da IDE ažurira kosture projekta. Kada je ažuriranje dovršeno i okruženje je spremno, možete slobodno početi kodirati.

Puni izvorni kod dostupan je u a GitHub spremište.

Uvoz potrebnih biblioteka

Počnite s uvozom OpenCV i NumPy biblioteka. To će vam omogućiti pozivanje i korištenje svih funkcija koje podržavaju. Uvezi OpenCV-python kao cv2.

uvoz cv2
uvoz numpy kao np

OpenCV-python moduli koriste naziv cv2 kao konvenciju koju je uspostavila OpenCV zajednica. OpenCV-python je Python omotač OpenCV biblioteke koja je napisana u C++.

Prihvaćanje vašeg doprinosa

Stvorite varijablu i inicijalizirajte Video snimanje objekt. Proslijedite nulu kao argument ako želite koristiti primarnu kameru svog računala kao ulazni izvor. Za korištenje vanjske kamere spojene na vaše računalo prođite jednu. Da biste izvršili zamućivanje lica na unaprijed snimljenom videozapisu, umjesto toga proslijedite putanju videozapisa. Do koristite udaljenu kameru, proslijedite URL kamere koji sadrži njezinu IP adresu i broj porta.

cap = cv2.VideoCapture(0)

Za izvođenje zamućivanja lica na ulazu trebat će vam tri funkcije:

  • Funkcija koja će unaprijed obraditi unos.
  • Funkcija koja će zamutiti lice u unosu.
  • Glavna funkcija koja će kontrolirati tijek programa i prikazati izlaz.

Predobrada video ulaza

Stvorite funkciju pretprocesiranja ulaza koja će svaki okvir ulaznog videa uzeti kao svoj ulaz. Inicijalizirajte klasu CascadeClassifier koju ćete koristiti za detekciju lica. Promijenite veličinu okvira na 640 x 640 piksela. Pretvorite okvir promijenjene veličine u sive tonove radi lakše obrade i na kraju otkrijte lica u unosu i povežite ih pravokutnicima.

defpredobrada_slike(okvir):
detektor_lica = cv2.CascadeClassifier (cv2.data.haarcascades
+ 'haarcascade_frontalface_default.xml')

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

siva_slika = cv2.cvtBoja (promijenjena_veličina_slike,
cv2.COLOR_BGR2GRAY)

face_rects = face_detector.detectMultiScale(
siva_slika, 1.04, 5, minSize=(20, 20))

povratak slika promijenjene veličine, ispravci lica

Ova funkcija vraća torku koja sadrži sliku promijenjene veličine i popis pravokutnika koji predstavljaju otkrivena lica.

Zamagljivanje lica

Stvorite funkciju zamućivanja koja će zamutiti lica u vašem unosu. Funkcija kao ulaz uzima okvir promijenjene veličine i popis pravokutnika koji ograničavaju lica koje je vratila funkcija pretprocesiranja. Petlje preko svakog pravokutnika lica. Izračunava središte svakog pravokutnika i polumjer kruga zamućivanja. Stvara crnu sliku istih dimenzija kao okvir promijenjene veličine inicijalizacijom svih piksela na nulu. Crta bijeli krug na crnoj slici čije je središte u pravokutniku lica koristeći izračunati polumjer. Na kraju, zamagljuje sliku na bijelom krugu.

defzamućenje lica(okvir promijenjene veličine, ispravci lica):
za (x, y, w, h) u face_rects:
# Određivanje središta i radijusa
# kruga zamućenja
centar_x = x + w // 3
centar_y = y + h // 3
polumjer = h // 1

# stvaranje crne slike koja ima slično
# dimenzija kao okvir
maska ​​= np.zeros((resized_frame.shape[:3]), np.uint8)

# nacrtajte bijeli krug u području lica okvira
cv2.krug (maska, (centar_x, center_y), polumjer,
(255, 255, 255), -1)

# zamućivanje cijelog okvira
zamućena_slika = cv2.medianBlur (okvir_promijenjene veličine, 99)

# rekonstrukcija okvira:
# - pikseli iz zamućenog okvira ako je maska ​​> 0
# - inače, uzmite piksele iz izvornog okvira
okvir_promijenjene veličine = np.gdje (maska ​​> 0, zamućena_slika,
okvir_promijenjene veličine)

povratak okvir_promijenjene veličine

Funkcija koristi NumPy gdje() funkcija za rekonstrukciju okvira tijekom zamućivanja.

Kontrola tijeka vašeg programa

Napravite glavnu funkciju koja će služiti kao ulazna točka vašeg programa. Tada će kontrolirati tijek programa. Funkcija će pokrenuti beskonačnu petlju za kontinuirano snimanje okvira video ulaza. Pozovite metodu čitanja kape objekta za čitanje okvira iz kamere.

Funkcija će zatim proslijediti okvir funkciji pretprocesiranja i proslijediti povratne vrijednosti drugoj funkciji, face_blur, kako bi se dobila zamućena slika. Zatim mijenja veličinu okvira koji vraća funkcija zamućivanja i prikazuje izlaz.

defglavni():
dokPravi:
uspjeh, okvir = cap.read()
resized_input, face_rects = image_preprocess (okvir)
zamućena_slika = zamućenje_lice (unos_promijenjene_veličine, ispravljeno_lice)

# Prikaz zamućene slike
cv2.imshow("Zamućena slika", cv2.resize (mutna_slika, (500, 500)))

ako cv2.waitKey(1) == red("q"):
pauza

Funkcija također prekida prikaz izlaza kada korisnik pritisne tipku q.

Pokretanje programa

Osigurajte da se glavna funkcija prva pokrene kada pokrenete skriptu. Ovaj će uvjet biti netočan ako uvezete skriptu kao modul u drugi program.

ako __ime__ == "__glavni__":
glavni()

To vam omogućuje korištenje skripte kao modula ili pokretanje kao samostalni program. Kada se program pokrene, trebali biste vidjeti izlaz sličan ovome:

Lice je zamagljeno i neprepoznatljivo.

Primjena zamućivanja lica u stvarnom svijetu

Zamućivanje lica možete primijeniti u mnogim vrstama aplikacija kako biste zaštitili privatnost ljudi. Usluge prikaza ulice i kartiranja koriste zamućivanje kako bi zamaglile lica ljudi na slikama koje snimaju. Organi za provođenje zakona koriste zamućivanje lica kako bi zaštitili identitet svjedoka.

Mnoge platforme za dijeljenje videa također su integrirale značajku zamućivanja lica za svoje korisnike. Usporedba upotrebe zamućivanja lica u ovim područjima pomoći će vam da uočite kako druge platforme integriraju tu tehnologiju.