Inteligencia ArtificialLinuxvisao computacional

Face detection com DNN no OpenCV

Simplicidade passa longe dessa área de visão computacional e inteligência artificial. Não é só a questão de programar, serão suas mãos a configurar o sistema; instalar driver de placa de vídeo, suporte a CUDA, compilação do OpenCV etc.

Esse artigo só foi possível graças à ajuda dada pelo Leonardo Lontra, um especialista em IA e CV em sistemas embarcados, que tem participação no código do próprio OpenCV.  Enfim, quer experimentar algo novo e incrível? Então prepare seu Linux para receber configurações!

Instalar o docker

O primeiro passo é criar um container docker. Dessa vez não é só instalar uma imagem pronta como o OpenFace. Vamos pegar um sistema “crú”, então lapidá-lo. Para isso, será necessário ter o docker instalado. Para fazê-lo, sugiro que siga o tutorial da Digital Ocean, caso não o tenha feito ainda.

Depois de instalado, siga as operações como root para simplificar as coisas:

Baixar imagem Debian Docker

Para baixar a imagem oficial do Debian é bastante simples. Digite agora no terminal (seja ele qual for; konsole, gtkterm, xterm):

Em pouco tem uma imagem mínima estará disponível no sistema. Daí você pode criar seu container (já descrevi nesse arquivo de CUDA):

Se não conectar diretamente ao console, verifique se a imagem está rodando:

Se estiver rodando, aparecerá o nome no último campo:

dnn no opencv

Basta conectar-se ao container:

E dê Enter 2 vezes.

Mude o nível de diretório para o home do root:

Instale uns pacotes:

 

Agora, clone o repositório do Lontra:

Instalando CUDA

Se você ainda não configurou no computador nativo, nem criar o container será possível. Faça esse procedimento primeiro no sistema nativo, se for o caso. Depois, faça no container.

Adicione o repositório (isso é para Debian):

E faça a instalação dos pacotes necessários:

Vai demorar um bocado até tudo estar pronto. Se houver problemas pelo caminho, solucione-os. O próximo passo é modificar o arquivo de configuração para compilar o OpenCV4 (tudo isso já no container):

Se não souber usar o vi, recomendo que utilize outra coisa; nano, pico, midnight-commander. Vá até a parte gui support e deixe-a assim:

Antes de iniciar a compilação, já precavenha-se do iminente erro relacionado ao v4l:

Agora iniciando o processo de compilação:

O que precisar confirmar com Y, não deixe de fazê-lo. Quando for perguntada a versão do GTK, escolha 3.

As dependências serão baixadas e instaladas automaticamente. O processo leverá um tempo gigantesco, mas deve funcionar no final.

Instalei alguns pacotes mais, você pode preceder a compilação com essa instalação:

Quando finalizado, será exibido algo como:

dnn no opencvCopie o pacote para /root.

Em outra aba de terminal, copie o pacote de dentro do container para o sistema nativo:

Instale o pacote:

Depois, copie a lib cv2.so para o novo path:

E faça o teste de importação da lib (ainda vai ter coisa pra resolver, mas ao menos haverá pistas):

Tive um erro com a versão da libcudart.

Vá ao site da Nvidia e baixe o pacote. Depois:

Por fim, faça um reboot.

Python não consegue importar o módulo cv2

Ainda com probemas? Depois do reboot, voltei a ter o problema, mas a biblioteca estava lá onde deveria estar. Bem, eu tenho uma gambiarra na manga que funcionou:

Models

Agora, pegue os arquivos pb pb.txt  do arquivo opencv_face_detector.

Coloque-os no mesmo nível do script Python que fará o face detection. Eu chamei de facednn.py:

Depois, execute-o:

E o resultado será algo como a imagem de destaque, mas provavelmente com um susto menor.

Meus agradecimentos ao meu mestre Leonardo Lontra, que sempre me orienta em ambos, visão computacional e inteligência artificial, além de ajudar a resolver os problemas que aparecem no trajeto. Esse código de exemplo também é uma cortesia dele. Não deixem de visitar seu repositório, lá está cheio de tesouros.

Vídeo

Fiz um vídeo curto só para mostrar a robustez da detecção, tire as crianças da sala para não assustá-las com minhas caretas. Quem usa o haarcascade com frontal face sabe que se deslocar o rosto ou inclinar a cabeça, já era a detecção, impressione-se!

Deixe seu like no vídeo, inscreva-se no canal e clique no sininho para receber notificações. Até a próxima!

 

2 comments

Comments are closed.

%d blogueiros gostam disto: