Rozmazání obličeje můžete použít ke skrytí obličeje osoby ve videu nebo na obrázku z několika důvodů. Problémy ochrany soukromí a bezpečnosti jsou ty nejdůležitější. Většina platforem pro sdílení videa a softwaru pro úpravu videa má zabudovanou funkci rozmazání obličeje.
Pomocí Pythonu a knihoven OpenCV a NumPy si můžete vytvořit svůj vlastní program pro rozmazání obličeje od začátku.
Nastavení vašeho prostředí
Abyste mohli pokračovat v tomto článku, musíte se s ním seznámit základy Pythonu a mít základní porozumění pomocí knihovny NumPy.
Otevřete jakékoli Python IDE, které vám vyhovuje. Vytvořte si virtuální prostředí, do kterého nainstalujete potřebné knihovny. Vytvořte nový soubor Python. Přejděte do terminálu a spusťte následující příkaz k instalaci požadovaných knihoven. Předejte knihovny jako seznam oddělený mezerou.
pip install OpenCV-python NumPy
OpenCV použijete k odebrání a předběžnému zpracování video vstupu a NumPy k práci s poli.
Jakmile nainstalujete knihovny, počkejte, až IDE aktualizuje kostry projektu. Po dokončení aktualizace a připraveném prostředí můžete začít kódovat.
Úplný zdrojový kód je k dispozici v a úložiště GitHub.
Import požadovaných knihoven
Začněte importem knihoven OpenCV a NumPy. To vám umožní volat a používat všechny funkce, které podporují. Importujte OpenCV-python jako cv2.
import cv2
import nemotorný tak jako np
Moduly OpenCV-python používají název cv2 jako konvenci, kterou zavedla komunita OpenCV. OpenCV-python je pythonovský obal knihovny OpenCV, který je napsán v C++.
Přijímání vašeho příspěvku
Vytvořte proměnnou a inicializujte ji Záznam videa objekt. Předejte nulu jako argument, pokud chcete jako vstupní zdroj použít primární kameru počítače. Chcete-li použít externí kameru připojenou k počítači, předejte ji. Chcete-li provést rozmazání obličeje na předem nahraném videu, předejte místo toho cestu videa. Na použít vzdálenou kameru, předejte adresu URL kamery obsahující její IP adresu a číslo portu.
cap = cv2.VideoCapture(0)
Chcete-li provést rozmazání obličeje na vstupu, budete potřebovat tři funkce:
- Funkce, která předem zpracuje vstup.
- Funkce, která rozmaže obličej ve vstupu.
- Hlavní funkce, která bude řídit tok programu a zobrazovat výstup.
Předzpracování video vstupu
Vytvořte funkci předběžného zpracování vstupu, která bude brát každý snímek vstupního videa jako svůj vstup. Inicializujte třídu CascadeClassifier, kterou budete používat pro detekci obličeje. Změňte velikost rámečku na 640 x 640 pixelů. Převeďte rám se změněnou velikostí na stupně šedi pro snazší zpracování a nakonec detekujte tváře ve vstupu a spojte je pomocí obdélníků.
defimage_preprocess(rám):
face_detector = cv2.CascadeClassifier (cv2.data.haarcascades
+ 'haarcascade_frontalface_default.xml')resized_image = cv2.resize (snímek, (640, 640))
šedý_obrazek = cv2.cvtColor (obrázek se změněnou velikostí,
cv2.COLOR_BGR2GRAY)face_rects = face_detector.detectMultiScale(
šedý_obrázek, 1.04, 5, minSize=(20, 20))
vrátit se resized_image, face_rects
Tato funkce vrací n-tici obsahující obrázek se změněnou velikostí a seznam obdélníků, které představují detekované tváře.
Rozostření obličeje
Vytvořte funkci rozmazání, která rozmaže tváře ve vašem zadání. Funkce převezme jako vstup rám se změněnou velikostí a seznam obdélníků ohraničujících plochy vrácené funkcí předběžného zpracování. Smyčky přes každý obdélník obličeje. Vypočítá střed každého obdélníku a poloměr rozostřujícího kruhu. Vytvoří černý obrázek se stejnými rozměry jako rám se změněnou velikostí inicializací všech pixelů na nulu. Nakreslí bílý kruh na černý obrázek, jehož střed je v obdélníku plochy pomocí vypočteného poloměru. Nakonec rozmaže obraz na bílém kruhu.
defrozostření obličeje(resized_frame, face_rects):
pro (x, y, š, h) v face_rects:
# Určení středu a poloměru
# rozmazaného kruhu
střed_x = x + w // 3
střed_y = y + h // 3
poloměr = h // 1# vytvoření černého obrázku s podobným
# rozměry jako rám
mask = np.zeros((změněná velikost_rámce.tvar[:3]), np.uint8)# nakreslete bílý kruh v oblasti obličeje rámu
cv2.circle (maska, (střed_x, střed_y), poloměr,
(255, 255, 255), -1)# rozmazání celého snímku
blurred_image = cv2.medianBlur (snímek se změněnou velikostí, 99)# rekonstrukce rámu:
# - pixely z rozmazaného snímku, pokud maska > 0
# - v opačném případě převezměte pixely z původního snímku
resized_frame = np.where (maska > 0, rozmazaný_obrázek,
resized_frame)
vrátit se resized_frame
Funkce používá NumPy kde() funkce pro rekonstrukci rámu během rozmazání.
Řízení toku vašeho programu
Vytvořte hlavní funkci, která bude fungovat jako vstupní bod vašeho programu. Poté bude řídit tok programu. Funkce spustí nekonečnou smyčku, aby nepřetržitě zachycovala snímky z video vstupu. Chcete-li přečíst snímek z kamery, zavolejte metodu čtení objektu cap.
Funkce pak předá snímek funkci předběžného zpracování a předá návratové hodnoty další funkci, face_blur, aby se získal rozmazaný obraz. Poté změní velikost snímku vráceného funkcí rozmazání a zobrazí výstup.
defhlavní():
zatímcoSkutečný:
úspěch, snímek = cap.read()
resized_input, face_rects = image_preprocess (frame)
blurred_image = rozmazání obličeje (vstup se změněnou velikostí, obdélníky obličeje)# Zobrazení rozmazaného obrazu
cv2.imshow("Rozmazaný obraz", cv2.resize (rozmazaný_obrázek, (500, 500)))
-li cv2.waitKey(1) == ord("q"):
přestávka
Funkce také ukončí zobrazení výstupu, když uživatel stiskne klávesu q.
Spuštění programu
Zajistěte, aby se při spuštění skriptu nejprve spustila hlavní funkce. Tato podmínka bude nepravdivá, pokud skript importujete jako modul do jiného programu.
-li __jméno__ == "__hlavní__":
hlavní()
To vám umožní použít skript jako modul nebo jej spustit jako samostatný program. Po spuštění programu byste měli vidět výstup podobný tomuto:
Obličej je rozmazaný a k nepoznání.
Aplikace rozostření obličeje v reálném světě
Rozmazání obličeje můžete použít v mnoha typech aplikací a chránit tak soukromí lidí. Street View a mapové služby používají rozmazání k rozmazání tváří lidí na snímcích, které pořizují. Orgány činné v trestním řízení používají rozmazání obličeje k ochraně identity svědků.
Mnoho platforem pro sdílení videa také integrovalo pro své uživatele funkci rozmazání obličeje. Porovnání použití rozmazání obličeje v těchto oblastech vám pomůže sledovat, jak jiné platformy integrují technologii.