İçindekiler:

Yüz Algılama+Tanıma: 8 Adım (Resimlerle)
Yüz Algılama+Tanıma: 8 Adım (Resimlerle)

Video: Yüz Algılama+Tanıma: 8 Adım (Resimlerle)

Video: Yüz Algılama+Tanıma: 8 Adım (Resimlerle)
Video: KeyFace 8 Dış Ortam PDKS Uyumlu Yüz Tanıma Terminali 2024, Temmuz
Anonim
Image
Image
Yüz Algılama+tanıma
Yüz Algılama+tanıma

Bu, bir kameradan OpenCV ile yüz tanıma ve tanıma çalıştırmanın basit bir örneğidir. NOT: BU PROJEYİ SENSÖR YARIŞMASI İÇİN YAPTIM VE KAMERAYI YÜZLERİ İZLEMEK VE TANIMAK İÇİN SENSÖR OLARAK KULLANDIM. O halde Hedefimiz Bu oturumda, 1. Anaconda'yı kurun 2. Open CV Paketini İndirin 3. Çevresel Değişkenleri Ayarlayın 4. Onaylamak için Test 5. Yüz algılama için kod yapın 6. Veri seti oluşturmak için kod yapın 7. Tanıyıcıyı eğitmek için kod yapın 8. Yüzleri tanımak için kod yapın &Sonuç.

Adım 1: Anaconda'yı yükleyin

Anaconda'yı yükleyin
Anaconda'yı yükleyin

Anaconda aslında güzel paketlenmiş bir Python IDE'dir ve NumPy, Pandas, IPython Notebook vb. gibi tonlarca kullanışlı paketle birlikte gönderilir. Bilimsel toplulukta her yerde tavsiye ediliyor gibi görünüyor. Yüklemek için Anaconda'ya göz atın.

Adım 2: Açık CV Paketini İndirin

Açık CV Paketini İndirin
Açık CV Paketini İndirin

İlk olarak, OpenCV paketinin tamamını indirmek için resmi OpenCV sitesine gidin. Beğendiğiniz bir sürümü seçin (2.x veya 3.x). Python 2.x ve OpenCV 2.x üzerindeyim - temel olarak OpenCV-Python Öğreticileri bu şekilde kurulur/tabanlıdır.

Benim durumumda, paketi (esas olarak bir klasör) doğrudan F sürücüme çıkardım. (F:\opencv).

3. Adım: Çevresel Değişkenleri Ayarlayın

Çevresel Değişkenleri Ayarla
Çevresel Değişkenleri Ayarla

cv2.pyd dosyasını kopyalayıp yapıştırın

Anaconda Site paketleri dizini (örneğin, benim durumumda F:\Program Files\Anaconda2\Lib\site-packages) içe aktarabileceğiniz Python paketlerini içerir. Amacımız cv2.pyd dosyasını bu dizine kopyalayıp yapıştırmaktır (böylece import cv2'yi Python kodlarımızda kullanabiliriz.).

Bunu yapmak için cv2.pyd dosyasını kopyalayın…

Bu OpenCV dizininden (başlangıç kısmı makinenizde biraz farklı olabilir):

# Python 2.7 ve 64-bit makine: F:\opencv\build\python\2.7\x64# Python 2.7 ve 32-bit makine: F:\opencv\build\python\2.7\x84

Bu Anaconda dizinine (başlangıç kısmı makinenizde biraz farklı olabilir):

F:\Program Dosyaları\Anaconda2\Lib\site paketleri

Bu adımı gerçekleştirdikten sonra artık Python kodunda import cv2'yi kullanabileceğiz. AMA, FFMPEG'nin (video codec bileşeni) çalışması için (videoları işlemek gibi şeyler yapmamızı sağlamak için) hala biraz daha çalışmamız gerekiyor.

"Bilgisayarım"a (veya Windows 8.1'de "Bu PC") sağ tıklayın -> Özellikler'e sol tıklayın -> "Gelişmiş" sekmesine sol tıklayın -> "Ortam Değişkenleri…" düğmesine sol tıklayın. Yeni bir Kullanıcı Değişkeni ekleyin OpenCV'ye işaret etmek için (32-bit sistem için x86 veya 64-bit sistem için x64.) Şu anda 64-bit bir makinedeyim.

32 bitOPENCV_DIRC:\opencv\build\x86\vc12

64-bitOPENCV_DIRC:\opencv\build\x64\vc12

Kullanıcı Değişkeni YOLU'na %OPENCV_DIR%\bin ekleyin.

Örneğin, PATH kullanıcı değişkenim şuna benziyor…

Önce:

F:\Kullanıcılar\Johnny\Anaconda;C:\Kullanıcılar\Johnny\Anaconda\Scriptler

Sonrasında:

F:\Users\Johnny\Anaconda;C:\Users\Johnny\Anaconda\Scripts;%OPENCV_DIR%\bin

İşte bu kadarız! FFMPEG kullanıma hazır!

4. Adım: Onaylamak için Test Edin

Onaylamak için Test Edin
Onaylamak için Test Edin
Onaylamak için Test Edin
Onaylamak için Test Edin

Bunları şimdi Anaconda'da yapıp yapamayacağımızı test etmemiz gerekiyor (Spyder IDE aracılığıyla):

  • OpenCV paketini içe aktar
  • FFMPEG yardımcı programını kullanın (videoları okumak/yazmak/işlemek için)

Test 1: OpenCV'yi içe aktarabilir miyiz?

Anaconda'nın artık OpenCV-Python paketini (yani cv2) içe aktarabildiğini doğrulamak için, bunları IPython Konsolunda yayınlayın:

cv2'yi içe aktar

cv2._versiyon_ yazdır

cv2 paketi hatasız bir şekilde içe aktarılırsa ve cv2 sürümü yazdırılırsa, hepimiz iyiyiz!

Test 2: FFMPEG codec bileşenini kullanabilir miyiz?

Bir örnek yerleştirin

input_video.mp4

Bir dizindeki video dosyası. Şunları yapıp yapamayacağımızı test etmek istiyoruz:

  • bu.mp4 video dosyasını okuyun ve
  • yeni bir video dosyası yazın (.avi veya.mp4 vb. olabilir)

Bunu yapmak için bir test python koduna ihtiyacımız var, buna test.py diyoruz. Örnekle aynı dizine yerleştirin

input_video.mp4

dosya.

Bu nedir

test.py

(Not: Pete'in ve Warren'ın yorum alanındaki önerilerine çok teşekkürler - Orijinal test kodumu onunkiyle değiştirdim - lütfen kendiniz test edin ve bunun daha iyi çalışıp çalışmadığını bize bildirin):

cv2'yi içe aktar

cap = cv2. VideoCapture("input_video.mp4") print cap.isOpened() # True = videoyu başarıyla oku. Yanlış - videoyu okuyamama. fourcc = cv2. VideoWriter_fourcc(*'XVID') out = cv2. VideoWriter("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened() # True = videoyu başarıyla yazdır. Yanlış - video yazamadı. cap.release() out.release()

Bu test ÇOK ÖNEMLİ. Video dosyalarını işlemek istiyorsanız, Anaconda / Spyder IDE'nin FFMPEG (video codec bileşeni) kullanabileceğinden emin olmanız gerekir. Çalıştırmak günlerimi aldı. Ama umarım çok daha az zaman alır!:)Not: Anaconda Spyder IDE'yi kullanırken çok önemli bir ipucu daha. Mevcut Çalışma Dizinini (CWD) kontrol ettiğinizden emin olun!!!

Adım 5: Yüz Algılama için Kod Yapın

Yüz Algılama için Kod Yapın
Yüz Algılama için Kod Yapın
Yüz Algılama için Kod Yapın
Yüz Algılama için Kod Yapın

Hedef

Bu oturumda,

  • Haar Özellik Tabanlı Kademeli Sınıflandırıcıları kullanarak yüz algılamanın temellerini göreceğiz
  • Aynı şeyi göz algılama vb. için genişleteceğiz

OpenCV'de Haar Kademeli Algılama

Burada algılama ile ilgileneceğiz. OpenCV zaten yüz, gözler, gülümseme vb. için önceden eğitilmiş birçok sınıflandırıcı içerir. Bu XML dosyaları opencv/data/haarcascades/ klasöründe saklanır. OpenCV ile yüz ve göz dedektörü oluşturalım. Öncelikle gerekli XML sınıflandırıcılarını yüklememiz gerekiyor. Ardından giriş resmimizi (veya videoyu) gri tonlamalı modda yükleyin VEYA kamera kullanabiliriz (Gerçek zamanlı yüz algılama için)

numpy'yi np olarak içe aktar

import cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haar.xml') cap = cv2. VideoCapture(0)while 1: ret, img = cap.read() grey = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) yüzler = face_cascade.detectMultiScale(gray, 1.5, 5) for (x, y, w, h) yüzlerde: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = grey[y:y +h, x:x+w] roi_color = img[y:y+h, x:x+w] gözler = eye_cascade.detectMultiScale(roi_gray) için (ex, ey, ew, eh) gözlerde: cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2) "bulundu" +str(len(yüzler)) +" yüz(ler)" cv2.imshow ('img', img) k = cv2.waitKey(30) & k == 27 ise 0xff: break cap.release() cv2.destroyAllWindows()

Adım 6: Veri Kümesi Oluşturmak için Kod Yapın

Veri Kümesi Oluşturmak için Kod Yapın
Veri Kümesi Oluşturmak için Kod Yapın
Veri Kümesi Oluşturmak için Kod Yapın
Veri Kümesi Oluşturmak için Kod Yapın

Yüz tanıma yapıyoruz, bu yüzden bazı yüz resimlerine ihtiyacınız olacak! Kendi veri kümenizi oluşturabilir veya mevcut yüz veritabanlarından biriyle başlayabilirsiniz, https://face-rec.org/databases/ size güncel bir genel bakış sunar. Üç ilginç veri tabanı vardır (açıklamanın bölümleri https://face-rec.org'dan alıntılanmıştır):

  • AT&T Yüz Veritabanı
  • Yale Yüz Veritabanı A
  • Genişletilmiş Yale Yüz Veritabanı B

BURADA kendi veri setimi kullanıyorum…. aşağıda verilen kod yardımıyla:

numpy'yi np olarak içe aktar

import cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) id = raw_input('kullanıcı kimliğini girin') sampleN=0; while 1: ret, img = cap.read() gray = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) yüzler = face_cascade.detectMultiScale(gray, 1.3, 5) için (x, y, w, h): örnekN =örnekN+1; cv2.imwrite("F:/Program Files/projects/face_rec/facesData/User."+str(id)+ "." +str(sampleN)+ ".jpg", gri[y:y+h, x: x+w]) cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey(100) cv2.imshow('img', img) cv2.waitKey(1) eğer sampleN > 20 ise: break cap.release() cv2.destroyAllWindows()

