OpenCV é uma biblioteca usada para realizar o processamento de imagens usando linguagens de programação como python. Este projeto utiliza a biblioteca OpenCV para fazer uma detecção de rosto em tempo real usando sua webcam como câmera principal.

A seguir estão os requisitos para isso: -

  1. Python 2.7
  2. OpenCV
  3. Numpy
  4. Classificadores faciais Haar Cascade Frontal

Abordagem / Algoritmos usados:

  1. Este projeto usa o Algoritmo LBPH (Local Binary Patterns Histograms) para detectar faces. Ele rotula os pixels de uma imagem limitando a vizinhança de cada pixel e considera o resultado como um número binário.
  2. LBPH usa 4 parâmetros:
    (i) Raio: o raio é usado para construir o padrão binário local circular e representa o raio ao redor do
    pixel central.
    (ii) Vizinhos: o número de pontos de amostra para construir o padrão binário local circular.
    (iii) Grade X: o número de células na direção horizontal.
    (iv) Grade Y: o número de células na direção vertical.
  3. O modelo construído é treinado com as faces com tag que lhes é fornecida e, posteriormente, a máquina recebe um dado de teste e a máquina decide o rótulo correto para ele.

Como usar :

  1. Crie um diretório em seu pc e nomeie-o (por exemplo, projeto)
  2. Crie dois arquivos Python chamados create_data.py e face_recognize.py, copie o primeiro código-fonte e o segundo código-fonte nele, respectivamente.
  3. Copie haarcascade_frontalface_default.xml para o diretório do projeto, você pode obtê-lo em opencv ou
    daqui .
  4. Agora você está pronto para executar os seguintes códigos.
import cv2, sys, numpy, os 
haar_file = 'haarcascade_frontalface_default.xml'
datasets = 'datasets'  
  
  
sub_data = 'vivek'     
  
path = os.path.join(datasets, sub_data) 
if not os.path.isdir(path): 
    os.mkdir(path) 
(width, height) = (130, 100)     
  
face_cascade = cv2.CascadeClassifier(haar_file) 
webcam = cv2.VideoCapture(0
count = 1
while count < 30
    (_, im) = webcam.read() 
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) 
    faces = face_cascade.detectMultiScale(gray, 1.3, 4) 
    for (x, y, w, h) in faces: 
        cv2.rectangle(im, (x, y), (x + w, y + h), (255, 0, 0), 2) 
        face = gray[y:y + h, x:x + w] 
        face_resize = cv2.resize(face, (width, height)) 
        cv2.imwrite('% s/% s.png' % (path, count), face_resize) 
    count += 1
      
    cv2.imshow('OpenCV', im) 
    key = cv2.waitKey(10) 
    if key == 27: 
        break

O seguinte código deve ser executado após o modelo ter sido treinado para os rostos:



import cv2, sys, numpy, os 
size = 4
haar_file = 'haarcascade_frontalface_default.xml'
datasets = 'datasets'
print('Recognizing Face Please Be in sufficient Lights...') 
(images, lables, names, id) = ([], [], {}, 0) 
for (subdirs, dirs, files) in os.walk(datasets): 
    for subdir in dirs: 
        names[id] = subdir 
        subjectpath = os.path.join(datasets, subdir) 
        for filename in os.listdir(subjectpath): 
            path = subjectpath + '/' + filename 
            lable = id
            images.append(cv2.imread(path, 0)) 
            lables.append(int(lable)) 
        id += 1
(width, height) = (130, 100) 
(images, lables) = [numpy.array(lis) for lis in [images, lables]] 
model = cv2.face.LBPHFaceRecognizer_create() 
model.train(images, lables) 
face_cascade = cv2.CascadeClassifier(haar_file) 
webcam = cv2.VideoCapture(0) 
while True: 
    (_, im) = webcam.read() 
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) 
    faces = face_cascade.detectMultiScale(gray, 1.3, 5) 
    for (x, y, w, h) in faces: 
        cv2.rectangle(im, (x, y), (x + w, y + h), (255, 0, 0), 2) 
        face = gray[y:y + h, x:x + w] 
        face_resize = cv2.resize(face, (width, height)) 
      prediction = model.predict(face_resize) 
        cv2.rectangle(im, (x, y), (x + w, y + h), (0, 255, 0), 3) 
if prediction[1]<500: 
   cv2.putText(im, '% s - %.0f' % 
(names[prediction[0]], prediction[1]), (x-10, y-10),  
cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 0)) 
        else: 
          cv2.putText(im, 'not recognized'
(x-10, y-10), cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 0)) 
  
    cv2.imshow('OpenCV', im) 
      
    key = cv2.waitKey(10) 
    if key == 27: 
        break

Nota: os programas acima não funcionarão no IDE online.

Capturas de tela do programa

Pode parecer algo diferente porque eu integrei o programa acima no framework flask

A execução do segundo programa produz resultados semelhantes aos da imagem abaixo:

detecção de rosto

detecção de rosto

Armazenamento de conjuntos de dados:

data_sets

data_sets