Crie um modelo de detecção de rosto em um vídeo usando Python

Conteúdo

Introdução

“Visão computacional e aprendizado de máquina realmente começaram a decolar, mas para a maioria das pessoas, toda a ideia do que um computador vê quando olha para uma imagem é relativamente escura”. – Mike Kreiger

O maravilhoso campo da visão computacional aumentou para uma categoria própria nos últimos anos. Existe um número impressionante de aplicativos que já são amplamente utilizados em todo o mundo., E estamos apenas começando!

Uma das minhas coisas favoritas neste campo é a ideia de que nossa comunidade adota o conceito de código aberto. Mesmo os grandes gigantes da tecnologia estão dispostos a compartilhar novos avanços e inovações com todos, para que as técnicas não continuem a ser "uma coisa dos ricos".

Uma dessas tecnologias é a detecção de rosto, oferecendo uma série de aplicações potenciais em casos de uso do mundo real (se usado corretamente e eticamente). Neste post, Vou mostrar como criar um algoritmo de detecção de rosto capaz usando ferramentas de código aberto. Aqui está uma demonstração para deixá-lo animado e preparar o terreno para o que está por vir:

Então você está pronto? Continue lendo então!

Observação: Se você quiser entender as complexidades da visão computacional, este curso: Visão computacional usando aprendizado profundo – é o lugar perfeito para começar.

Tabela de conteúdo

  • Aplicações potenciais de detecção de rosto
  • Configuração do sistema: requisitos de hardware / Programas
    • configuração de hardware
    • Configuração de software
  • Aprofundando a implementação do Python
    • Tutorial simples
    • Caso de uso de detecção de rosto

Aplicações promissoras de detecção de rosto

Deixe-me mostrar alguns exemplos incríveis de aplicativos onde as técnicas de detecção de rosto são usadas popularmente. Tenho certeza de que você deve ter se deparado com esses casos de uso em algum momento e não percebeu que técnica estava sendo usada nos bastidores.

Como um exemplo, O Facebook substituiu a marcação manual de imagens por sugestões geradas automaticamente para cada imagem enviada para a plataforma.. O Facebook usa um algoritmo de detecção de rosto simples para analisar os pixels dos rostos na imagem e compará-los com os usuários relevantes.. Vamos aprender como construir um modelo de detecção de rosto nós mesmos, mas antes de entrarmos nos detalhes técnicos disso, Vamos dar uma olhada em alguns outros casos de uso.

Estamos nos acostumando a desbloquear nossos telefones com o mais recente recurso de 'desbloqueio facial'.. Este é um pequeno exemplo de como uma técnica de detecção de rosto é usada para manter os dados pessoais seguros.. O mesmo pode ser colocado em prática em maior escala, permitindo que as câmeras capturem imagens e detectem rostos.

https://www.youtube.com/watch?v=bYrRQQX2PvY

Existem alguns outros aplicativos de detecção de rosto menos reconhecidos na publicidade, atenção médica, Banco, etc. A maioria das empresas, ou mesmo em muitas conferências, você deve carregar um cartão de identificação para entrar. Mas, E se pudéssemos encontrar uma maneira de você não precisar carregar um cartão de identificação para obter acesso? A detecção de rosto ajuda a tornar este procedimento simples e suave. A pessoa simplesmente olha para a câmera e ela detecta automaticamente se ela deve ser autorizada a entrar ou não.

Outra aplicação interessante de detecção de rosto poderia ser a contagem do número de pessoas que comparecem a um evento (como uma conferência ou um concerto). Em vez de contar manualmente os participantes, instalamos uma câmera que pode capturar as imagens dos participantes e nos dar a contagem total de pessoas. Isso pode ajudar a automatizar o procedimento e economizar uma tonelada de esforço manual.. Bem útil, não?

Você pode criar muitos outros aplicativos como estes; sinta-se à vontade para compartilhá-los na seção de comentários abaixo.

Neste post, Vou me concentrar na aplicação prática da detecção de rosto e ignorar como os algoritmos que ela contém realmente funcionam. Se você estiver interessado em saber mais sobre eles, Lee está jejuando.

Configuração do sistema: requisitos de hardware / Programas

Agora que você conhece os aplicativos em potencial, pode construir com técnicas de detecção de rosto, Vamos ver como podemos colocar isso em prática usando as ferramentas de código aberto disponíveis para nós.. Essa é a vantagem que temos com nossa comunidade: vontade de compartilhar e abrir o código-fonte é incomparável em qualquer setor.

Para esta postagem especificamente, isso é o que eu usei e recomendo usar:

  • Uma webcam (Logitech C920) construir um detector facial em tempo real em um laptop Lenovo E470 ThinkPad (Core i5 de 7ª geração). Você também pode usar a câmera embutida do seu laptop, ou câmera CCTV, em qualquer sistema adequado para análise de vídeo em tempo real, em vez da configuração que estou usando
  • Usar uma GPU para processamento de vídeo mais rápido é sempre uma vantagem
  • No lado do software, usamos o sistema operacional Ubuntu 18.04 com todos os pré-requisitos de software instalados

Vamos explorar esses pontos com um pouco mais de detalhes para garantir que tudo esteja configurado corretamente antes de construirmos nosso modelo de detecção de rosto..

Paso 1: configuração de hardware

A primeira coisa a fazer é verificar se a webcam está configurada corretamente. Um truque simples no Ubuntu: verifique se o sistema operacional registrou o dispositivo. Você pode seguir as etapas abaixo:

  1. Antes de conectar a WebCam ao laptop, verifique todos os dispositivos de vídeo conectados acessando o prompt de comando e digitando ls / dev / vídeo *. Isso imprimirá os dispositivos de vídeo que já estão conectados ao sistema.
  2. Conecte a WebCam e execute o comando novamente.Se a WebCam foi conectada com sucesso, o comando irá mostrar um novo dispositivo.
  3. Outra coisa que você pode fazer é usar qualquer software de webcam para verificar se a webcam está funcionando corretamente.. Você pode usar “Queijo” no Ubuntu para isso.
    Aqui podemos ver que a webcam está configurada corretamente. E é isso para o lado do hardware!!

Paso 2: configuração de software

Paso 2.1: instalar Python

O código nesta postagem foi criado com a versão 3.5 de Python. Mesmo que existam várias alternativas para instalar o Python, Eu recomendaria usar Anaconda, a distribuição Python mais popular para ciência de dados. Aqui está um link para instalar o Anaconda em seu sistema.

Paso 2.2: Instale OpenCV

OpenCV (Visão de computador de código aberto) é uma biblioteca destinada a criar aplicativos de visão computacional. Possui inúmeras funções pré-escritas para tarefas de processamento de imagem. Para instalar OpenCV, faça uma instalação pip da biblioteca:

pip3 install opencv-python

Paso 2.3: Instale la API face_recognition;

Em conclusão, usaremos Reconhecimento facial, nomeado a API de acreditação facial mais simples do mundo para Python. Instalar:
pip install dlib
pip install face_recognition

Vamos aprofundar a implementação

Agora que você configurou seu sistema, finalmente, é hora de mergulhar na implementação real. Primeiro, vamos rapidamente construir nosso programa, mais tarde vamos quebrá-lo para entender o que fizemos.

Tutorial simples

Primeiro, cria um arquivo face_detector.py e, em seguida, copiar o código fornecido abaixo:

# bibliotecas de importação
importar cv2
importar face_recognition

# Obtenha uma referência para webcam 
captura de vídeo = cv2.Captura de vídeo("/dev / video1")

# Inicializar variáveis
face_locations = []

enquanto Verdade:
    # Pegue um único quadro de vídeo
    direito, quadro = captura de vídeo.leitura()

    # Converta a imagem da cor BGR (que o OpenCV usa) para cor RGB (qual face_recognition usa)
    rgb_frame = quadro[:, :, ::-1]

    # Encontre todos os rostos no quadro atual do vídeo
    face_locations = face_recognition.face_locations(rgb_frame)

    # Exibir os resultados
    para principal, direito, fundo, deixou no face_locations:
        # Desenhe uma caixa ao redor do rosto
        cv2.retângulo(quadro, (deixou, principal), (direito, fundo), (0, 0, 255), 2)

    # Mostra a imagem resultante
    cv2.imshow('Vídeo', quadro)

    # Pressione 'q' no teclado para sair!
    E se cv2.waitKey(1) & 0xFF == palavras('q'):
        pausa

# Solte a alça para a webcam
captura de vídeo.liberar()
cv2.destroyAllWindows()

Subseqüentemente, execute este arquivo python digitando:

python face_detector.py

Se tudo funcionar bem, uma nova janela aparecerá com detecção de rosto em tempo real em execução.

Para resumir, isso é o que nosso código acima fez:

  1. Primeiro EUA definiu o hardware em que a análise de vídeo será realizada
  2. Disso, nós capturou o vídeo em tempo real, quadro por quadro
  3. Então nós processou cada frame e extraiu as localizações de todos os rostos na imagem
  4. Em conclusão nós renderizou esses quadros em forma de vídeo, junto com as localizações dos rostos

Simples, não é assim? Se você quiser entrar em detalhes mais granulares, Eu incluí os comentários em cada seção do código. Você sempre pode voltar e revisar o que fizemos.

Caso de uso de detecção de rosto

A diversão não termina aí! Outra coisa legal que podemos fazer: crie um caso de uso completo em torno do código acima. E você não precisa começar do zero. Podemos fazer apenas algumas pequenas alterações no código e estamos prontos para prosseguir..

Suponha, como um exemplo, você deseja construir um sistema automatizado baseado em câmera para rastrear onde o locutor está em tempo real. De acordo com sua posição, o sistema gira a câmera para que o alto-falante esteja sempre no meio do vídeo.

Como fazemos? O primeiro passo é construir um sistema que identifica as pessoas no vídeo e concentra-se na localização do locutor..

Vamos ver como podemos colocar isso em prática. Para esta postagem, Eu peguei um video de Youtube mostrando um palestrante falando durante a conferência DataHack Summit 2017.

Primeiro, importamos as bibliotecas indispensáveis:

import cv2
import face_recognition

Subseqüentemente, ler o vídeo e obter a duração:

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

Depois disso, nós criamos um arquivo de saída com a resolução necessária e taxa de quadros que é equivalente ao arquivo de entrada.

Faça upload de uma imagem de amostra do palestrante para identificá-lo no vídeo:

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

caras_conhecidas = [
face_encoding,
]

Tudo isso completado, agora nós rodamos um loop que fará o seguinte:

  • Extraia um quadro do vídeo
  • Encontre todos os rostos e identifique-os
  • Crie um novo vídeo para combinar o quadro original com a localização do rosto do locutor anotado

Vamos ver o código para este:

# Inicializar variáveis
face_locations = []
face_encodings = []
face_names = []
número do quadro = 0

enquanto Verdade:
    # Pegue um único quadro de vídeo
    direito, quadro = input_movie.leitura()
    número do quadro += 1

    # Saia quando o arquivo de entrada de vídeo terminar
    E se não direito:
        pausa

    # Converta a imagem da cor BGR (que o OpenCV usa) para cor RGB (qual face_recognition usa)
    rgb_frame = quadro[:, :, ::-1]

    # Encontre todos os rostos e codificações de rostos no quadro atual do vídeo
    face_locations = face_recognition.face_locations(rgb_frame, modelo="cnn")
    face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)

    face_names = []
    para face_encoding no face_encodings:
        # Veja se o rosto combina com o rosto conhecido(s)
        partida = face_recognition.compare_faces(faces_conhecidas, face_encoding, tolerância=0.50)

        nome = Nenhum
        E se partida[0]:
            nome = "Phani Srikant"

        face_names.acrescentar(nome)

    # Rotule os resultados
    para (principal, direito, fundo, deixou), nome no fecho eclair(face_locations, face_names):
        E se não nome:
            Prosseguir

        # Desenhe uma caixa ao redor do rosto
        cv2.retângulo(quadro, (deixou, principal), (direito, fundo), (0, 0, 255), 2)

        # Desenhe uma etiqueta com um nome abaixo do rosto
        cv2.retângulo(quadro, (deixou, fundo - 25), (direito, fundo), (0, 0, 255), cv2.PREENCHIDAS)
        Fonte = cv2.FONT_HERSHEY_DUPLEX
        cv2.putText(quadro, nome, (deixou + 6, fundo - 6), Fonte, 0.5, (255, 255, 255), 1)

    # Grave a imagem resultante no arquivo de saída de vídeo
    imprimir("Moldura de escrita {} / {}".formato(número do quadro, comprimento))
    output_movie.escrever(quadro)

# Tudo feito!
input_movie.liberar()
cv2.destroyAllWindows()

O código daria a você uma saída como esta:

Que coisa ótima é a detecção de rosto. 🙂

Projetos

Agora é a hora de mergulhar e brincar com outros conjuntos de dados reais. Então, Você está pronto para aceitar o desafio? Acelere sua jornada de aprendizado profundo com os seguintes problemas de prática:

conclusão

Parabéns! Agora você sabe como criar um sistema de detecção de rosto para vários casos de uso em potencial.. O aprendizado profundo é um campo fascinante e estou muito animado para ver para onde estamos indo agora..

Neste post, Aprendemos como você pode tirar proveito das ferramentas de código aberto para criar sistemas de detecção de rosto em tempo real que são úteis no mundo real. Eu o encorajo a criar muitos desses aplicativos e tentar por conta própria. Créame, há muito o que aprender e é muito divertido!

Como sempre, não hesite em nos contactar se tiver alguma questão / sugestão na seção de comentários abaixo.

Assine a nossa newsletter

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