A hozzád hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk. Olvass tovább.

Több okból is használhatja az arc elmosását, hogy elrejtse egy személy arcát videón vagy képen. Az adatvédelmi és biztonsági kérdések a legdominánsabbak. A legtöbb videómegosztó platform és videószerkesztő szoftver beépített arc-elmosó funkcióval rendelkezik.

A Python, valamint az OpenCV és NumPy könyvtárak segítségével a semmiből létrehozhatja saját arc-elmosó programját.

Környezetének beállítása

A cikk követéséhez ismernie kell a Python alapjai és alapvető ismeretekkel rendelkezik a NumPy könyvtár használatával.

Nyisson meg minden olyan Python IDE-t, amelyikben kényelmes. Hozzon létre egy virtuális környezetet, amelyben telepíteni fogja a szükséges könyvtárakat. Hozzon létre egy új Python-fájlt. Navigáljon a terminálhoz, és futtassa a következő parancsot a szükséges könyvtárak telepítéséhez. Adja át a könyvtárakat szóközzel határolt listaként.

instagram viewer
pip telepítése OpenCV-python NumPy

Az OpenCV-t használja a videobemenet felvételéhez és előfeldolgozásához, a NumPy-t pedig a tömbökhöz.

Miután telepítette a könyvtárakat, várja meg, amíg az IDE frissíti a projektvázakat. Amikor a frissítés befejeződött, és a környezet készen áll, szabadon elkezdheti a kódolást.

A teljes forráskód elérhető a GitHub adattár.

A szükséges könyvtárak importálása

Kezdje az OpenCV és NumPy könyvtárak importálásával. Ez lehetővé teszi az általuk támogatott funkciók hívását és használatát. Importálja az OpenCV-python-t cv2-ként.

import cv2
import zsibbadt mint np

Az OpenCV-python modulok a cv2 nevet használják az OpenCV közösség által létrehozott konvencióként. Az OpenCV-python az OpenCV könyvtár Python-burkolója, amely C++ nyelven íródott.

Hozzászólásod fogadása

Hozzon létre egy változót, és inicializálja a Video felvétel tárgy. Adjon meg nullát argumentumként, ha a számítógép elsődleges kameráját szeretné bemeneti forrásként használni. A számítógéphez csatlakoztatott külső kamera használatához engedjen be egyet. Ha előre felvett videón arcot szeretne elhomályosítani, haladjon át a videó útvonalán. Nak nek használjon távoli kamerát, adja át a kamera URL-jét, amely tartalmazza annak IP-címét és portszámát.

cap = cv2.VideoCapture(0)

Az arc elmosásának végrehajtásához a bemeneten három funkcióra lesz szüksége:

  • Egy funkció, amely előfeldolgozza a bemenetet.
  • Egy funkció, amely elhomályosítja az arcot a bemenetben.
  • Egy fő funkció, amely szabályozza a program folyamatát és megjeleníti a kimenetet.

A videó bemenet előfeldolgozása

Hozzon létre egy bemeneti előfeldolgozási funkciót, amely a bemeneti videó minden egyes képkockáját bemenetként veszi. Inicializálja a CascadeClassifier osztályt, amelyet az arcfelismeréshez fog használni. Méretezze át a keretet 640 x 640 képpontra. Konvertálja az átméretezett keretet szürkeárnyalatossá a könnyebb feldolgozás érdekében, végül észlelje az arcokat a bemenetben, és téglalapokkal kösse össze őket.

defimage_preprocess(keret):
face_detector = cv2.CascadeClassifier (cv2.data.haarcascades
+ "haarcascade_frontalface_default.xml")

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

gray_image = cv2.cvtColor (átméretezett_kép,
cv2.COLOR_BGR2GRAY)

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

Visszatérés resized_image, face_rects

Ez a függvény egy sort ad vissza, amely tartalmazza az átméretezett képet és az észlelt arcokat jelző téglalapok listáját.

Az Arc elmosása

Hozzon létre egy elmosó funkciót, amely elhomályosítja az arcokat a bevitelben. A függvény bemenetként veszi az átméretezett keretet és az előfeldolgozó függvény által visszaadott lapokat határoló téglalapok listáját. Hurok az egyes téglalapokon. Kiszámítja az egyes téglalapok középpontját és az elmosódó kör sugarát. Az összes képpont nullára történő inicializálásával fekete képet hoz létre, amelynek méretei megegyeznek az átméretezett keretével. A kiszámított sugár segítségével fehér kört rajzol a fekete képre, amelynek középpontja az arctéglalapnál van. Végül elhomályosítja a képet a fehér körön.

defface_blur(átméretezett_keret, egyenes_arc):
számára (x, y, w, h) ban ben face_rects:
# A középpont és a sugár megadása
# az elmosódó körből
center_x = x + w // 3
center_y = y + h // 3
sugár = h // 1

# hasonló fekete kép létrehozása
# méret mint a keret
maszk = np.zeros((átméretezett_keret.alak[:3]), np.uint8)

# rajzoljon egy fehér kört a keret arcterületére
cv2.circle (maszk, (center_x, center_y), sugár,
(255, 255, 255), -1)

# az egész képkocka elmosása
blurred_image = cv2.medianBlur (átméretezett_kocka, 99)

# a keret rekonstrukciója:
# - az elmosódott keret képpontjai, ha a maszk > 0
# - ellenkező esetben vegye ki a képpontokat az eredeti keretből
resized_frame = np.where (maszk > 0, blurred_image,
átméretezett_keret)

Visszatérés átméretezett_keret

A függvény a NumPy-t használja ahol() funkció a keret rekonstrukciójához az elmosódás során.

A program folyamatának vezérlése

Hozzon létre egy fő függvényt, amely a program belépési pontjaként fog működni. Ezután szabályozni fogja a program menetét. A funkció egy végtelen ciklust indít el, hogy folyamatosan rögzítse a videó bemenet képkockáit. Hívja meg a cap objektum olvasási módszerét, hogy beolvass egy keretet a kamerából.

A függvény ezután átadja a keretet az előfeldolgozó függvénynek, a visszatérési értékeket pedig egy másik függvénynek, a face_blurnek, hogy elmosódott képet kapjon. Ezután átméretezi az elmosódási funkció által visszaadott keretet, és megjeleníti a kimenetet.

deffő-():
mígIgaz:
siker, keret = cap.read()
resized_input, face_rects = kép_előfeldolgozása (keret)
blurred_image = arc_elmosás (átméretezett_bemenet, arc_rects)

# Az elmosódott kép megjelenítése
cv2.imshow("Elmosódott kép", cv2.resize (elmosódott_kép, (500, 500)))

ha cv2.waitKey(1) == ord("q"):
szünet

A funkció a kimeneti megjelenítést is leállítja, amikor a felhasználó megnyomja a q gombot.

A Program futtatása

Győződjön meg arról, hogy a fő funkció fut először a szkript futtatásakor. Ez a feltétel hamis lesz, ha a szkriptet egy másik program moduljaként importálja.

ha __név__ == "__fő__":
fő()

Ez lehetővé teszi, hogy a szkriptet modulként használja, vagy önálló programként futtassa. A program futása közben ehhez hasonló kimenetet kell látnia:

Az arc elmosódott és felismerhetetlen.

Az arc elmosódásának valós alkalmazásai

Az emberek magánéletének védelme érdekében sokféle alkalmazásban alkalmazhatja az arc elmosását. Az Utcakép- és térképszolgáltatások elmosódást alkalmaznak az általuk készített képeken szereplő emberek arcának elmosására. A bűnüldözés az arcok elmosását alkalmazza a tanúk személyazonosságának védelme érdekében.

Számos videómegosztó platform arc-elmosó funkciót is beépített felhasználói számára. Az elmosódás használatának összehasonlítása ezeken a területeken segít megfigyelni, hogy más platformok hogyan integrálják a technológiát.