Índice:

Detecção, treinamento e reconhecimento de rosto Opencv: 3 etapas
Detecção, treinamento e reconhecimento de rosto Opencv: 3 etapas

Vídeo: Detecção, treinamento e reconhecimento de rosto Opencv: 3 etapas

Vídeo: Detecção, treinamento e reconhecimento de rosto Opencv: 3 etapas
Vídeo: Reconhecimento Facial Tutorial - Opencv Python Deep Learning 2024, Novembro
Anonim
Detecção, treinamento e reconhecimento de rosto Opencv
Detecção, treinamento e reconhecimento de rosto Opencv

OpenCV é uma biblioteca de visão de computador de código aberto muito popular para realizar tarefas básicas de processamento de imagem, como desfoque, mistura de imagem, aprimoramento de imagem, bem como qualidade de vídeo, limite etc. Além de processamento de imagem, fornece vários aprendizado profundo pré-treinado modelos que podem ser usados diretamente para resolver tarefas simples à mão.

para instalação opencv use este link

www.instructables.com/id/Opencv-and-Python…

Etapa 1: Detectando o rosto em um vídeo em tempo real

você pode pesquisar no Google por muitos programas de detecção de rosto e os rostos detectados devem ser salvos em uma pasta para outras coisas de processamento de imagem, como treinamento e etiquetagem. vamos coletar 30 amostras

import cv2

importar numpy como np

import os import sys

camera = cv2. VideoCapture (0)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml") #add seu caminho de arquivo harcascade

name = raw_input ("Qual é o nome dele / dela?")

#todos os arquivos serão salvos na pasta Usuários / prasad / Documentos / imagens

dirName = "/ Usuários / prasad / Documentos / imagens /" + nome

print (dirName) se não os.path.exists (dirName): os.makedirs (dirName) print ("Diretório criado") else: print ("Nome já existe") sys.exit ()

contagem = 1

# vamos coletar 30 amostras

enquanto a contagem 30: break # frame = frame.array gray = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale (grey, 1.5, 5) for (x, y, w, h) em faces: roiGray = cinza [y: y + h, x: x + w] fileName = dirName + "/" + name + str (count) + ".jpg" cv2.imwrite (fileName, roiGray) cv2.imshow ("face", roiGray) cv2.rectangle (frame, (x, y), (x + w, y + h), (0, 255, 0), 2) count + = 1 cv2.imshow ('frame', frame) key = cv2.waitKey (1)

se chave == 27:

pausa

# camera.release ()

cv2.destroyAllWindows ()

Etapa 2: treinar suas imagens de amostra

Depois que a detecção de rosto for concluída, podemos ir para o treinamento das imagens

import osimport numpy como np de PIL import Image import cv2 import pickle #import serial

#ser = serial. Serial ('/ dev / ttyACM0', 9600, tempo limite = 1)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml")

reconhecedor = cv2.face. LBPHFaceRecognizer_create ()

baseDir = os.path.dirname (os.path.abspath (_ file_))

# treinar as imagens na pasta de imagens

imageDir = os.path.join (baseDir, "imagens")

currentId = 1

labelIds = {} yLabels = xTrain = # ser.write ("Treinamento…..". encode ())

para root, dirs, arquivos em os.walk (imageDir):

print (root, dirs, files) para arquivo em arquivos: print (file) if file.endswith ("png") ou file.endswith ("jpg"): path = os.path.join (root, file) label = os.path.basename (root) print (label)

se não, rótulo em labelIds:

labelIds [label] = currentId imprimir (labelIds) currentId + = 1

id_ = labelIds [rótulo]

pilImage = Image.open (path).convert ("L") imageArray = np.array (pilImage, "uint8") faces = faceCascade.detectMultiScale (imageArray, scaleFactor = 1.1, minNeighbors = 5)

para (x, y, w, h) nas faces:

roi = imageArray [y: y + h, x: x + w] xTrain.append (roi) yLabels.append (id_)

com aberto ("rótulos", "wb") como f:

pickle.dump (labelIds, f) f.close ()

reconhecedor.train (xTrain, np.array (yLabels))

reconhecizer.save ("trainer.yml") print (labelIds)

Etapa 3: reconhecendo rostos

após o término do treinamento, você pode executar o código abaixo para que ele comece a reconhecer seus rostos treinados

import osos.environ ['PYTHONINSPECT'] = 'on' import cv2 import numpy como np import pickle #import RPi. GPIO como GPIO from time import sleep

com open ('labels', 'rb') como f:

dicti = pickle.load (f) f.close ()

camera = cv2. VideoCapture (0)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml")

reconhecizer = cv2.face. LBPHFaceRecognizer_create () reconhecizer.read ("trainer.yml")

font = cv2. FONT_HERSHEY_SIMPLEX

last = ''

#for frame in camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True):

enquanto True: ret, frame = camera.read () gray = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale (grey, scaleFactor = 1.5, minNeighbors = 5) para (x, y, w, h) nas faces: roiGray = cinza [y: y + h, x: x + w]

id_, conf = reconhecizer.predict (roiGray)

para nome, valor em dicti.items ():

if value == id_: print (name) cv2.putText (frame, name, (x, y), font, 2, (0, 0, 255), 2, cv2. LINE_AA) if name! = last: last = nome se conf <= 70: cv2.rectangle (quadro, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow ('frame', frame)

key = cv2.waitKey (1)

se chave == 27:

quebrar cv2.destroyAllWindows ()

Recomendado: