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 e 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/ |
|
|
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/ |
|
O site mudará para essa aparência, deve se de novo clicar no ícone de download.
|
|
Logo após, aparecerá a opção da escolha do seu sistema operacional.
|
É 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 |
|
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.
|
Aguarde a conclusão
|
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.
|
O primeiro comando é o "activate 'nome da variável que você criou' ".
|
Caso estiver no MAC, antes do "activate" você deve colocar o "source".
|
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.
|
Preparando o PyCharm
Agora irei mostrar como preparar o PyCharm para programar em Python com a biblioteca OpenCV
Você deve ir no canto superior esquerdo e clicar em "File" > "New Project", para criar um no projeto.
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".
|
E então clique nos "..." para selecionar um interpretador.
|
|
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".
|
Caso essa notificação apareça, apenas pressione em "This Window".
|
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".
|
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):
- https://docs.opencv.org/master/d5/de5/tutorial_py_setup_in_windows.html
- https://www.learnopencv.com/install-opencv-4-on-windows/
- https://sites.google.com/site/luisfilipeap/tutorial-opencv-python/01
- https://solarianprogrammer.com/2016/09/17/install-opencv-3-with-python-3-on-windows/
Para MAC (instalação do OpenCV):
- https://www.pyimagesearch.com/2018/08/17/install-opencv-4-on-macos/
- https://docs.opencv.org/master/d0/db2/tutorial_macos_install.html
- https://robferguson.org/blog/2017/10/06/how-to-install-opencv-and-python-using-homebrew-on-macos-sierra/
Para Linux (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:
- https://www.learnopencv.com/install-opencv-4-on-raspberry-pi/
- https://www.pyimagesearch.com/2019/09/16/install-opencv-4-on-raspberry-pi-4-and-raspbian-buster/
- https://www.pyimagesearch.com/2018/09/26/install-opencv-4-on-your-raspberry-pi/
- https://linuxize.com/post/how-to-install-opencv-on-raspberry-pi/
Criando programa para detecção facial
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).
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
- #importando a biblioteca OpenCV
- import cv2
- #Criando um classificador
- classificador = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")
- #Definindo a fonte da letra que será imprimida na tela
- fonte = cv2.FONT_HERSHEY_SIMPLEX
- #Habilitando a WebCam conectada ao dispositivo
- camera = cv2.VideoCapture(0)
- #Loop para a detecção tempo real
- while 1:
- #Fazendo a leitura da imagem
- conectado, imagem = camera.read()
- #Convertendo a imagem para a escala de cinza
- imagemCinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)
- #Atribuindo as classificações a variável facesDetectadas
- facesDetectadas = classificador.detectMultiScale(imagemCinza,
- scaleFactor=1.5,
- minSize=(50, 50))
- #Nas faces dectadas, desenhar um retângulo e escrever Humano
- for (x, y, l, a) in facesDetectadas:
- cv2.rectangle(imagem, (x,y), (x+l, y+a), (0,0,255), 2)
- cv2.putText(imagem, 'Humano', (x, y + (a + 30)), fonte, 1, (0, 255, 255))
- cv2.imshow("Face", imagem)
- cv2.waitKey(1)
- camera.release()
- 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
- #Vazio
- #Comentário
- Este comando 'import' vem de importar, ele é utilizado em Python para importar alguma biblioteca
- #Vazio
- #Comentário
- 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.
- #Vazio
- #Comentário
- Definindo a fonte que usaremos mais pra frente no código.
- #Vazio
- #Comentário
- Criando uma variável 'camera' que irá receber alguma câmera conectada em seu dispostivo
- #Vazio
- #Comentário
- Criando um Loop infinito 'While True' para a detecção em tempo real utilizando a câmera.
- #Comentário
- 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().
- #Vazio
- #Comentário
- 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.
- #Vazio
- #Comentário
- 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.
- ScaleFactor é o fator escala na detecção.
- MinSize é o tamanho mínimo de pixels que o programa pode encontrar algum objeto.
- #Comentário
- Dentro das coordenadas das faces detectadas, faça:
- Desenhe um retângulo com as pontas nas coordenadas das faces detectadas
- Escreva 'Humano' utilizando a fonte citada na linha 9 em cada retângulo de detecção facial.
- #Vazio
- Função do OpenCV utilizada para mostrar na tela a imagem.
- Aguarde o pressionamento de alguma tecla do tecclado.
- Saia da função câmera.
- 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:
- http://note.sonots.com/SciSoftware/haartraining.html
- http://opencvuser.blogspot.com/2011/08/creating-haar-cascade-classifier-aka.html4
Resultados obtidos
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
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.
Dasaradh Makes, Youtube, https://www.youtube.com/watch?v=Dg-4MoABv4I, último acesso 24/04/2020 as 22:52.
Comentários
Postar um comentário