Cuma, Ağustos 04, 2017

Python OpenCV2 ile Yüz tanıma

Tanışma faslı..
Antreman faslı..
Tanıma faslı..

Klasör ve Dosya yapımız şöyle:




https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml
buradaki xml dosyasını alıp
yuz.xml olarak kayıt edelim




KutuphaneOlustur.py içeriğimiz:
===================================

import numpy as np
import cv2
import time
import win32gui

detector = cv2.CascadeClassifier('yuz.xml')

cam = cv2.VideoCapture(0)


ks = open("kisiler.txt","r"); kisiler = ks.read(); ks.close()
kisiler = kisiler.split('\n')
sonno = len(kisiler); kayitno = sonno + 1

isimler=[]
for kisi in kisiler:
    no, isim = kisi.split(':')
    isimler.append(isim)
 


def KontrolKayit(yeniad):
    if not yeniad in isimler:
        ky = open("kisiler.txt","a"); ky.write(str("\n"+str(kayitno)+":"+str(yeniad))); ky.close()
     
    else:
        yeniad = raw_input(u'Bu isimde birini tanıyorum. \n Karışmaması için Soyisim vb. alabilir miyim: ')
        KontrolKayit(yeniad)


#+++++++++++++++++++++++++++++++++++++++++++++++++++
     
yeniad = raw_input(u'Tanışalım isminiz nedir?: ')
     
KontrolKayit(yeniad)



Id=kayitno

time.sleep(1)

sampleNum = 0
while 1:
    ret, img = cam.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = detector.detectMultiScale(gray, 1.3, 5)
 

    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)


        time.sleep(.5)
        #kisinin cok sayida resmini kayit
        sampleNum = sampleNum+1
        cv2.imwrite("dataSet/User."+str(Id) +'.'+ str(sampleNum) + ".jpg", gray[y:y+h,x:x+w])

     
        cv2.imshow('KutuphaneKayit',cv2.flip(img,1))





 
    #wait for 100 miliseconds
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break
    # break if the sample number is morethan 20
    elif sampleNum>20:
        break




cam.release()
cv2.destroyAllWindows()

import Antreman

============================

Antreman.py içeriğimiz:

======================
import os
import cv2
import numpy as np
from PIL import Image

#creating a recognizer

recognizer = cv2.face.createLBPHFaceRecognizer()
path = 'dataSet'

def getImagesWithID(path):
    imagePaths=[os.path.join(path, f) for f in os.listdir(path)]  
    faces=[]
    IDs=[]
    for imagePath in imagePaths:
        faceImg = Image.open(imagePath).convert('L')
        faceNp = np.array(faceImg, 'uint8')
        ID=int(os.path.split(imagePath)[-1].split('.')[1])
        print ID
        faces.append(faceNp)
        IDs.append(ID)
        cv2.imshow('training', faceNp)
        cv2.waitKey(5)
    return np.array(IDs), faces

Ids, faces = getImagesWithID(path)
recognizer.train(faces, Ids)

if not os.path.exists('trainer'):
    os.makedirs('trainer')

recognizer.save('trainer/training_data.yml')
cv2.destroyAllWindows()


============================

_ismenKisiTani.py içeriğimiz:

======================

import cv2
import numpy as np
import time

recognizer = cv2.face.createLBPHFaceRecognizer()
recognizer.load('trainer/training_data.yml')
cascadePath = "yuz.xml"
faceCascade = cv2.CascadeClassifier(cascadePath)

cam = cv2.VideoCapture(0)
#font = cv2.FONT_HERSHEY_SCRIPT_SIMPLEX
font = cv2.FONT_HERSHEY_DUPLEX

ks = open("kisiler.txt","r"); kisiler = ks.read(); ks.close()
kisiler = kisiler.split('\n')
sonno = len(kisiler)


isimler=[]
for kisi in kisiler:
    no, isim = kisi.split(':')
    isimler.append(isim)


while True:
    ret, im =cam.read()
    im = cv2.flip(im,1)
    gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
    faces=faceCascade.detectMultiScale(gray, 1.2,5)
    for(x,y,w,h) in faces:
        cv2.rectangle(im,(x,y),(x+w,y+h),(225,0,0),2)
        Id, conf = recognizer.predict(gray[y:y+h,x:x+w])

        Id =  isimler[Id-1]

        if(conf<45 div="">
          Id="-cikaramadim-"

            
        cv2.putText(im,str(Id),(x,y-10),font,0.55,(0,255,0),1)
        #cv2.cv.PutText(cv2.cv.fromarray(im),str(Id), (x,y+h),font, 255)



    cv2.imshow('im',im)
    
    k = cv2.waitKey(30) & 0xff
    if (cv2.waitKey(30) & 0xFF==ord('q')) or (k == 27) :
        break


cam.release()
cv2.destroyAllWindows()

============================

Hiç yorum yok: