Kaltaisesi lukijat auttavat tukemaan MUO: ta. Kun teet ostoksen käyttämällä sivustollamme olevia linkkejä, voimme ansaita kumppanipalkkion. Lue lisää.

Voit käyttää kasvojen sumennusta piilottaaksesi henkilön kasvot videossa tai kuvassa useista syistä. Tietosuoja- ja turvallisuuskysymykset ovat yleisimpiä. Useimmissa videonjakoalustoissa ja videonmuokkausohjelmistoissa on sisäänrakennettu kasvojen sumennustoiminto.

Voit luoda oman kasvojen sumennusohjelman alusta alkaen Pythonin sekä OpenCV- ja NumPy-kirjastojen avulla.

Ympäristösi luominen

Jotta voit seurata tätä artikkelia, sinun on tunnettava Pythonin perusteet ja heillä on peruskäsitys käyttämällä NumPy-kirjastoa.

Avaa mikä tahansa Python IDE, johon olet tyytyväinen. Luo virtuaalinen ympäristö, johon asennat tarvittavat kirjastot. Luo uusi Python-tiedosto. Siirry päätteeseen ja suorita seuraava komento asentaaksesi tarvittavat kirjastot. Välitä kirjastot välilyönnillä eroteltuna luettelona.

pip asennus OpenCV-python NumPy

Käytät OpenCV: tä videosyötteen ottamiseen ja esikäsittelyyn ja NumPyä taulukoiden kanssa työskentelyyn.

instagram viewer

Kun olet asentanut kirjastot, odota, että IDE päivittää projektirungot. Kun päivitys on valmis ja ympäristö on valmis, voit aloittaa koodauksen.

Täysi lähdekoodi on saatavilla a GitHub-arkisto.

Vaadittujen kirjastojen tuonti

Aloita tuomalla OpenCV- ja NumPy-kirjastot. Näin voit soittaa ja käyttää kaikkia niiden tukemia toimintoja. Tuo OpenCV-python cv2-muodossa.

tuonti cv2
tuonti nuhjuinen kuten np

OpenCV-python-moduulit käyttävät nimeä cv2 käytäntönä, jonka OpenCV-yhteisö perusti. OpenCV-python on C++-kielellä kirjoitetun OpenCV-kirjaston Python-kääre.

Palautteesi ottaminen vastaan

Luo muuttuja ja alusta VideoCapture esine. Anna argumenttina nolla, jos haluat käyttää tietokoneesi ensisijaista kameraa tulolähteenä. Jos haluat käyttää tietokoneeseen liitettyä ulkoista kameraa, ohita yksi. Jos haluat sumentaa kasvoja valmiiksi tallennetussa videossa, ohita sen sijaan videon polku. Vastaanottaja käytä etäkameraa, välitä kameran URL-osoite, joka sisältää sen IP-osoitteen ja porttinumeron.

cap = cv2.VideoCapture(0)

Tarvitset kolme toimintoa kasvojen sumentamiseen tulossa:

  • Toiminto, joka esikäsittelee syötteen.
  • Toiminto, joka hämärtää kasvot tulossa.
  • Päätoiminto, joka ohjaa ohjelman kulkua ja näyttää tulosteen.

Videotulon esikäsittely

Luo tulon esikäsittelytoiminto, joka ottaa tulovideon jokaisen kehyksen syötteenä. Alusta CascadeClassifier-luokka, jota käytät kasvojentunnistukseen. Muuta kehyksen kooksi 640 x 640 pikseliä. Muunna muutettu kehys harmaasävyiksi käsittelyn helpottamiseksi ja lopuksi tunnista kasvot syötteestä ja sido ne suorakaiteen avulla.

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

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

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

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

palata resized_image, face_rects

Tämä funktio palauttaa tuplen, joka sisältää muunnetun kuvan ja luettelon suorakulmioista, jotka edustavat havaittuja kasvoja.

Kasvojen hämärtäminen

