Skip to content

Software em Python para uma iniciação científica para a UFABC. O algoritmo consiste em medir o tempo e posição de um peso preso por um paraquedas.

License

Notifications You must be signed in to change notification settings

Pixuca/RocketIC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RocketIC - Documentação

O algoritmo consiste em detectar um paraquedas em queda e mostrar sua posição durante um intervalo de quadros.

    Funcionamento

    Para a execução deste algoritmo, são necessários os seguintes componentes:




    Arquivos e diretórios

  1. main.py

      Neste arquivo, encontramos o coração do nosso projeto, onde obtemos a criação de uma máscara a partir do vídeo da pasta src. O arquivo main continua em funcionamento até que o vídeo acabe, ou até que a tecla 'q' seja pressionada.


      Para construirmos a máscara que deixa (praticamente) apenas o paraquedas à mostra, é necessário criar um range de cores que serão detectadas no vídeo. Para isso, criamos as trackbars, onde cada uma representa um valor para low e high de cada valor do HSV (hue, sturation, value). Vale ressaltar que, na última atualização, esses valores podem ser trocados durante a execução do algoritmo, fazendo com que as mudanças sejam vistas em tempo real e o valor atual das barras é o recomendado para o vídeo de testes que utilizamos. Após a criação da máscara, o algoritmo exibirá as duas janelas, o frame com os filtros aplicados e as barras para alterações do range de cores e a máscara, ambos em sua resolução nativa.


      Para que obtenhamos uma execução não tão longa, o sistema de varredura funciona apenas a cada quatro quadros do vídeo e a partir do vigésimo frame. A varredura percorre toda a imagem preta e branca da máscara em busca de valores diferentes de zero, sendo esses detectados como o paraquedas, ou ruídos, dependendo da maneira como o filtro foi inserido. Dentro dessa condicional, dois laços, um dentro do outro, são iniciados, o primeiro contendo o valor da resolução do vídeo em Y e o segundo contendo o valor da resolução do vídeo em X, respectivamente.


      A variável pxValue é equivalente ao valor do pixel atual da máscara, sendo assim, caso pxValue seja diferente de zero e as variáveis de frames sejam iguais, o algoritmo entra na condicional da criação da base de dados para os vetores de posição posX e posY. Para esta primeira condicional, o único critério é o tamanho dos vetores de poisção. Caso eles tenham menos de dez índices, eles receberão os valores atuais de X e Y. A partir de dez índices para cada vetor, novos critérios de condicionais são atribuídos.


      Assim, entramos no cálculo da diferença. Este cálculo serve para que as curvas do gráfico final não destoem tanto do valor anterior e tenham valores mais próximos com a real distância entre os pontos.


      Para a próxima condicional, temos: caso os valores atuais de X e Y sejam maiores que os valores anteriores de X e Y , a diferença é calculada pela subtração do valor atual menos o valor anterior. Após o cálculo, o valor da conta (n-1) + (n-(n-1)/2) é adicionado aos vetores de posição. Após o cálculo, o valor do quadro do vídeo, da posição em X e da posição em Y são adicionados ao arquivo coords.txt. Variáveis K e frame_atual têm seus valores aumentados em 1. K é o valor do índice atual da base de dados para as comparações dos vetores de X e Y.


      A segunda condicional, na sequência é o contrário da condição anterior (caso o valor anterior seja maior que o valor atual, tanto para X quanto para Y). A diferença também é calculada de forma invertida, com o valor maior subtraindo o valor menor. Após o cálculo, o processo de finalização da condicional é o mesmo.


      A função numpy.savetxt salva, a cada quatro quadros, a imagem em texto com base na máscara. O arquivo salvo em questão é um txt com valores 0 e 255, onde 255 é a posição do paraquedas e 0 são os pontos nulos da imagem.


      Ao final, temos o cálculo do delta para o tempo, resultando no tempo de execução total do algoritmo. Os índices 0 e 1 do vetor posY são zerados, pois não conseguimos remover os ruídos iniciais da imagem devido a cor do chão ser parecida com a cor do paraquedas.


      Após o cancelamento manual dos ruídos iniciais, o gráfico é construído e tem sua base nos vetores posX e posY, vale ressaltar que o tamanho dos vetores tem que ser igual para que o gráfico seja mostrado.


  2. coords.txt

    O arquivo de coordenadas é dividido em três colunas, sendo elas, respectivamente, F (frames), X e Y. Ao final do arquivo, consta o tempo total da execução do programa. Os dados são coletados pelo arquivo main.py.


  3. ./src

    O diretório src conta com os vídeos utilizados para os testes do algoritmo, sendo essa a pasta onde os vídeos que serão usados devem ser alocados.


  4. ./data

    O diretório data armazena os arquvios de texto para as matrizes binárias a cada quatro quadros da varredura. Para visualizar o paraquedas nesses arquivos, é recomendável utilizar o comando de busca em texto e digitar 255 para que os valores encontrados sejam grifados, facilitando a visualização. Cada arquivo é nomeado com o número do quadro em que foi criado. O diretório é apagado e recriado sempre que o algoritmo é executado. Caso o diretório não exista, ele será criado automaticamente pelo algoritmo.


  5. Possíveis próximas atualizações

    Diminuição do tempo de execução; Utilização de outras linguagens para a parte de laços.

About

Software em Python para uma iniciação científica para a UFABC. O algoritmo consiste em medir o tempo e posição de um peso preso por um paraquedas.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages