Sizin gibi okuyucular MUO'yu desteklemeye yardımcı oluyor. Sitemizdeki bağlantıları kullanarak bir satın alma işlemi gerçekleştirdiğinizde, bir ortaklık komisyonu kazanabiliriz. Devamını oku.

Bir kişinin yüzünü bir videoda veya bir görüntüde gizlemek için çeşitli nedenlerle yüz bulanıklaştırmayı kullanabilirsiniz. Gizlilik ve güvenlik sorunları en baskın olanlardır. Çoğu video paylaşım platformunda ve video düzenleme yazılımında yerleşik olarak yüz bulanıklaştırma işlevi bulunur.

Python ile OpenCV ve NumPy kitaplıklarını kullanarak kendi yüz bulanıklaştırma programınızı sıfırdan oluşturabilirsiniz.

Ortamınızı Kurma

Bu makaleyi takip etmek için, aşina olmanız gerekir Python'un temelleri ve temel bir anlayışa sahip olmak NumPy kütüphanesini kullanma.

Rahat olduğunuz herhangi bir Python IDE'yi açın. Gerekli kitaplıkları kuracağınız sanal bir ortam oluşturun. Yeni bir Python dosyası oluşturun. Terminale gidin ve gerekli kitaplıkları kurmak için aşağıdaki komutu çalıştırın. Kitaplıkları boşlukla ayrılmış bir liste olarak geçirin.

instagram viewer
pip kurulumu OpenCV-python NumPy

Video girişini almak ve önceden işlemek için OpenCV'yi ve dizilerle çalışmak için NumPy'yi kullanacaksınız.

Kitaplıkları kurduktan sonra, IDE'nin proje iskeletlerini güncellemesini bekleyin. Güncelleme tamamlandığında ve ortam hazır olduğunda kodlamaya başlayabilirsiniz.

Tam kaynak kodu bir GitHub deposu.

Gerekli Kitaplıkları İçe Aktarma

OpenCV ve NumPy kitaplıklarını içe aktararak başlayın. Bu, destekledikleri herhangi bir işlevi aramanıza ve kullanmanıza olanak tanır. OpenCV-python'u cv2 olarak içe aktarın.

içe aktarmak CV2
içe aktarmak dizi gibi np

OpenCV-python modülleri, OpenCV topluluğunun oluşturduğu bir kural olarak cv2 adını kullanır. OpenCV-python, OpenCV kitaplığının C++ ile yazılmış bir Python sarmalayıcısıdır.

Girişinizi Alma

Bir değişken oluşturun ve Video yakalama nesne. Giriş kaynağı olarak bilgisayarınızın birincil kamerasını kullanmak istiyorsanız, argüman olarak sıfırı iletin. Bilgisayarınıza bağlı harici bir kamera kullanmak için birini geçin. Önceden kaydedilmiş bir videoda yüz bulanıklaştırma gerçekleştirmek için bunun yerine videonun yolunu iletin. İle uzaktan kamera kullan, kameranın IP adresini ve bağlantı noktası numarasını içeren URL'sini iletin.

büyük harf = cv2.VideoCapture(0)

Girişte yüz bulanıklaştırma gerçekleştirmek için üç işleve ihtiyacınız olacak:

  • Girdiyi önceden işleyecek bir işlev.
  • Girişteki yüzü bulanıklaştıracak bir işlev.
  • Programın akışını kontrol edecek ve çıktıyı gösterecek bir ana fonksiyon.

Video Girişini Ön İşleme

Girdi videosunun her karesini girdi olarak alacak bir girdi ön işleme işlevi oluşturun. Yüz algılama için kullanacağınız CascadeClassifier sınıfını başlatın. Çerçeveyi 640 x 640 piksel olarak yeniden boyutlandırın. Daha kolay işleme için yeniden boyutlandırılmış çerçeveyi gri tonlamaya dönüştürün ve son olarak girişteki yüzleri algılayın ve bunları dikdörtgenlerle birleştirin.

kesinlikleimage_preprocess(çerçeve):
face_detector = cv2.CascadeClassifier (cv2.data.haarcascades)
+ 'haarcascade_frontalface_default.xml')

resize_image = cv2.resize (çerçeve, (640, 640))

gray_image = cv2.cvtColor (yeniden boyutlandırılmış_image,
cv2.COLOR_BGR2GRAY)

face_rects = face_detector.detectMultiScale(
gri_görüntü, 1.04, 5, minBoyut=(20, 20))

geri dönmek yeniden boyutlandırılmış resim, face_rects

Bu işlev, yeniden boyutlandırılmış görüntüyü ve algılanan yüzleri temsil eden bir dikdörtgen listesini içeren bir demet döndürür.

Yüzü Bulanıklaştırmak

Girişinizdeki yüzleri bulanıklaştıracak bir bulanıklaştırma işlevi oluşturun. İşlev, yeniden boyutlandırılmış çerçeveyi ve ön işleme işlevi tarafından döndürülen yüzleri sınırlayan dikdörtgenler listesini girdi olarak alır. Her yüz dikdörtgeni üzerinde döngüler. Her bir dikdörtgenin merkezini ve bulanıklaşan dairenin yarıçapını hesaplar. Tüm pikselleri sıfıra sıfırlayarak, yeniden boyutlandırılan çerçeveyle aynı boyutlara sahip siyah bir görüntü oluşturur. Hesaplanan yarıçapı kullanarak merkezi yüz dikdörtgeninde olan siyah görüntünün üzerine beyaz bir daire çizer. Son olarak, beyaz daire üzerindeki görüntüyü bulanıklaştırır.

kesinlikleyüz bulanıklığı(resize_frame, face_rects):
için (x, y, w, h) içinde face_rects:
# Merkez ve yarıçapı belirleme
# bulanık daire
merkez_x = x + w // 3
merkez_y = y + h // 3
yarıçap = h // 1

# benzer özelliklere sahip siyah bir görüntü oluşturma
# çerçeve olarak boyutlar
mask = np.zeros((resize_frame.shape[:3]), np.uint8)

# çerçevenin yüz bölgesine beyaz bir daire çizin
cv2.circle (maske, (merkez_x, merkez_y), yarıçap,
(255, 255, 255), -1)

# tüm çerçeveyi bulanıklaştırma
blurred_image = cv2.medianBlur (yeniden boyutlandırılmış çerçeve, 99)

# çerçeveyi yeniden oluşturma:
# - maske > 0 ise bulanık kareden pikseller
# - aksi takdirde, pikselleri orijinal çerçeveden alın
resize_frame = np.where (maske > 0, Bulanık görüntü,
yeniden boyutlandırılmış_çerçeve)

geri dönmek yeniden boyutlandırılmış çerçeve

İşlev, NumPy'yi kullanır Neresi() bulanıklaştırma sırasında çerçeveyi yeniden oluşturma işlevi.

Programınızın Akışını Kontrol Etme

Programınızın giriş noktası olarak işlev görecek bir ana işlev oluşturun. Daha sonra programın akışını kontrol edecektir. İşlev, video girişinin karelerini sürekli olarak yakalamak için sonsuz bir döngü başlatır. Kameradan bir çerçeve okumak için kapak nesnesinin okuma yöntemini çağırın.

İşlev daha sonra çerçeveyi ön işleme işlevine geçirecek ve bulanık bir görüntü elde etmek için dönüş değerlerini başka bir işleve, face_blur'a iletecektir. Ardından, bulanıklaştırma işlevi tarafından döndürülen çerçeveyi yeniden boyutlandırır ve çıktıyı görüntüler.

kesinlikleana():
sırasındaDoğru:
başarı, çerçeve = cap.read()
yeniden boyutlandırılmış_giriş, face_rects = image_preprocess (çerçeve)
blurred_image = yüz_blur (yeniden boyutlandırılmış_giriş, yüz_rects)

# Bulanık görüntüyü gösterme
cv2.imshow("Bulanık görüntü", cv2.resize (blurred_image, (500, 500)))

eğer cv2.waitKey(1) == sıra("Q"):
kırmak

İşlev, kullanıcı q tuşuna bastığında çıktı görüntüsünü de sonlandırır.

Programı Çalıştırma

Komut dosyasını çalıştırdığınızda önce ana işlevin çalıştığından emin olun. Komut dosyasını başka bir programda bir modül olarak içe aktarırsanız, bu koşul yanlış olacaktır.

eğer __isim__ == "__ana__":
ana()

Bu, komut dosyasını bir modül olarak kullanmanıza veya bağımsız bir program olarak çalıştırmanıza olanak tanır. Program çalıştığında, buna benzer bir çıktı görmelisiniz:

Yüz bulanık ve tanınmaz durumda.

Yüz Bulanıklaştırmanın Gerçek Dünya Uygulamaları

Kişilerin mahremiyetini korumak için birçok uygulama türünde yüz bulanıklaştırma uygulayabilirsiniz. Sokak görünümü ve harita hizmetleri, yakaladıkları görüntülerde insanların yüzlerini bulanıklaştırmak için bulanıklaştırmayı kullanır. Kolluk kuvvetleri, tanıkların kimliğini korumak için yüz bulanıklaştırmayı kullanır.

Birçok video paylaşım platformu, kullanıcıları için bir yüz bulanıklaştırma özelliği de entegre etti. Bu alanlarda yüz bulanıklaştırma kullanımının karşılaştırılması, diğer platformların teknolojiyi nasıl entegre ettiğini gözlemlemenize yardımcı olacaktır.