Luo sumennustoiminto, joka sumentaa syötteessäsi olevat kasvot. Funktio ottaa syötteeksi muutetun kehyksen ja listan esikäsittelyfunktion palauttamia kasvoja rajoittavista suorakulmioista. Silmukat jokaisen kasvojen suorakulmion yli. Laskee jokaisen suorakulmion keskipisteen ja hämärtävän ympyrän säteen. Luo mustan kuvan, jolla on samat mitat kuin muutetun kehyksen kokoa alustamalla kaikki pikselit nollaan. Piirtää mustaan ​​kuvaan valkoisen ympyrän, jonka keskipiste on kasvojen suorakulmion kohdalla lasketun säteen avulla. Lopuksi se hämärtää kuvan valkoisessa ympyrässä.

defface_blur(resized_frame, face_reects):
varten (x, y, w, h) sisään face_rects:
# Keskipisteen ja säteen määrittäminen
# sumennusympyrästä
center_x = x + w // 3
center_y = y + h // 3
säde = h // 1

# luodaan musta kuva, jolla on samanlainen
# mitat kehyksenä
mask = np.zeros((resized_frame.shape[:3]), np.uint8)

# piirrä valkoinen ympyrä kehyksen etupuolelle
cv2.circle (maski, (keski_x, keskusta_y), säde,
(255, 255, 255), -1)

# sumentaa koko kuva
blurred_image = cv2.medianBlur (resized_frame, 99)

# kehyksen rekonstruoiminen:
# - sumennetun kehyksen pikselit, jos maski > 0
# - muussa tapauksessa ota pikselit alkuperäisestä kehyksestä
resized_frame = np.where (maski > 0, blurred_image,
resized_frame)

palata resized_frame

Funktio käyttää NumPy: tä missä() toiminto kehyksen rekonstruoimiseksi sumennuksen aikana.

Ohjelmasi kulun hallinta

Luo päätoiminto, joka toimii ohjelmasi aloituspisteenä. Se ohjaa sitten ohjelman kulkua. Toiminto käynnistää äärettömän silmukan videotulon ruutujen jatkuvaa kaappaamista varten. Kutsu cap-objektin lukumenetelmä lukeaksesi kehyksen kamerasta.

Funktio siirtää sitten kehyksen esikäsittelyfunktiolle ja palauttaa palautusarvot toiselle funktiolle, face_blur, saadakseen sumean kuvan. Sitten se muuttaa sumennustoiminnon palauttaman kehyksen kokoa ja näyttää tulosteen.

defpää():
sillä aikaaTotta:
menestys, kehys = cap.read()
resized_input, face_rects = image_preprocess (kehys)
blurred_image = kasvojen_sumennus (muutettu_syöttö, kasvojen_suorat)

# Sumean kuvan näyttäminen
cv2.imshow("Epäselvä kuva", cv2.resize (sumentunut_kuva, (500, 500)))

jos cv2.waitKey(1) == ord("q"):
tauko

Toiminto myös lopettaa tulosteen näytön, kun käyttäjä painaa q-näppäintä.

Ohjelman suorittaminen

Varmista, että päätoiminto suoritetaan ensin, kun suoritat komentosarjan. Tämä ehto on epätosi, jos tuot komentosarjan moduulina toiseen ohjelmaan.

jos __nimi__ == "__main__":
pää()

Näin voit käyttää komentosarjaa moduulina tai suorittaa sen erillisenä ohjelmana. Kun ohjelma suoritetaan, sinun pitäisi nähdä seuraavanlainen tulos:

Kasvot ovat hämärtyneet ja tunnistamattomat.

Reaalimaailman kasvojen hämärtymisen sovellukset

Voit käyttää kasvojen sumennusta useissa sovelluksissa ihmisten yksityisyyden suojaamiseksi. Katunäkymä- ja karttapalvelut käyttävät sumennusta ihmisten kasvojen sumentamiseen omissa kuvissaan. Lainvalvontaviranomaiset käyttävät kasvojen sumennusta todistajien henkilöllisyyden suojaamiseksi.

Monet videonjako-alustat ovat myös integroineet kasvojen sumennusominaisuuden käyttäjilleen. Vertaamalla kasvojen sumennuksen käyttöä näillä alueilla voit havaita, kuinka muut alustat integroivat teknologian.