Criando um modelo de reconhecimento de face usando aprendizado profundo em Python

A tradutora Elena Bornovolokova, especificamente para Netology, adaptou um artigo de Fayzan Shaykh sobre como criar um modelo de reconhecimento de rosto e em que áreas ele pode ser aplicado.

1. Introdução


Nos últimos anos, a visão computacional ganhou popularidade e se destacou em uma direção separada. Os desenvolvedores estão criando novos aplicativos que são usados ​​em todo o mundo.
Nesse sentido, sou atraído pelo conceito de código aberto. Até os gigantes da tecnologia estão prontos para compartilhar novas descobertas e inovações com todos, para que a tecnologia não permaneça como privilégio dos ricos.

Uma dessas tecnologias é o reconhecimento facial. Quando usada corretamente e eticamente, essa tecnologia pode ser aplicada em muitas áreas da vida.

Neste artigo, mostrarei como criar um algoritmo eficaz de reconhecimento de rosto usando ferramentas de código aberto. Antes de passar para essas informações, quero que você se prepare e se inspire assistindo a este vídeo:


Reconhecimento Facial: Aplicações Potenciais


Aqui estão algumas áreas potenciais de aplicação da tecnologia de reconhecimento de rosto.

Reconhecimento facial em redes sociais . O Facebook substituiu a marcação manual de imagens por sugestões de tags geradas automaticamente para cada imagem carregada na plataforma. O Facebook usa um algoritmo simples de reconhecimento de face para analisar os pixels da imagem e compará-lo com seus respectivos usuários.

Reconhecimento facial em segurança . Um exemplo simples de uso da tecnologia de reconhecimento de rosto para proteger dados pessoais é desbloquear seu smartphone "na cara". Essa tecnologia também pode ser implementada no sistema de acesso: uma pessoa olha para a câmera e determina se ela deve ser inserida ou não.


Reconhecimento facial para contar o número de pessoas . A tecnologia de reconhecimento de rosto pode ser usada para contar o número de pessoas que participam de um evento (como uma conferência ou concerto). Em vez de contar manualmente os participantes, instalamos uma câmera que pode capturar imagens dos rostos dos participantes e fornecer o número total de visitantes. Isso ajudará a automatizar o processo e economizar tempo.



Configuração do sistema: Requisitos de hardware e software


Considere como podemos usar a tecnologia de reconhecimento de rosto entrando em contato com as ferramentas de código aberto disponíveis para nós.

Usei as seguintes ferramentas que recomendo:

  • Webcam (Logitech C920) para a construção de um modelo de reconhecimento facial em tempo real em um laptop Lenovo E470 ThinkPad (Core i5 7th Gen). Você também pode usar a câmera ou a câmera de vídeo embutida do seu laptop com qualquer sistema adequado para análise de vídeo em tempo real, em vez dos que eu usei.
  • É preferível usar um processador gráfico para um processamento de vídeo mais rápido.
  • Usamos o sistema operacional Ubuntu 18.04 com todo o software necessário.

Antes de prosseguir com a construção do nosso modelo de reconhecimento facial, analisaremos esses pontos com mais detalhes.

Etapa 1: configuração do hardware


Verifique se a câmera está configurada corretamente. Com o Ubuntu, isso é simples: veja se o dispositivo é reconhecido pelo sistema operacional. Para fazer isso, execute as seguintes etapas:

  1. Antes de conectar a webcam ao laptop, verifique todos os dispositivos de vídeo conectados, digitando ls /dev/video* no prompt de comando. Como resultado, uma lista de todos os dispositivos de vídeo conectados ao sistema é exibida.
  2. Conecte a webcam e emita o comando novamente. Se a webcam estiver conectada corretamente, o novo dispositivo será refletido como resultado do comando.
  3. Você também pode usar o software da webcam para verificar seu funcionamento correto. O Ubuntu pode usar o programa Cheese para isso.

Etapa 2: configuração do software


Etapa 2.1: Instale o Python

O código neste artigo foi escrito usando Python (versão 3.5). Para instalar o Python, recomendo usar o Anaconda , uma distribuição popular do Python para processar e analisar dados.

Etapa 2.2: Instale o OpenCV

O OpenCV é uma biblioteca de código aberto projetada para criar aplicativos de visão computacional. A instalação do OpenCV é feita usando o pip :

 pip3 install opencv-python 

Etapa 2.3: definir a API face_recognition

Usaremos a face_recognition API , que é considerada a API de reconhecimento de faces Python mais fácil do mundo. Para instalar, use:

 pip install dlib pip install face_recognition 

Implementação


Após a configuração do sistema, prosseguimos para a implementação. Para começar, criaremos um programa e explicaremos o que fizemos.

Passo a passo


Crie um arquivo face_detector.py e copie o código abaixo:

 # import libraries import cv2 import face_recognition # Get a reference to webcam video_capture = cv2.VideoCapture("/dev/video1") # Initialize variables face_locations = [] while True: # Grab a single frame of video ret, frame = video_capture.read() # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses) rgb_frame = frame[:, :, ::-1] # Find all the faces in the current frame of video face_locations = face_recognition.face_locations(rgb_frame) # Display the results for top, right, bottom, left in face_locations:  # Draw a box around the face  cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) # Display the resulting image cv2.imshow('Video', frame) # Hit 'q' on the keyboard to quit! if cv2.waitKey(1) & 0xFF == ord('q'):  break # Release handle to the webcam video_capture.release() cv2.destroyAllWindows() 

Em seguida, execute este arquivo Python digitando:

 python face_detector.py 

Se tudo funcionar corretamente, uma nova janela será aberta com o modo de reconhecimento de rosto iniciado em tempo real.


Para resumir e explicar o que nosso código fez:

  1. Primeiro, indicamos o hardware no qual o vídeo será analisado.
  2. Em seguida, fizemos uma captura de vídeo em tempo real, quadro a quadro.
  3. Em seguida, cada quadro foi processado e a localização de todas as faces da imagem foi extraída .
  4. Como resultado, esses quadros foram reproduzidos na forma de um vídeo, juntamente com uma indicação de onde os rostos estão localizados.

Exemplo de aplicação de reconhecimento de rosto


Isso não é tudo que acaba a diversão. Faremos mais uma coisa interessante: criaremos um exemplo completo de aplicativo com base no código acima. Faremos pequenas alterações no código e tudo estará pronto.

Suponha que você deseje criar um sistema automatizado usando uma câmera de vídeo para rastrear onde o alto-falante está localizado no momento. Dependendo da sua posição, o sistema gira a câmera para que o alto-falante permaneça sempre no centro do quadro.
O primeiro passo é criar um sistema que identifique a pessoa ou pessoas no vídeo e se concentre na localização do orador.



Vamos descobrir como fazer isso. Como exemplo, selecionei um vídeo no YouTube com um discurso dos palestrantes da conferência DataHack Summit 2017.

Primeiro, importe as bibliotecas necessárias:

 import cv2 import face_recognition 

Então lemos o vídeo e definimos a duração:

 input_movie = cv2.VideoCapture("sample_video.mp4") length = int(input_movie.get(cv2.CAP_PROP_FRAME_COUNT)) 

Depois disso, criamos um arquivo de saída com a resolução e taxa de quadros necessárias semelhantes às do arquivo de entrada.

Carregamos a imagem do alto-falante como uma amostra para reconhecê-la no vídeo:

 image = face_recognition.load_image_file("sample_image.jpeg") face_encoding = face_recognition.face_encodings(image)[0] known_faces = [ face_encoding, ] 

Terminado, iniciamos o ciclo, que será:

  • Extrair quadro do vídeo.
  • Encontre todos os rostos e identifique-os.
  • Crie um novo vídeo que combine o quadro original com o local do rosto do falante com uma assinatura.

Vamos dar uma olhada no código que irá executar isso:

 # Initialize variables face_locations = [] face_encodings = [] face_names = [] frame_number = 0 while True: # Grab a single frame of video ret, frame = input_movie.read() frame_number += 1 # Quit when the input video file ends if not ret:  break # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses) rgb_frame = frame[:, :, ::-1] # Find all the faces and face encodings in the current frame of video face_locations = face_recognition.face_locations(rgb_frame, model="cnn") face_encodings = face_recognition.face_encodings(rgb_frame, face_locations) face_names = [] for face_encoding in face_encodings:  # See if the face is a match for the known face(s)  match = face_recognition.compare_faces(known_faces, face_encoding, tolerance=0.50)  name = None  if match[0]:      name = "Phani Srikant"  face_names.append(name) # Label the results for (top, right, bottom, left), name in zip(face_locations, face_names):  if not name:      continue      # Draw a box around the face  cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)  # Draw a label with a name below the face  cv2.rectangle(frame, (left, bottom - 25), (right, bottom), (0, 0, 255), cv2.FILLED)       font = cv2.FONT_HERSHEY_DUPLEX  cv2.putText(frame, name, (left + 6, bottom - 6), font, 0.5, (255, 255, 255), 1) # Write the resulting image to the output video file print("Writing frame {} / {}".format(frame_number, length)) output_movie.write(frame) # All done! input_movie.release() cv2.destroyAllWindows() 

O código fornecerá esse resultado:


Dos editores


Cursos de netologia sobre o tema:

Source: https://habr.com/ru/post/pt434354/


All Articles