Reconhecimento facial | App de reconhecimento facial

Conteúdo

Introdução

Você sabia que toda vez que você carrega uma foto no Facebook, a plataforma usa algoritmos de reconhecimento facial para identificar as pessoas naquela imagem? Ou que certos governos em todo o mundo usam tecnologia de reconhecimento facial para identificar e capturar criminosos?? Não preciso dizer que agora você pode desbloquear smartphones com o seu rosto!!

As aplicações desse subdomínio da visão computacional são vastas e empresas ao redor do mundo já estão colhendo os benefícios.. O uso de modelos de reconhecimento facial só aumentará nos próximos anos, então por que não aprender a construir um do zero?

face-4642753

Neste artigo, nós vamos fazer exatamente isso. Primeiro entenderemos o funcionamento interno do reconhecimento facial e, em seguida, faremos um estudo de caso simples e o implementaremos em Python. No final do artigo, você terá construído seu primeiro modelo de reconhecimento facial!

Tabela de conteúdo

  • Entenda como funciona o reconhecimento facial
  • Caso de estudo
  • Implementação Python
  • Compreender o código Python
  • Aplicações de algoritmos de reconhecimento facial

Entenda como funciona o reconhecimento facial

Para entender como o reconhecimento facial funciona, primeiro vamos ter uma ideia do conceito de vetor de recursos.

Cada algoritmo de aprendizado de máquina pega um conjunto de dados como entrada e aprende com esses dados. O algoritmo analisa os dados e identifica padrões nos dados. Por exemplo, suponha que queremos identificar qual rosto está presente em uma determinada imagem, há várias coisas que podemos considerar como um padrão:

  • Alto / largura do rosto.
  • Altura e largura podem não ser confiáveis, já que a imagem pode ser alterada para um rosto menor. Porém, mesmo depois da mudança de escala, o que permanece inalterado são os relacionamentos: a relação entre a altura do rosto e a largura do rosto não mudará.
  • Cor do rosto.
  • Largura de outras partes do rosto, como lábios, nariz, etc.

Claramente, Há um padrão aqui: rostos diferentes têm dimensões diferentes, como acima. Faces semelhantes têm dimensões semelhantes. A parte desafiadora é transformar um rosto específico em números: algoritmos de aprendizado de máquina só entendem números. Esta representação numérica de um “método” (ou um item do conjunto de treinamento) é chamado de vetor de característica. Um vetor de característica é composto de vários números em uma ordem específica.

Como um exemplo simples, podemos mapear um “método” em um vetor de recursos que pode compreender vários recursos, como:

  • Altura do rosto (cm)
  • Largura do rosto (cm)
  • Cor média do rosto (R, G, B)
  • Largura labial (cm)
  • Altura do nariz (cm)

Essencialmente, dada uma foto, podemos plotar vários recursos e convertê-los em um vetor de recursos como:

Altura do rosto (cm) Largura do rosto (cm) Cor média do rosto (RGB) Largura labial (cm) Altura do nariz (cm)
23,1 15,8 (255, 224, 189) 5.2 4.4

Então, nossa imagem agora é um vetor que poderia ser representado como (23.1, 15.8, 255, 224, 189, 5.2, 4.4). Claro, pode haver inúmeras outras características que podem ser derivadas da imagem (por exemplo, cor de cabelo, pelos faciais, copos, etc.). Porém, por exemplo, vamos considerar apenas estes 5 características simples.

Agora, uma vez que codificamos cada imagem em um vetor de recursos, o problema se torna muito mais simples. Claramente, quando temos 2 rostos (imagens) que representam a mesma pessoa, os vetores de características derivados serão bastante semelhantes. Em outras palavras, a “distância” entre os 2 vetores de características serão bem pequenos.

O aprendizado de máquina pode nos ajudar aqui com 2 material:

  1. Derivando o vetor de recurso: é difícil listar manualmente todas as funções porque existem tantos. Um algoritmo de aprendizado de máquina pode rotular de maneira inteligente muitos desses recursos. Por exemplo, uma característica complexa pode ser: proporção da altura do nariz para a largura da testa. Agora será muito difícil para um ser humano listar todas as características de “Segunda ordem”.
  2. Algoritmos de correspondência: Uma vez que os vetores de características foram obtidos, um algoritmo de aprendizado de máquina deve corresponder a uma nova imagem com o conjunto de vetores de recursos presentes no corpus.

Agora que temos uma compreensão básica de como o reconhecimento facial funciona, vamos criar nosso próprio algoritmo de reconhecimento facial usando algumas das bibliotecas Python mais conhecidas.

Caso de estudo

Eles nos dão muitos rostos, possivelmente de celebridades como Mark Zuckerberg, Warren Buffett, Bill Gates, Shah Rukh Khan, etc. Chame esse bando de rostos de nosso “corpus”. Agora, recebemos a imagem de outra celebridade (“nova celebridade”). A tarefa é simples: identifique se isso “nova celebridade” está entre os presentes no “corpus”.

Estas são algumas das imagens do corpus:

face1-7270292

Como você pode ver, temos celebridades como Barack Obama, Bill Gates, Jeff Bezos, Mark Zuckerberg, Ray Dalio e Shah Rukh Khan.

Agora, aqui está o “nova celebridade”:

face2-3172275

Observação: todas as imagens acima foram tiradas do google images.

Este é obviamente Shah Rukh Khan. Porém, para um computador, esta é uma tarefa desafiadora. O desafio vem do fato de que para nós, os humanos, é fácil combinar tantos recursos das imagens para ver qual é a celebridade. Porém, para um computador, não é fácil aprender a reconhecer esses rostos.

Existe uma biblioteca Python incrivelmente simples que encapsula tudo o que aprendemos anteriormente: crie vetores de recursos a partir de faces e saiba como diferenciar entre faces. Esta biblioteca Python é chamada como Reconhecimento facial e no fundo, emprega dlib – um conjunto de ferramentas C ++ Moderno que contém vários algoritmos de aprendizado de máquina que ajudam a escrever aplicativos sofisticados baseados em C ++.

Reconhecimento facial A biblioteca em Python pode realizar um grande número de tarefas:

  • Encontre todos os rostos em uma determinada imagem
  • Encontre e manipule características faciais em uma imagem.
  • Identifique rostos em imagens
  • Reconhecimento facial em tempo real

Aqui, vamos falar sobre o terceiro caso de uso: identificar rostos em imagens.

Você pode encontrar o código-fonte de Reconhecimento facial biblioteca aqui no Github: https://github.com/ageitgey/face_recognition.

De fato, há também um tutorial sobre como instalar Reconhecimento facial Biblioteca: https://github.com/ageitgey/face_recognition#installation-options. Antes de instalar Reconhecimento facial, você precisa instalar dlib assim como. Você pode encontrar as instruções para instalar dlib aqui: https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf.

Implementação Python

Esta seção contém o código para construir um sistema simples de reconhecimento facial usando o Reconhecimento facial Biblioteca. Esta é a parte de implementação, examinaremos o código para entendê-lo com mais detalhes na próxima seção.

# importar as bibliotecas
import os
importar face_recognition

# faça uma lista de todas as imagens disponíveis
images = os.listdir('imagens')

# carregue sua imagem
image_to_be_matched = face_recognition.load_image_file('my_image.jpg')

# codificou a imagem carregada em um vetor de recurso
image_to_be_matched_encoded = face_recognition.face_encodings(
    image_to_be_matched)[0]

# iterar sobre cada imagem
para imagem em imagens:
    # carregue a imagem
    current_image = face_recognition.load_image_file("imagens /" + imagem)
    # codificar a imagem carregada em um vetor de recurso
    current_image_encoded = face_recognition.face_encodings(imagem atual)[0]
    # combine sua imagem com a imagem e verifique se ela corresponde
    result = face_recognition.compare_faces(
        [image_to_be_matched_encoded], current_image_encoded)
    # verifique se era uma combinação
    se resultado[0] == Verdadeiro:
        imprimir "Coincide: " + imagem
    outro:
        imprimir "Não correspondido: " + imagem

A estrutura da pasta é a seguinte:

reconhecimento facial:

  • fr.py
  • my_image.jpg
  • imagens /
    • barack_obama.jpg
    • bill_gates.jpg
    • jeff_bezos.jpg
    • mark_zuckerberg.jpg
    • ray_dalio.jpg
    • shah_rukh_khan.jpg
    • warren_buffett.jpg

Nosso diretório raiz, reconhecimento facial contém:

  • Nosso código de reconhecimento facial anterior na forma de fr.py.
  • my_image.jpg: a imagem a ser reconhecida (“nova celebridade”).
  • imagens / – a “corpus”.

Quando você cria a estrutura de pastas como acima e executa o código acima, isso é o que você obtém como resultado:

Coincide: shah_rukh_khan.jpg
Não correspondido: warren_buffett.jpg
Não correspondido: barack_obama.jpg
Não correspondido: ray_dalio.jpg
Não correspondido: bill_gates.jpg
Não correspondido: jeff_bezos.jpg
Não correspondido: mark_zuckerberg.jpg

Claramente, a “nova celebridade” é Shah Rukh Khan e nosso sistema de reconhecimento facial é capaz de detectá-lo.

Compreender o código Python

Agora, vamos percorrer o código para entender como funciona:

# importar as bibliotecas
import os
importar face_recognition

Estas são simplesmente importações. Usaremos o embutido os biblioteca para ler todas as imagens em nosso corpus e usaremos Reconhecimento facial a fim de escrever o algoritmo.

