Reconhecimento facial usando OpenCV | Crie um sistema de reconhecimento facial

Conteúdo

Este artigo foi publicado como parte do Data Science Blogathon

– Compreensão básica da classificação de imagens.

– Conhecimento de Python e Deep Learning

– Compreensão conceitual de vários módulos de aprendizado profundo.

Introdução

Neste artigo, veremos o que é reconhecimento facial? E como também é diferente da detecção de rosto? Vamos entender brevemente a teoria do reconhecimento facial e então pular para a seção de codificação!! No final deste artigo, você pode desenvolver um programa de reconhecimento facial para reconhecer rostos em imagens !!!

Agenda deste artigo

1. Visão geral da detecção de rosto

2. Visão geral do reconhecimento facial

3. Entenda o que é OpenCV

4. Implementação Python

Visão geral da detecção de rosto

E se a máquina for capaz de detectar automaticamente objetos em uma imagem sem intervenção humana? Vamos ver: a detecção de rosto pode ser um problema quando detectamos rostos humanos em uma imagem. Pode haver pequenas diferenças nos rostos humanos, mas afinal, É seguro dizer que existem características específicas associadas a todos os rostos humanos.. Existem vários algoritmos de detecção de rosto, mas o Viola-Jones O algoritmo é o método mais antigo que também é usado hoje.

A detecção de rosto é geralmente o primeiro passo para muitos aplicativos relacionados ao rosto., como reconhecimento de rosto ou verificação de rosto. Mas a detecção de rosto tem aplicativos muito úteis. Um dos aplicativos de detecção de rosto de maior sucesso é provavelmente o “Sessão de fotos”.

Exemplo: quando você clica em uma foto de seus amigos, a câmera com o algoritmo de detecção de rosto integrado detecta onde os rostos estão e ajusta o foco de acordo.

Visão geral do reconhecimento facial

Agora vimos que nossos algoritmos podem detectar faces, mas podemos também reconhecer os rostos de quem são? E se um algoritmo for capaz de reconhecer rostos?

Geralmente, o reconhecimento facial é um método de identificar ou verificar o identidade de um indivíduo usando seu rosto. Existem vários algoritmos para reconhecimento facial, mas sua precisão pode variar. Aqui, vou discutir com você como podemos fazer reconhecimento facial usando aprendizado profundo.

Agora, vamos entender como podemos reconhecer rostos por meio do aprendizado profundo. Aqui usamos inlays de face onde cada face é convertida em um vetor. A técnica de converter o rosto em um vetor é chamada profundo aprendizado de métrica. Deixe-me dividir esse processo em três etapas simples para um entendimento melhor e mais fácil.:

1. Detecção de rosto:

A primeira tarefa que fazemos é detectar rostos na imagem (Fotografia) ou sequência de vídeo. Agora sabemos que as coordenadas / localização exata do rosto, então extraímos esse rosto para processamento posterior.

2. Extração de recursos:

Agora veja que cortamos o rosto da imagem, então extraímos características específicas dele. Aqui, veremos como usar inlays faciais para extrair esses recursos do rosto. Como sabemos, uma neuronal vermelho Ele pega uma imagem do rosto da pessoa como entrada e gera um vetor que representa as características mais importantes de um rosto. No aprendizado de máquina, este vetor nada mais é do que chamado incrustação e é por isso que chamamos esse vetor rosto embutido. Contudo, Como isso o ajudará a reconhecer os rostos de pessoas diferentes?

Quando treinamos a rede neural, a rede aprende a gerar vetores semelhantes para rostos que parecem iguais. Vamos considerar um exemplo, se eu tiver várias imagens de rosto em um período de tempo diferente, é óbvio que algumas características podem mudar, mas não muito. Então, neste problema, os vetores associados às faces são semelhantes ou podemos dizer que estão muito próximos no espaço vetorial.

Até aqui, temos que saber como essa rede funciona, vamos ver como usar esta rede em nossos próprios dados. Aqui, passamos todas as imagens de nossos dados para esta rede previamente treinada para obter os respectivos embeddings e salvá-los em um arquivo para a próxima etapa.

3. Comparação de rosto:

Temos inscrições de rosto para cada rosto em nossos dados salvos em um arquivo, o próximo passo é reconhecer uma nova imagem que é não em nossos dados. Portanto, o primeiro passo é calcular a codificação de face para a imagem usando a mesma grade que usamos anteriormente e, em seguida, comparar esta codificação com o resto da codificação que temos. Reconhecemos o rosto se o inlay gerado for mais próximo ou semelhante a qualquer outro inlay.

909161_fpdngo6lm5pdeipooezk1g-7988524

Fonte da imagem: https://cdn-media-1.freecodecamp.org/images/1*fpDngO6lM5pDeIPOOezK1g.jpeg

Entenda o que é OpenCV

No campo da Inteligência Artificial, Visão computacional é uma das tarefas mais interessantes e desafiadoras. A visão computacional atua como uma ponte entre o software de computador e as visualizações. A visão computacional permite que o software de computador entenda e aprenda sobre as telas do arredores.

Vamos entender um exemplo: Com base na forma, cor e tamanho que determina a fruta. Esta tarefa é muito fácil para o cérebro humano, mas no processo de Visão Computacional, primeiro, precisamos coletar os dados, então realizamos as operações de processamento de dados, e então treinamos e ensinamos o modelo a entender como distinguir entre frutas com base em seu tamanho, forma e cor da fruta.

77786yolo-predictions-2660281

Fonte da imagem: https://martinapugliese.github.io/assets/posts_images/yolo-predictions.png

Hoje em dia, existem vários pacotes disponíveis para realizar problemas de aprendizado de máquina, aprendizado profundo e visão computacional. Até agora, a visão computacional é o melhor módulo para esses problemas complexos. OpenCV é uma biblioteca de código aberto. É compatível com diferentes linguagens de programação como R, Pitão, etc. Provavelmente funciona na maioria das plataformas como o Windows, Linux e macOS.

Vantagens do OpenCV:

1. O Open CV é gratuito e é uma biblioteca de código aberto.

2. O currículo aberto é rápido, uma vez que é escrito em linguagem C / C ++ comparado a outros.

3. Com menos RAM de sistema, OpenCV funciona melhor.

4. É compatível com a maioria dos sistemas operacionais, como Windows, Linux e macOS.

Implementação

Nesta secção, vamos implementar o reconhecimento facial usando OpenCV e Python.

Primeiro, vamos ver de quais bibliotecas precisaremos e como instalá-las:

1. OpenCV

2. dlib

3. Reconhecimento facial

OpenCV é uma biblioteca de processamento de imagem e vídeo e é usada para análise de imagem e vídeo, como detecção de rosto, leitura da placa do carro, edição de fotos, visão robótica avançada e muito mais.

a dlib A biblioteca contém nossa implementação de 'aprendizado de métrica profunda’ que é usado para construir nossos embutidos faciais usados ​​para o processo de reconhecimento real.

a Reconhecimento facial a biblioteca é muito fácil de trabalhar e vamos usá-la em nosso código. Primeiro, lembre-se de instalar a biblioteca dlib antes de instalar o face_recognition.

O resultado de qualquer aplicativo de reconhecimento facial que use OpenCV será assim:

84749mzu1mta4mw-4842466

Fonte da imagem: https://espectro.ieee.org/image/MzU1MTA4Mw.jpeg

Para instalar OpenCV, dlib e reconhecimento facial, digite os seguintes trechos no prompt de comando.

pip install opencv-python
conda install -c conda-forge dlib
pip install face_recognition

Agora vamos fazer o código!

Extrair características do rosto

Primeiro, precisa de um conjunto de dados ou até mesmo crie o seu próprio. Apenas certifique-se de organizar todas as imagens em pastas com cada pasta contendo imagens de apenas uma pessoa.

Ou você pode baixar o conjunto de dados deste Ligação.

