Python'da Yüz Algılama Projesi [5 Kolay Adımda]

Yayınlanan: 2020-09-01

Nesne tanımlama ve yüz algılama, muhtemelen bilgisayarla görmenin en popüler uygulamalarıdır. Bu teknoloji, güvenlik ve sosyal medya gibi çeşitli sektörlerde uygulamalar bulur. Bu yüzden Python aracılığıyla bir yüz algılama projesi oluşturuyoruz.

Python, OpenCV ve NumPy'de programlamaya aşina olmanız gerektiğini unutmayın. Bu proje üzerinde çalışırken kafanızın karışmamasını sağlayacaktır. Başlayalım.

Yüz tanıma gerçekleştirmek için iki yöntem paylaştık. Birincisi Python'un yüz tanıma kitaplığını kullanırken diğeri OpenCV ve NumPy'yi kullanır. Daha fazla bilgi için veri bilimi programlarımıza göz atın.

İçindekiler

Python'un 'Yüz Tanıma' ile Yüz Tanıma

Muhtemelen yüzleri tespit etmenin en kolay yöntemi Python'daki yüz tanıma kitaplığını kullanmaktır . LFW veritabanında %99,38 doğruluk oranına sahipti. Kullanımı oldukça basittir ve fazla çaba gerektirmez. Ayrıca, kütüphanede resimlerdeki yüzleri tanımlamak için özel bir 'face_recognition' komutu vardır.

Yüz Tanıma Nasıl Kullanılır

'face_locations' komutunu kullanarak görüntülerdeki yüzleri ayırt edebilirsiniz:

face_recognition'ı içe aktar

resim = face_recognition.load_image_file(“your_file.jpg”)

face_locations = face_recognition.face_locations(resim)

Ayrıca yüzleri tanıyabilir ve adlarıyla ilişkilendirebilir:

face_recognition'ı içe aktar

bilinen_image = face_recognition.load_image_file(“modi.jpg”)

Bilinmeyen_görüntü = face_recognition.load_image_file(“bilinmeyen.jpg”)

modi_encoding = face_recognition.face_encodings(bilinen_image)[0]

Bilinmeyen_encoding = face_recognition.face_encodings(unknown_image)[0]

sonuçlar = face_recognition.compare_faces([modi_encoding], unknown_encoding)

Resim “Narendra Modi” İçeriyor

Bu kütüphaneyi başkalarıyla birleştirerek gerçekleştirebileceğiniz daha birçok şey var. Şimdi Python'daki diğer önde gelen kütüphanelerle, özellikle OpenCV ve NumPy ile yüz tanıma gerçekleştirmeyi tartışacağız.

Devamını okuyun: Python NumPy Eğitimi: Python Numpy'yi Örneklerle Öğrenin

Python'da Yüz Algılama Projesi

Bu projede OpenCV ve NumPy kullanarak yüz tanıma ve tanıma gerçekleştirdik. Biz Raspberry Pi kullandık ama siz başka sistemlerle de kullanabilirsiniz. Kodu başka bir aygıtta (Mac veya Windows PC gibi) kullanmak için yalnızca biraz değiştirmeniz gerekir.

Bu proje için bir miktar kredi Marcelo Rovai'ye gidiyor .

Adım 1: Kitaplıkları Yükleyin

Öncelikle gerekli kütüphaneleri, OpenCV ve NumPy'yi kurmalısınız. Aşağıdakiler aracılığıyla kolayca yükleyebilirsiniz:

pip kurulumu opencv-python

pip kurulumu opencv-katkı-python

NumPy'yi sisteminize kurmak için yukarıdakiyle aynı komutu kullanın ve 'opencv-python' yerine 'numpy' yazın:

pip kurulum numpy

Adım #2: Yüzleri Algıla

Şimdi, kameranızı yapılandırmalı ve sisteminize bağlamalısınız. Yüz algılamada herhangi bir sorun yaşamamak için kamera düzgün çalışmalıdır.

Kameramız bizi tanımadan önce yüzleri algılamalıdır. Yüz algılama için Haar Cascade sınıflandırıcısını kullanacağız. Öncelikle negatif ve pozitif görüntüler aracılığıyla kademeli bir işlevi eğittiğiniz ve ardından diğer fotoğraflardaki nesneleri algılayabildiği bir nesne algılama yöntemidir.

Bizim durumumuzda modelimizin yüzleri algılamasını istiyoruz. OpenCV, bir eğitici ve bir detektör ile birlikte gelir, bu nedenle Haar Cascade sınıflandırıcısını kullanmak bu kütüphane ile nispeten daha rahattır. Diğer görüntüleri de algılamak için sınıflandırıcınızı oluşturabilirsiniz.

İşte kod:

numpy'yi np olarak içe aktar

cv2'yi içe aktar

faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')

cap = cv2.VideoCapture(0)

cap.set(3.640) # set Genişlik

cap.set(4,480) # Yüksekliği ayarla

Doğru iken:

ret, img = cap.read()

img = cv2.flip(img, -1)

gri = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

yüzler = faceCascade.detectMultiScale(

gri,

ölçekFaktörü = 1.2,

minKomşular=5,

minSize=(20, 20)

)

yüzlerde (x,y,w,h) için:

cv2.dikdörtgen(img,(x,y),(x+w,y+h),(255,0,0),2)

roi_gray = gri[y:y+h, x:x+w]

roi_color = img[y:y+h, x:x+w]

cv2.imshow('video',img)

k = cv2.waitKey(30) & 0xff

eğer k == 27: # çıkmak için 'ESC' tuşuna basın

kırmak

cap.release()

cv2.destroyAllWindows()

3. Adım: Veri Toplayın

Artık modeliniz yüzleri tanımlayabildiğine göre, onu resimde kimin yüzünün olduğunu tanımaya başlaması için eğitebilirsiniz. Bunu yapmak için, hatırlamasını istediğiniz yüzlerin birden fazla fotoğrafını sağlamalısınız.

Bu yüzden fotoğraf toplayarak veri setimizi oluşturmaya başlayacağız. Gerekli görüntüleri topladıktan sonra, her kişi için kimlikler ekleyin, böylece model hangi yüzün hangi kimlikle ilişkilendirileceğini bilir. Bir kişinin resimleriyle başlayın ve en az 10-20 ekleyin. En etkili sonuçları elde etmek için farklı ifadeler kullanın.

Görüntülere kullanıcı kimlikleri eklemek için bir komut dosyası oluşturun, böylece her seferinde manuel olarak yapmanız gerekmez. Modelinizi birden fazla yüz için kullanmak istemeniz durumunda komut dosyası çok önemlidir.

Dünyanın En İyi Üniversitelerinden Makine Öğrenimi Kursları Öğrenin . Kariyerinizi hızlandırmak için Master, Executive PGP veya Advanced Certificate Programları kazanın.

4. Adım: Tren

Kişinin görüntülerinin veri kümesini oluşturduktan sonra modeli eğitmeniz gerekir. Resimleri OpenCV tanıyıcınıza beslersiniz ve sonunda 'trainer.yml' adında bir dosya oluşturur.

Bu aşamada, modele yalnızca görüntüleri ve kimliklerini sağlamanız gerekir, böylece model her görüntünün kimliğine aşina olabilir. Modeli eğitmeyi bitirdikten sonra test edebiliriz.

İşte kod:

cv2'yi içe aktar

numpy'yi np olarak içe aktar

PIL içe aktarma Görüntüsünden

işletim sistemini içe aktar

# Yüz görüntüsü veritabanı yolu

yol = 'veri kümesi'

tanıyıcı = cv2.face.LBPHFaceRecognizer_create()

dedektör = cv2.CascadeClassifier(“haarcascade_frontalface_default.xml”);

# görüntüleri ve etiket verilerini alma işlevi

def getImagesAndLabels(yol):

imagePaths = [os.path.join(path,f) için os.listdir(path)]

yüzÖrnekleri=[]

kimlikler = []

imagePaths içindeki imagePath için:

PIL_img = Image.open(imagePath).convert('L') # gri tonlama

img_numpy = np.array(PIL_img,'uint8′)

id = int(os.path.split(imagePath)[-1].split(“.”)[1])

yüzler = dedektör.detectMultiScale(img_numpy)

yüzlerde (x,y,w,h) için:

faceSamples.append(img_numpy[y:y+h,x:x+w])

ids.append(id)

yüz Örnekleri, kimlikleri döndür

print (“\n [BİLGİ] Eğitim yüzleri. Birkaç saniye sürecek. Bekleyin…”)

yüzler, ids = getImagesAndLabels(yol)

tanıyıcı.tren(yüzler, np.array(idler))

# Modeli trainer/trainer.yml dosyasına kaydedin

tanıyıcı.write('eğitmen/eğitmen.yml')

# Eğitilen yüzlerin sayısını yazdırın ve programı sonlandırın

print(“\n [BİLGİ] {0} eğitilmiş yüzler. Programdan Çıkılıyor”.format(len(np.unique(ids))))

Öğrenin: Yüz Tanımada MATLAB Uygulaması: Kod, Açıklama ve Sözdizimi

Adım #5: Tanıma'yı Başlatın

Modeli eğittiğinize göre artık modeli test etmeye başlayabiliriz. Bu bölümde, modelin tanıdığı ilgili kullanıcıların adlarını gösterebilmesi için kimliklere adlar ekledik.

Model bir kişiyi tanımıyor. Algıladığı yüzün, veritabanında bulunan yüzle eşleşip eşleşmediğini tahmin eder. Modelimiz, yüzün, veritabanında bulunan yüzle ne kadar eşleştiğinin bir yüzdesini gösterir. Doğruluğu, büyük ölçüde test ettiğiniz görüntüye ve veritabanınıza eklediğiniz resimlere (modeli eğittiğiniz görüntüler) bağlı olacaktır.

İşte kod:

cv2'yi içe aktar

numpy'yi np olarak içe aktar

işletim sistemini içe aktar

tanıyıcı = cv2.face.LBPHFaceRecognizer_create()

tanıyıcı.read('eğitmen/eğitmen.yml')

cascadePath = "haarcascade_frontalface_default.xml"

faceCascade = cv2.CascadeClassifier(cascadePath);

yazı tipi = cv2.FONT_HERSHEY_SIMPLEX

#id sayacını başlat

kimlik = 0

# kimliklerle ilgili adlar: örnek ==> upGrad: id=1, vb

isimler = ['Yok', upGrad', Ben', 'Arkadaş', 'Y', 'X']

# Gerçek zamanlı video yakalamayı başlat ve başlat

kamera = cv2.VideoCapture(0)

cam.set(3, 640) # video genişliğini ayarla

cam.set(4, 480) # video yüksekliğini ayarla

# Yüz olarak tanınması için minimum pencere boyutunu tanımlayın

minW = 0.1*cam.get(3)

minH = 0.1*cam.get(4)

Doğru iken:

ret, img =cam.read()

img = cv2.flip(img, -1) # Dikey çevir

gri = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

yüzler = faceCascade.detectMultiScale(

gri,

ölçekFaktörü = 1.2,

minKomşular = 5,

minSize = (int(minW), int(minH)),

)

yüzlerde for(x,y,w,h):

cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)

id, güven = tanıyıcı.tahmin(gri[y:y+h,x:x+w])

# Güven 100'den küçükse ==> “0” : mükemmel eşleşme

eğer (güven < 100):

id = isimler[id]

güven = ” {0}%”.format(yuvarlak(100 – güven))

Başka:

kimlik = "bilinmeyen"

güven = ” {0}%”.format(yuvarlak(100 – güven))

cv2.putText(

resim,

str(id),

(x+5,y-5),

yazı tipi,

1,

(255,255,255),

2

)

cv2.putText(

resim,

str(güven),

(x+5,y+h-5),

yazı tipi,

1,

(255,255,0),

1

)

cv2.imshow('kamera',img)

k = cv2.waitKey(10) & 0xff # Videodan çıkmak için 'ESC' tuşuna basın

k == 27 ise:

kırmak

# Bir temizlik yapın

print(“\n [BİLGİ] Programdan Çıkılıyor ve temizlik yapılıyor”)

kamera sürümü()

cv2.destroyAllWindows()

Python'da yüz tanıma projemizin sonuna geldik. Artık yüzleri algılayan ve tanıyan bir makine öğrenimi modelinin nasıl oluşturulacağını biliyorsunuz. Sonuçlarınızı bizimle paylaşmayı unutmayın!

Öğrenin: Yeni Başlayanlar İçin TensorFlow Nesne Algılama Eğitimi

Makine Öğrenimi Hakkında Daha Fazla Bilgi Edinin

Umarız bu yüz tanıma projesini beğenmişsinizdir. Daha zorlu hale getirmek istiyorsanız, veri kümenize birden fazla yüz ekleyebilir ve modelinizi buna göre eğitebilirsiniz. Ayrıca onu diğer kütüphanelerle birleştirebilir ve projeyi bir program için yüz tanıma güvenlik sistemi gibi başka bir şeye genişletebilirsiniz!

Makine öğrenimi hakkında daha fazla bilgi edinmek istiyorsanız, çalışan profesyoneller için tasarlanmış ve 450+ saat zorlu eğitim, 30'dan fazla vaka çalışması ve ödev, IIIT sunan IIIT-B & upGrad'ın Makine Öğrenimi ve Yapay Zeka alanında Yönetici PG Programına göz atın. -B Mezunu statüsü, 5'ten fazla pratik uygulamalı bitirme projesi ve en iyi firmalarla iş yardımı.

Yüz tanıma için hangi matematiksel yaklaşım kullanılır?

Yüz tanıma, hesaplama açısından pahalıdır ve genellikle makine öğrenimi algoritmalarının ve nesne algılama yöntemlerinin doğruluk testi olarak kullanılır. Genel olarak, çoğu durumda, klasik matematiksel yaklaşım izlenir - Öklid mesafesi. İki küme arasındaki en yakın Öklid uzaklığını bulmak için geometrik bir dönüşüm uygulanır. Öklid mesafesi, iki görüntüyü temsil eden noktaların iki vektörü arasındaki farkın karesinin eklenmesini gerektirir. Öklid uzaklığı algoritması hakkında daha fazla ayrıntı bu araştırma makalesinden bulunabilir.

Yüz algılama nasıl çalışır?

Yüz algılama, dijital bir görüntü veya videoda bir insan yüzünü veya birden fazla insan yüzünü algılama işlemidir. Yüz algılama, yüz tanımanın bir alt sürecidir, ancak bu terim tipik olarak, bir kişiyi tanımlamak veya doğrulamak için bir görüntüdeki yüzlerin yalnızca konumlarının kullanıldığı, yüz tanıma aynı zamanda benzersiz bir model oluşturduğu görüntü tabanlı yüz tanıma anlamına gelir. yüz, daha sonra bir hedef yüzle eşleştirilir. Yüz tanıma, yüz tanımadan farklıdır, çünkü yüz tanıma, bir kişiyi dijital bir görüntüden veya bir video kaynağından tanımlamanın veya doğrulamanın otomatik sürecidir.

Yüz tanımanın zorlukları nelerdir?

Yüz tanımanın bazı zorlukları burada tartışılmaktadır. Yüz tanıma sistemlerinde yer alan algoritmalar oldukça karmaşıktır ve bu da onları oldukça tutarsız hale getirir. Yüz tanıma sistemleri, ortam ve ışık değişiklikleri, farklı pozlar ve hatta benzer görünümlü insanlar tarafından kolayca kandırılır. Yüz tanıma sistemleri çok yüksek hesaplama gücü gerektirir, bu nedenle yüz tanıma sistemleri çoğunlukla ileri teknoloji akıllı telefonlar ve dizüstü bilgisayarlarda kullanılır. Bir yüz tanıma sistemi, tek bir çerçevede birkaç yanlış eşleşme algılayabilir. Yazılım, kullanıcının ne yapmak istediğini belirlemelidir ki bu yazılım için kolay bir iş değildir.