Visão Computacional em Sistemas Embarcados

Inteligência Artificial/Computacional com Detecção de objetos e faces utilizando um Raspberry, Windows, MAC e Linux


Introdução

Diante minhas pesquisas realizadas com visão computacional para a detecção de objetos (https://projetosengenhariamecatronica.blogspot.com/2020/03/utilizando-visao-computacional-para.html), obtive sucesso na realização deste processo, porém o desafio de fato está em utilizar esses algoritmos em um sistema embarcado, que possui de certa forma um poder de processamento bem inferior ao equipamento que foi utilizado nos testes anteriores.


Objetivo

O objetivo desta pesquisa está em melhorar um processo já existente no projeto, a detecção de objetos utilizando uma WebCam, o intuito dessa melhoria está em diminuir o tamanho da placa de processamento necessária para o uso do algoritmo, em vez de utilizar um notebook ou PC, usufruir de sistemas embarcados que possuo (Raspberry). O uso de um sistema mais inteligente, seja aplicando Inteligência Computacional ou Artificial, pode servir de grande ajuda no projeto, logo seus benefícios, aplicabilidades e viabilidades serão estudados a partir da pesquisa aqui realizada. Esse texto serve também como um grande tutorial para pessoas que se interessam na área de visão computacional, por isso irei ensinar os métodos utilizando o Windows, Mac, Linux e Raspbian.


Ferramentas utilizadas

  • Linguagem de programação Python Shell Script.
  • Biblioteca OpenCV (biblioteca para tratamento de imagem).
  • Recurso Haar Cascade (utilizado para tratamento de imagens em visão computacional)
  • IDEs (ambiente de desenvolvimento) Pycharm, Thonny e Anaconda.
  • Uma placa Raspberry Pi 3 (Sistema embarcado).
  • Uma Webcam para visão computacional.
  • Conexão estável com Internet e energia (podendo ser baterias ou tomadas).
  • Notebook com suporte para visão computacional.
  • Sistema operacional Windows, Linux, MAC e Raspbian.

Instalação das ferramentas

Para a instalação não é necessário um aprofundamento em nenhuma linguagem de programação, o processo foi feito por mim, obtendo sucesso no dia 09/04/2020, ou seja, futuramente, é possível que o tutorial esteja desatualizado e causando erros.
Não é necessário instalar as ferramentas PyCharm e Anaconda no windows, MAC e linux, esses tutoriais servem apenas se você não for trabalhar com um Raspberry.

Instalação das IDEs PyCharm e Anaconda para Windows, Mac e Linux


Irei começar ensinando a instalação das ferramentas no Windows 10, Linux e MAC, inicialmente iremos instalar o PyCharm:

Essa IDE é muito útil para desenvolvimento em Python, vale ressaltar que sua instalação não é realmente necessária para o processo em si, mas facilita de grande forma na programação.

Site PyCharm, https://www.jetbrains.com/pycharm/

Você deve entrar no site do PyCharm e clicar no ícone de download em preto.

Site PyCharm, https://www.jetbrains.com/pycharm/

Após clicar no ícone do download, a página é redirecionada para esta apresentada em baixo, você deve escolher seu sistema operacional, Windows, Linux ou MAC.


Site PyCharm, https://www.jetbrains.com/pycharm/
O arquivo tem 267 megas e no caso do Google Chrome, ele aparecerá na parte de baixo do site.


Imagem de Gustavo Yoshimi Yamashita


 A instalação deve seguir os seus gostos como administrador e usuário, porém a opção de ativar o PyCharm para o PATH deve ser ativada (caso apareça a opção). Segue um Link com um tutorial completo da instalação.

Agora a instalação do Anaconda:

O Anaconda é uma IDE muito utilizada no desenvolvimento de programas para cientistas de dados e AI ( inteligência artificial), sua instalação também é opcional.

Acessando o site do Anaconda primeiramente você pode observar a opção de download.

Site Anaconda, https://www.anaconda.com/

Na parte superior Direita.

Site Anaconda, https://www.anaconda.com/


O site mudará para essa aparência, deve se de novo clicar no ícone de download.

Site Anaconda, https://www.anaconda.com/

Site Anaconda, https://www.anaconda.com/

Logo após, aparecerá a opção da escolha do seu sistema operacional.

Site Anaconda, https://www.anaconda.com/

É aconselhável a instalação da versão 3.7 do Python.


Imagem de Gustavo Yoshimi Ymashita

Com o download concluído, segue apenas a instalação com suas preferências, segue o Link de tutorial de como instalar.

Instalação da IDE Thonny para o Raspberry


Para o desenvolvimento no Raspberry, aconselho a instalção desse sistema operacional, Raspbian, pois possui já  a IDE Thonny e o Python instalado.

Site Raspberry, https://www.raspberrypi.org/documentation/installation/installing-images/

Segue um Link para a instalação completa do Raspbian no Raspberry.

Instalando a biblioteca OpenCV no Windows, MAC e Linux


Agora a instalação da biblioteca OpenCV, muito utilizada para o tratamento de imagens e visão computacional, irei começar com a instalação no windows, MAC e Linux, depois passo para o Raspberry.

Primeiramente você abrirá a IDE do Anaconda no qual você instalou usando os tutoriais anteriores.


Entrando no Anaconda você deve ir no lado esquerdo na opção "Environments".

Print Screen do Autor, App Anaconda


Print Screen do Autor, App Anaconda



Print Screen do Autor, App Anaconda

Depois deve clicar na opção "Create" para criar uma nova variável de ambiente.


De o nome que desejar e cliquem em "Create" em verde.

Print Screen do Autor, App Anaconda

Aguarde a conclusão


Print Screen do Autor, App Anaconda



Agora você deve acessar a pasta onde foi realizado o download do Anaconda, lá você encontrará um arquivo chamado "Anaconda Prompt " abra-o, caso estiver no MAC ou Linux abra o terminal para eles respectivamente.


Print Screen do Autor


O primeiro comando é o "activate 'nome da variável que você criou' ".

Print Screen do Autor


Caso estiver no MAC, antes do "activate" você deve colocar o "source".

Print Screen do Autor


Após isso, você deve colocar o seguinte comando para baixar o OpenCV, irá aparecer uma pergunta se você deseja realmente baixar o arquivo, digite "y" e pressione Enter.

Print Screen do Autor

Depois basta verificar se a instalação foi feita com sucesso (no meu caso, eu já possuo as bibliotecas instaladas, por isso não mostrei o código rodando), aconselho reiniciar o Anaconda.

Print Screen do Autor, App Anaconda


Preparando o PyCharm

Agora irei mostrar como preparar o PyCharm para programar em Python com a biblioteca OpenCV

Print Screen do Autor, App PyCharm




Você deve ir no canto superior esquerdo e clicar em "File" > "New Project", para criar um no projeto.


Print Screen do Autor, App PyCharm


Print Screen do Autor, App PyCharm


Em seguida você deve clicar em "Project interpreter", na setinha, caso as opções estejam esconidas. Assinale a opção "Existing interpreter".

Print Screen do Autor, App PyCharm


E então clique nos "..." para selecionar um interpretador.

Print Screen do Autor, App PyCharm

Print Screen do Autor, App PyCharm



Escolha do lado esquerdo a opção "Conda Environmente" e então verifique se no "Interpreter" está o nome no qual você criou no Anaconda.

Selecione a opção "Make available to all projects".

Print Screen do Autor, App PyCharm


Caso essa notificação apareça, apenas pressione em "This Window".

Print Screen do Autor, App PyCharm


Para criar um arquivo em Python basta seguir isso, clicando com o lado direito do mouse no nome da pasta onde está o projeto, "New" > "Python File".

Print Screen do Autor, App PyCharm


Pronto, agora você já pode programar em Python sem nenhum problema, caso tenha ocorrido algum erro siga esses links para instalações com métodos diferentes.

Para Windows (instalação do OpenCV):
Para MAC (instalação do OpenCV):

Instalação do OpenCV no Raspberry

O processo de instalação do OpenCV no Raspberry é bem demorado e complicado, isso tomaria muito espaço no texto, então deixaria o link do site no qual eu acompanhei para fazer a minha instalação, Link.
Segue também links alternativos caso o primeiro não funcione:
A detecção facial tem sido de grande utilidade em diversos setores, desde segurança até entretenimento, não há limites para o seu uso, a cada dia que se passa mais inovações tecnológicas  surgem aplicando o princípio da detecção de faces. Para a detecção facial, usarei uma técnica que utiliza o  Haar Cascade e o OpenCV (mencionados em Ferramentas).

Haar Cascade

A definição pode ser encontrada no Wikipedia, "Traduzido do inglês-Recursos semelhantes a Haar são recursos de imagem digital usados ​​no reconhecimento de objetos. Eles devem seu nome à sua similaridade intuitiva com as wavelets Haar e foram usados ​​no primeiro detector de faces em tempo real.". Basicamente, o Haar Cascade é muito utilizado para o tratamento de imagens, para fins de detecção de objetos.
Os aquivos no formato XML de Haar Cascade são a base que usaremos para a detecção de determinado objetos, iniciarei os testes utilizando arquivos haars que já estão prontos (alguém já teve o trabalho de fazer alguns).

Arquivos Haarcascades podem ser encontrados pela internet, irei passar esse link do GitHub no qual foi postado vários exemplares. Ao acessar o depositório, é notável a presença de vários arquivos no formato xml e são esses arquivos no qual a máquina irá analisar os padrões (features).



OpenCV, Print do site GITHUB

Escolha o arquivo que mais te interessar, existe para a detecção de faces, olhos, corpo completo, sorriso, entre outros (os arquivos estão em inglês). Eu irei mostrar os resultados utilizando a detecção mais famosa, a de faces (haarcascade_frontalface_alt.xml). Baixado então o arquivo, basta seguir para a programação em Python.

Programando em Python


  1. #importando a biblioteca OpenCV
  2. import cv2

  3. #Criando um classificador
  4. classificador = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")

  5. #Definindo a fonte da letra que será imprimida na tela
  6. fonte = cv2.FONT_HERSHEY_SIMPLEX

  7. #Habilitando a WebCam conectada ao dispositivo
  8. camera = cv2.VideoCapture(0)

  9. #Loop para a detecção tempo real
  10. while 1:
  11. #Fazendo a leitura da imagem
  12. conectado, imagem = camera.read()

  13. #Convertendo a imagem para a escala de cinza
  14. imagemCinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)

  15. #Atribuindo as classificações a variável facesDetectadas
  16. facesDetectadas = classificador.detectMultiScale(imagemCinza,
  17. scaleFactor=1.5,
  18. minSize=(50, 50))
  19. #Nas faces dectadas, desenhar um retângulo e escrever Humano
  20. for (x, y, l, a) in facesDetectadas:
  21. cv2.rectangle(imagem, (x,y), (x+l, y+a), (0,0,255), 2)
  22. cv2.putText(imagem, 'Humano', (x, y + (a + 30)), fonte, 1, (0, 255, 255))

  23. cv2.imshow("Face", imagem)
  24. cv2.waitKey(1)
  25. camera.release()
  26. cv2.destroyAllWindows

