Sejas aizmiglošanu varat izmantot, lai paslēptu personas seju videoklipā vai attēlā vairāku iemeslu dēļ. Privātuma un drošības jautājumi ir visizplatītākie. Lielākajai daļai video koplietošanas platformu un video rediģēšanas programmatūras ir iebūvēta sejas aizmiglošanas funkcionalitāte.
Varat izveidot savu sejas aizmiglošanas programmu no jauna, izmantojot Python un OpenCV un NumPy bibliotēkas.
Jūsu vides iestatīšana
Lai turpinātu šo rakstu, jums ir jāiepazīstas ar Python pamati un ir pamatzināšanas par izmantojot NumPy bibliotēku.
Atveriet jebkuru Python IDE, kas jums patīk. Izveidojiet virtuālo vidi, kurā instalēsiet nepieciešamās bibliotēkas. Izveidojiet jaunu Python failu. Dodieties uz termināli un palaidiet šo komandu, lai instalētu vajadzīgās bibliotēkas. Nododiet bibliotēkas kā sarakstu ar atstarpi.
pip instalējiet OpenCV-python NumPy
Jūs izmantosit OpenCV, lai uzņemtu un iepriekš apstrādātu video ievadi, un NumPy, lai strādātu ar masīviem.
Kad esat instalējis bibliotēkas, pagaidiet, līdz IDE atjauninās projekta skeletus. Kad atjaunināšana ir pabeigta un vide ir gatava, varat sākt kodēšanu.
Pilns avota kods ir pieejams a GitHub repozitorijs.
Nepieciešamo bibliotēku importēšana
Sāciet ar OpenCV un NumPy bibliotēku importēšanu. Tas ļaus jums zvanīt un izmantot visas viņu atbalstītās funkcijas. Importējiet OpenCV-python kā cv2.
imports cv2
imports nejutīgs kā np
OpenCV-python moduļi izmanto nosaukumu cv2 kā vienošanos, ko izveidoja OpenCV kopiena. OpenCV-python ir OpenCV bibliotēkas Python iesaiņojums, kas ir rakstīts C++ valodā.
Jūsu ievades saņemšana
Izveidojiet mainīgo un inicializējiet Video Capture objektu. Norādiet nulli kā argumentu, ja vēlaties izmantot datora primāro kameru kā ievades avotu. Lai izmantotu datoram pievienotu ārējo kameru, nokārtojiet vienu. Lai veiktu sejas aizmiglošanu iepriekš ierakstītā videoklipā, ejiet garām videoklipa ceļam. Uz izmantojiet tālvadības kameru, nosūtiet kameras URL, kas ietver tās IP adresi un porta numuru.
cap = cv2.VideoCapture(0)
Lai ieejā veiktu sejas aizmiglošanu, jums būs nepieciešamas trīs funkcijas:
- Funkcija, kas iepriekš apstrādās ievadi.
- Funkcija, kas ievadē aizmiglo seju.
- Galvenā funkcija, kas kontrolēs programmas plūsmu un parādīs izvadi.
Video ievades priekšapstrāde
Izveidojiet ievades priekšapstrādes funkciju, kas kā ievadi izmantos katru ievades video kadru. Inicializējiet CascadeClassifier klasi, kuru izmantosit sejas noteikšanai. Mainiet rāmja izmēru uz 640 x 640 pikseļiem. Pārveidojiet mainīto rāmi pelēktoņos, lai atvieglotu apstrādi, un visbeidzot atklājiet ievadē esošās sejas un savienojiet tās ar taisnstūriem.
defimage_preprocess(rāmis):
face_detector = cv2.CascadeClassifier (cv2.data.haarcascades
+ "haarcascade_frontalface_default.xml")resized_image = cv2.resize (rāmis, (640, 640))
gray_image = cv2.cvtColor (izmēra_attēls,
cv2.COLOR_BGR2GREY)face_rects = sejas_detektors.detectMultiScale(
pelēks_attēls, 1.04, 5, minSize=(20, 20))
atgriezties mainīts_attēls, sejas_taisni
Šī funkcija atgriež virkni, kurā ir mainīts attēla izmērs, un taisnstūru saraksts, kas attēlo noteiktās sejas.
Sejas aizmiglošana
Izveidojiet aizmiglošanas funkciju, kas aizmiglos sejas jūsu ievadē. Funkcija kā ievadi izmanto mainīto rāmi un taisnstūru sarakstu, kas ierobežo priekšapstrādes funkcijas atgrieztās sejas. Cilpas pār katru sejas taisnstūri. Aprēķina katra taisnstūra centru un izplūšanas apļa rādiusu. Izveido melnu attēlu ar tādiem pašiem izmēriem kā mainītajam kadram, inicializējot visus pikseļus uz nulli. Izmantojot aprēķināto rādiusu, melnajam attēlam uzzīmē baltu apli, kura centrs atrodas sejas taisnstūrī. Visbeidzot, tas aizmiglo attēlu uz baltā apļa.
defface_blur(resised_frame, face_rekts):
priekš (x, y, w, h) iekšā face_rects:
# Norāda centru un rādiusu
# no aizmiglošanas apļa
centrs_x = x + w // 3
centrs_y = y + h // 3
rādiuss = h // 1# izveidojot melnu attēlu ar līdzīgu
# izmēri kā rāmis
maska = np.zeros((mainīts_kadrs.forma[:3]), np.uint8)# uzzīmējiet baltu apli kadra sejas apgabalā
cv2.circle (maska, (centrs_x, centrs_y), rādiuss,
(255, 255, 255), -1)# aizmiglojot visu kadru
blurred_image = cv2.medianBlur (mainīts_kadra izmērs, 99)# kadra rekonstrukcija:
# — pikseļi no aizmiglotā kadra, ja maska > 0
# - pretējā gadījumā ņemiet pikseļus no sākotnējā kadra
resized_frame = np.where (maska > 0, blurred_image,
mainīts_rāmis)
atgriezties mainīts_rāmis
Funkcija izmanto NumPy kur () funkcija, lai rekonstruētu kadru aizmiglošanas laikā.
Programmas plūsmas kontrole
Izveidojiet galveno funkciju, kas darbosies kā jūsu programmas ieejas punkts. Pēc tam tas kontrolēs programmas plūsmu. Funkcija sāks bezgalīgu cilpu, lai nepārtraukti uzņemtu video ievades kadrus. Izsauciet vāciņa objekta lasīšanas metodi, lai nolasītu kadru no kameras.
Pēc tam funkcija nosūtīs kadru priekšapstrādes funkcijai un atgrieztās vērtības citai funkcijai face_blur, lai iegūtu izplūdušu attēlu. Pēc tam tas maina aizmiglošanas funkcijas atgrieztā kadra izmēru un parāda izvadi.
defgalvenais():
kamērTaisnība:
panākumi, rāmis = cap.read()
resized_input, face_rekts = image_preprocess (rāmis)
izpludināts_attēls = sejas_izmiglojums (mainīts_ievades lielums, sejas_taisni)# Parāda izplūdušo attēlu
cv2.imshow("Izplūdis attēls", cv2.resize (izplūdušais_attēls, (500, 500)))
ja cv2.waitKey(1) == ord("q"):
pārtraukums
Funkcija arī pārtrauc izvades displeju, kad lietotājs nospiež taustiņu q.
Programmas palaišana
Pārliecinieties, ka, palaižot skriptu, vispirms tiek palaista galvenā funkcija. Šis nosacījums būs nepatiess, ja importēsit skriptu kā moduli citā programmā.
ja __nosaukums__ == "__galvenais__":
galvenais ()
Tas ļauj izmantot skriptu kā moduli vai palaist to kā atsevišķu programmu. Kad programma darbojas, jums vajadzētu redzēt līdzīgu izvadi:
Seja ir izplūdusi un neatpazīstama.
Sejas aizmiglošanas lietojumprogrammas reālajā pasaulē
Sejas aizmiglošanu var lietot daudzos lietojumprogrammu veidos, lai aizsargātu cilvēku privātumu. Ielas attēla un kartēšanas pakalpojumi izmanto aizmiglošanu, lai aizmiglotu cilvēku sejas uzņemtajos attēlos. Tiesībaizsardzības iestādes izmanto sejas aizmiglošanu, lai aizsargātu liecinieku identitāti.
Daudzas video koplietošanas platformas saviem lietotājiem ir integrējušas arī sejas aizmiglošanas funkciju. Salīdzinot sejas aizmiglošanas lietojumu šajās jomās, varēsiet novērot, kā citas platformas integrē tehnoloģiju.