# faça uma lista de todas as imagens disponíveis
images = os.listdir('imagens')

Este código simples nos ajuda a identificar o caminho de todas as imagens do corpus. Assim que esta linha for executada, nós teremos:

imagens = ['shah_rukh_khan.jpg', 'warren_buffett.jpg', 'barack_obama.jpg', 'ray_dalio.jpg', 'bill_gates.jpg', 'jeff_bezos.jpg', 'mark_zuckerberg.jpg']

Agora, o código a seguir carrega a imagem da nova celebridade:

# carregue sua imagem
image_to_be_matched = face_recognition.load_image_file('my_image.jpg')

Para garantir que os algoritmos possam interpretar a imagem, nós convertemos a imagem em um vetor de característica:

# codificou a imagem carregada em um vetor de recurso

image_to_be_matched_encoded = face_recognition.face_encodings(

    image_to_be_matched)[0]

O resto do código agora é bem fácil:

# iterar sobre cada imagem
para imagem em imagens:
    # carregue a imagem
    current_image = face_recognition.load_image_file("imagens /" + imagem)

    # codificar a imagem carregada em um vetor de recurso
    current_image_encoded = face_recognition.face_encodings(imagem atual)[0]

    # combine sua imagem com a imagem e verifique se ela corresponde
    result = face_recognition.compare_faces(
        [image_to_be_matched_encoded], current_image_encoded)

    # verifique se era uma combinação
    se resultado[0] == Verdadeiro:
        imprimir "Coincide: " + imagem
    outro:
        imprimir "Não correspondido: " + imagem

Estamos aqui:

  • Faça um loop sobre cada imagem.
  • Codifique a imagem em um vetor de recurso.
  • Comparando a imagem carregada com a imagem a ser reconhecida.
  • Se for coincidência, nós imprimimos isso. Se não corresponder, nós também imprimimos.

O resultado mostrado acima sugere claramente que este algoritmo de reconhecimento facial simples funciona incrivelmente bem.. Vamos tentar substituir Minha imagem com outra imagem:

face 3-4201312

Quando eu executo o algoritmo novamente, você verá o seguinte resultado:

Não correspondido: shah_rukh_khan.jpg
Não correspondido: warren_buffett.jpg
Não correspondido: barack_obama.jpg
Não correspondido: ray_dalio.jpg
Não correspondido: bill_gates.jpg
Não correspondido: jeff_bezos.jpg
Não correspondido: mark_zuckerberg.jpg

Claramente, o sistema não identificou Jack Ma como nenhuma das celebridades mencionadas. Isso indica que nosso algoritmo é muito bom em ambos:

  • Identifique corretamente aqueles que estão presentes no corpus
  • Marque uma incompatibilidade para aqueles que não estão presentes no corpus

Apps de reconhecimento facial

O reconhecimento facial é um problema bem pesquisado e amplamente utilizado na indústria e na academia. Como exemplo, um criminoso na China foi preso porque um sistema de reconhecimento facial em um shopping detectou seu rosto e disparou o alarme. Claramente, o reconhecimento facial pode ser usado para mitigar o crime. Existem muitos outros casos de uso interessantes de reconhecimento facial:

  • Autenticação facial: A Apple lançou o Face ID para autenticação facial em iPhones. Alguns dos principais bancos estão tentando usar autenticação facial para armários.
  • Serviço ao cliente: Alguns dos bancos na Malásia instalaram sistemas que usam reconhecimento facial para detectar clientes valiosos do banco para que o banco possa fornecer um serviço personalizado. Desta maneira, os bancos podem gerar mais receita ao reter esses clientes e mantê-los satisfeitos.
  • Subscrição de seguro: Muitas seguradoras usam o reconhecimento facial para fazer a correspondência entre o rosto da pessoa e o que consta na prova de identificação com foto.. Desta forma, o processo de inscrição se torna muito mais rápido.

Notas finais

Em resumo, o reconhecimento facial é um problema interessante com muitos casos de uso poderosos que podem ajudar significativamente a sociedade em várias dimensões. Embora sempre haja um risco ético associado à comercialização de tais técnicas, esse é um debate que deixaremos de lado para outro momento.

Espero que este artigo tenha sido útil para você. Envie seus comentários e sugestões na seção de comentários abaixo!!

Sobre o autor

safe-goel-5332826Goel seguro, cofundador e CEO da AllinCall Research & Soluções
Aman Goel é ex-aluno do IIT-Bombay e é empresário, codificador e fanático por investigação de acidentes de avião. Escreva blogs de programação para Hackr.io, uma comunidade de codificação para encontrar os melhores tutoriais de codificação. Ele é cofundador da AllinCall Research & Soluções e adora ajudar as pessoas a resolverem os problemas do IIT JEE.

Assine a nossa newsletter

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