O leitor pode simplesmente copiar e colar o código na IDE PyCharm que tudo funcionará corretamente (caso ocorra algum erro, deixe nos comentários) caso tenha instalado as ferramentas e bibliotecas corretamente.

Explicando o código

  1. #Vazio
  2. #Comentário
  3. Este comando 'import' vem de importar, ele é utilizado em Python para importar alguma biblioteca
  4. #Vazio
  5. #Comentário
  6. Foi criado uma variável chamada 'classificador' que recebe a função CascadeClassifier do OpenCV, responsável pela classificação de padrões na imagem.
  7. #Vazio
  8. #Comentário
  9. Definindo a fonte que usaremos mais pra frente no código.
  10. #Vazio
  11. #Comentário
  12. Criando uma variável 'camera' que irá receber alguma câmera conectada em seu dispostivo
  13. #Vazio
  14. #Comentário
  15. Criando um Loop infinito 'While True' para a detecção em tempo real utilizando a câmera.
  16. #Comentário
  17. Para a leitura da imagem é passado qual variável está contida o dispositivo de gravação, no nosso caso a 'camera'. a leitura dessa linha poderia ser feita assim, variavel_imagem_gravada = 'variavel_da_camera'.read().
  18. #Vazio
  19. #Comentário
  20. Atribuindo à variável 'ImagemCinza' a imagem capturada da câmera em escalas de cinza, isso deve ser feito pois o haarcascade trabalha com pixels na escala de cinza.
  21. #Vazio
  22. #Comentário
  23. Nessa linha, é atribuído na variável 'facesDetectadas' todos os objetos detectados pelo classificador (no meu caso, a face). Ela recebe a 'imagemCinza', pois é nessa imagem que o programa tentará encontrar os padrões.
  24. ScaleFactor é o fator escala na detecção.
  25. MinSize é o tamanho mínimo de pixels que o programa pode encontrar algum objeto.
  26. #Comentário
  27. Dentro das coordenadas das faces detectadas, faça:
  28. Desenhe um retângulo com as pontas nas coordenadas das faces detectadas
  29. Escreva 'Humano' utilizando a fonte citada na linha 9 em cada retângulo de detecção facial.
  30. #Vazio
  31. Função do OpenCV utilizada para mostrar na tela a imagem.
  32. Aguarde o pressionamento de alguma tecla do tecclado.
  33. Saia da função câmera.
  34. Destrua todas as janelas abertas pelo OpenCV.

Imagem própria do autor, IDE PyCharm



Este código não se limita apenas para a detecção de faces, você pode utilizar qualquer arquivo xml que encontrar, mas, caso não encontre algum pela internet, criar um não é uma tarefa difícil, apenas trabalhosa.

Como criar um arquivo Haar Cascade .xml

Para criar o um arquivo XML próprio, com o intuito de criar um detector de objetos em seu projeto, você pode acessar esse Link do Youtube no qual eu utilizei também (Usuários Windows).

Segue agora Links para o sistemas operacional Linux:


Vídeos e Fotos








Imagem do Autor, Gustavo Yoshimi Yamashita

Conclusões

Espero que todos tenham compreendido cada etapa aqui mostrada e ensinada, essas técnicas de Visão Computacional estão sendo utilizadas no projeto Beach Cleaner 2.0 (Link), no qual conseguiu seu avanço seguindo links e tutoriais de forma gratuita, logo, espero poder ajudar outros projetos também com esse tutorial.
Qualquer dúvida ou até mesmo sugestões, entre em contato com o meu Email: gustavo.yamashita@outlook.com ou pelo meu LinkedIn: https://www.linkedin.com/in/gustavo-yamashita/.






Referências Bibliográficas

Site WIKIPEDIA, https://en.wikipedia.org/wiki/Haar-like_feature, último acesso 24/04/2020 as 22:48.

ALATORTSEV, Michael, https://www.alatortsev.com/2018/09/05/installing-opencv-3-4-3-on-raspberry-pi-3-b/, último acesso 24/04/2020 as 22:51.

Dasaradh Makes, Youtube, https://www.youtube.com/watch?v=Dg-4MoABv4I, último acesso 24/04/2020 as 22:52.








Comentários

Postagens mais visitadas deste blog

Etapas do Projeto BeachCleaner