Agora, salve o conjunto de dados em uma pasta da mesma forma que você criará o arquivo. Aqui está o código e adicionei comentários quando necessário:

from imutils import paths #imutils includes opencv functions
import face_recognition
import pickle
import cv2
import os
#get paths of each file in folder named Images
#Images here that contains data(folders of various people)
imagePath = list(paths.list_images('Images'))
kEncodings = []
kNames = []
# loop over the image paths
for (i, ip) in enumerate(imagePath):
# extract the person name from the image path
name = ip.split(os.path.sep)[-2]
# load the input image and convert it from BGR
image = cv2.imread(ip)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
boxes = face_recognition.face_locations(rgb,model='hog')
# compute the facial embedding for the any face
encodings = face_recognition.face_encodings(rgb, boxes)
# loop over the encodings
for encoding in encodings:
kEncodings.append(encoding)
kNames.append(name)
#save emcodings along with their names in dictionary data
data = {"encodings": kEncodings, "names": kNames}
#use pickle to save data into a file for later use
f = open("face_enc", "wb")
f.write(pickle.dumps(data))#to open file in write mode
f.close()#to close file

Agora veja que armazenamos o embed em um arquivo chamado “face_enc“, Podemos usá-los para reconhecer rostos em imagens (Fotografias) ou streaming de vídeo ao vivo.

A próxima parte é que veremos como reconhecer rostos de imagens.

Como reconhecer o rosto nas imagens

O seguinte script para detectar e reconhecer rostos em imagens. Eu fiz comentários ao lado do código onde necessário. Então você será capaz de entender o código de forma eficiente.

import face_recognition
import imutils #imutils includes opencv functions
import pickle
import time
import cv2
import os
#to find path of xml file containing haarCascade file
cfp = os.path.dirname(cv2.__file__) + "/data/haarcascade_frontalface_alt2.xml"
# load the harcaascade in the cascade classifier
fc = cv2.CascadeClassifier(cfp)
# load the known faces and embeddings saved in last file
data = pickle.loads(open('face_enc', "rb").read())
#Find path to the image you want to detect face and pass it here
image = cv2.imread(Path-to-img)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
#convert image to Greyscale for HaarCascade
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = fc.detectMultiScale(gray,
scaleFactor=1.1,
minNeighbors=6,
minSize=(60, 60),
flags=cv2.CASCADE_SCALE_IMAGE)
# the facial embeddings for face in input
encodings = face_recognition.face_encodings(rgb)
names = []
# loop over the facial embeddings incase
# we have multiple embeddings for multiple fcaes
for encoding in encodings:
#Compare encodings with encodings in data["encodings"]
#Matches contain array with boolean values True and False
matches = face_recognition.compare_faces(data["encodings"],
encoding)
#set name =unknown if no encoding matches
name = "Unknown"
# check to see if we have found a match
if True in matches:
#Find positions at which we get True and store them
matchedIdxs = [i for (i, b) in enumerate(matches) if b]
count = {}
# loop over the matched indexes and maintain a count for
# each recognized face face
for i in matchedIdxs:
#Check the names at respective indexes we stored in matchedIdxs
name = data["names"][i]
#increase count for the name we got
count[name] = count.get(name, 0) + 1
#set name which has highest count
name = max(count, key=count.get)
# will update the list of names
names.append(name)
# do loop over the recognized faces
for ((x, y, w, h), name) in zip(faces, names):
# rescale the face coordinates
# draw the predicted face name on the image
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(image, name, (x, y), cv2.FONT_HERSHEY_SIMPLEX,
0.75, (0, 255, 0), 2)
cv2.imshow("Frame", image)
cv2.waitKey(0)

Produção

85438sem nome-3260817

conclusão

Agora você pode ver que isso nos leva ao final deste artigo, onde aprendemos tudo sobre o reconhecimento facial. Espero que tenha gostado deste artigo. Obrigado!

A mídia mostrada neste artigo não é propriedade da DataPeaker e é usada a critério do autor.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.