OpenCV

OpenCV

Como backup da câmera pixy foi implementado um substituto baseado na biblioteca OpenCV que consiste um um compilado de funções que facilitam a implementação  de visão computacional.

Para reproduzir o papel da pixy, a imagem da RaspCam vai ser utilizada como entrada do algoritmo explicado a seguir. A princípio o algoritmo pode ser rodado no raspberry pi, porém as implicações de desempenho ainda estão para ser testadas.

O Algoritmo

O algoritmo é dividido em 6 etapas:

 

  • Adquirir o input de vídeo : Esta etapa consiste em detectar o input de vídeo através da função VideoCapture.cap(); , caso não exista um, o programa é abortado. Aqui também é feita uma conversão de tamanho e de tipo de imagem: caso seja RGB é convertida para HSV.   A imagem abaixo mostra o frame de input ja convertido para HSV.                                                                                                                   Original  
  • Criar janela de controle : Nesta etapa é criada a janela de controle que serve para mudar os critérios do filtro  de cor que aplicado a cada frame para separar a cor desejada.  Na imagem abaixo os controles estão filtrando a cor vermelha.                   Controle 
  • Loop principal : Essa etapa é responsável por adquirir um frame do input que vai ser utilizado nas próximas etapas.                                                                                            
  • Aplicação do filtro : Aqui é aplicado o filtro com os parâmetros retirados da janela de controle em tempo real. O filtro consiste em gerar uma matriz booleana onde as posições em True são os pixels que estavam dentro do critério de cor, saturação e valor.  A imagem abaixo mostra o resultado da aplicação do filtro no frame de input mostrado anteriormente.    Filtro
  • Inferir contornos : Nesta etapa é aplicado a função findContours() sobre a matriz booleana, como saída é obtido um vetor com os polígonos encontrados. A imagem abaixo mostra o resultado do processo.                            Contorno 
  • Inferir centro de massa : Para inferir o centro de massa dos polígonos retornados da etapa anterior é utilizada a função moments() a partir da qual são retiradas informações como área e posição do centro de massa. A imagem abaixo mostra o centro de massa encontrado para o polígono.                                                            Centro

 

 

Esse algoritmo já está implementado para receber várias cores assim como a pixy e tem condições de substitui-la em caso de falha sem alterar o fluxo normal do projeto.

 

 

 

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s