Adım 7: Tanıyıcıyı Eğitmek için Kod Yapın

Tanıyıcıyı Eğitmek için Kod Yapın
Tanıyıcıyı Eğitmek için Kod Yapın

Eğitim setini hazırlamak için işlevi oluşturun

Şimdi bir fonksiyon tanımlayacağız.

getImagesWithID(yol)

giriş argümanı olarak görüntü veritabanına giden mutlak yolu alır ve biri algılanan yüzleri ve diğeri o yüz için karşılık gelen etiketi içeren 2 listesinin demetini döndürür. Örneğin, yüzler listesindeki i. dizin veritabanındaki 5. kişiyi temsil ediyorsa, etiketler listesinde karşılık gelen i. konumun değeri 5'e eşittir.

Şimdi 6. adımda oluşturulan veri kümesi yüzlerini aşağıda verilen kod yardımıyla.yml dosyasına dönüştürün:

işletim sistemini içe aktar

numpy'yi np olarak içe aktar PIL'den cv2'yi içe aktar Görüntü # Yüz tanıma için LBPH Yüz Tanıma tanıyıcısını kullanacağız = cv2.createLBPHFaceRecognizer(); path="F:/Program Files/projects/face_rec/facesData" def getImagesWithID(path): imagePaths = [os.path.join(path, f) for f in os.listdir(path)] # print image_path #getImagesWithID(path) yüzler = Kimlikler = imagePaths içindeki imagePath için: # Resmi okuyun ve gri tonlamalı facelere dönüştürünImg = Image.open(imagePath).convert('L') faceNP = np.array(facesImg, 'uint8') # Resmin etiketini alın ID= int(os.path.split(imagePath)[-1].split(".")[1]) # Resimdeki yüzü algılayın face.append(faceNP) IDs.append (ID) cv2.imshow("Eğitim için yüzler ekleme", faceNP) cv2.waitKey(10) return np.array(ID'ler), yüzler Kimlikler, yüzler = getImagesWithID(yol) tanıyıcı.train(yüzler, Kimlikler) tanıyıcı.save ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows()

bu kodu kullanarak tüm yüz veri kümesi tek bir.yml dosyasına dönüştürülür…..path konumu ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") olur

Adım 8: Yüzleri ve Sonucu Tanımak için Kod Yapın

Guyzz bu, web kameranızın yardımıyla yüzleri tanımak için kod oluşturabileceğimiz son adımdır BU ADIMDA YAPILACAK İKİ İŞLEM VARDIR…. 1. videoyu kameradan yakalama 2..yml dosyanızla karşılaştırın

numpy'yi npimport cv2 olarak içe aktar face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) rec = cv2.createLBPHFaceRecognizer rec.load("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id=0 font=cv2.cv. InitFont(cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) iken 1: ret, img = cap.read() gri = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) yüzler = face_cascade.detectMultiScale(gri, 1.5, 5) (x, y, w, h) için yüzler: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf=rec.tahmin(gri[y:y+h, x:x+w]) if(id==2): id="alok" ise id==1 ise: id="alok" ise id==3: id="anjali" ise id==4: id="Gaurav" ise id= =5: id='rahul' ise id==6: id="akshay" cv2.cv. PutText(cv2.cv.fromarray(img), str(id), (x, y+h), font, 255) cv2.imshow('img', img) if cv2.waitKey(1) == ord('q'): break cap.release()

cv2.destroyAllWindows()

ve sonunda sonuç gözlerinizin önüne gelecek…… ayrıca zip dosyasını bağlantının altından da indirebilirsiniz:Kodları indirmek için buraya tıklayın Yani, bu talimatta OpenCV kullanarak yüz tanıma + tanıma görevini gerçekleştirdik….. bu öğreticiyi beğen….. plzzz bana abone ol ve bana oy ver…..teşekkürler arkadaşlar:)

Önerilen: