Skip to content

Gabriellgpc/gabriellgpc.github.io

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Contatos e Informações

Email: condadoslgpc@gmail.com
Github: github.io/gabriellgpc
Linkedin: linkedin.com/in/lgabrielpc
Lattes: lattes.cnpq.br/7552086880914030
Youtube: youtube.com/channel/UCGqW9GuMni6KTZkLF2dxu4g
Kaggle: kaggle/condados


Ainda estou organizando essa página... Por hora é apenas uma coletanea de alguns dos projetos que fiz ou que estou fazendo. No título do projeto eu deixo um link para o código fonte de cada um (então basta clicar no título do projeto).

Nota: Talvez este documento apresente alguns problemas de formatação, isso é devido principalmente ao fato de que a maior parte da documentação eu estou trazendo direto das minhas documentações em Latex e/ou Asciidoc(tor).


Machine Learning

"MNIST ("Modified National Institute of Standards and Technology") is the de facto “hello world” dataset of computer vision. Since its release in 1999, this classic dataset of handwritten images has served as the basis for benchmarking classification algorithms. As new machine learning techniques emerge, MNIST remains a reliable resource for researchers and learners alike.

In this competition, your goal is to correctly identify digits from a dataset of tens of thousands of handwritten images. We’ve curated a set of tutorial-style kernels which cover everything from regression to neural networks. We encourage you to experiment with different algorithms to learn first-hand what works well and how techniques compare."Kaggle.

In this competition, I wrote an algorithm to classify whether images contain either a dog or a cat. The training archive contains 25,000 images of dogs and cats (1 = dog, 0 = cat).Dogs vs Cats Competition

In this competition, the challenge is to build an algorithm to detect a visual signal for pneumonia in medical images. Specifically, the algorithm needs to automatically locate lung opacities on chest radiographs.

Computer Vision and Image Digital Processing

Implementação em C++ da operação de convolução com parâmetros adicionais (stride e padding). Criei uma classe Imagem, apenas para trabalhar com imagens em tons de cinza (poderia ter feito colorido também, sem grandes dificuldades a mais) e para carregar e salvar imagens da memória eu decidi trabalhar com o padrão PGM (Documento sobre o projeto Netpbm e os formatos de imagens definidos por eles.) que é o mais simples para implementar, embora ocupe muito espaço de memoria.

A função que implementa a convolução conv2D recebe como parâmetros:

  • Uma Imagem
  • kernel/máscara(prefiro o termo kernel): um vetor de float
  • f: tamanho do kernel (f x f)
  • s: stride, "saltos que o kernel dará durante a convolução" o padrão é 1
  • p: padding, quanto que a imagem original vai ser expandida antes de operar
  • same: boolean que se passado como true a imagem resultante possuirá as mesmas dimensões que a imagem de entrada, caso seja false (padrão) as dimensões da imagem de saída serão:

$width_{out} = floor(\frac{width_{in} + 2*p - f}{s} + 1)$

$height_{out} = floor(\frac{height_{in} + 2*p - f}{s} + 1)$

O caso sem usar padding e stride (caso "normal"):

$p = 0$, $s = 1$,

$width_{out} = width_{in}-f + 1$

$height_{out} = height_{in} - f + 1$

Não sei se vale a pena documentar para postar aqui ainda... Provavelmente vou deixar eles um pouco mais interessantes e fazer as versões em C++ antes de colocar um por um aqui.

O link leva para um blog que fiz para servir como documentação online das atividades que desenvolvi durante a disciplina de Processamento Digital de Imagens do Departamento de Engenharia de Computação e Automação (DCA) da UFRN, a disciplina foi ministrada pelo professor Dr. Agostinho de Brito Junior.

O link leva para um blog que fiz para servir como documentação online das atividades que desenvolvi durante a disciplina de Visão Computacional da UFRN, a disciplina foi ministrada pelo professor Dr.Rafael Beserra Gomes.

O título resumiu bem o que o programa faz, mas sendo um pouco mais específico, o programa recebe uma imagem e aplica um filtro de borramento que é mais forte em regiões de não borda e um mais suave em regiões de borda.

A transformada de Hough é um método comum para detecção de formas que são facilmente parametrizáveis (formas comuns: linhas e círculos). Geralmente essa transformada é utilizada após a etapa de pré-processamento de detecção de bordas.

O método consiste em mapear determinados pixeis da imagem numa determinada célula no espaço de parâmetros que definem a figura geométrica. Esse procedimento é repetido para toda a imagem e as células do espaço de parâmetros são incrementadas, servindo assim de indicadores da existência de uma determinada forma.

O trabalho apresenta uma implementação da transformada Hough para a identificação de quadrados pretos em imagens com fundo branco, o método usado é baseado na informação gradiente da imagem. Para isso foi feito a parametrização de um quadrado com a informação do centro do quadrado, tamanho do lado e orientação com relação ao eixo horizontal ($x_c, y_c, l, \theta$), por isso o espaço de configuração terá dimensão $4$. Para fazer o mapeamento entre o espaço de imagem e o de parâmetros foi utilizado a informação do gradiente da imagem e um ponto de borda, para com isso obter-se as normais do quadrado e com isso estimar os quatro parâmetros. Após o mapeamento/acumulo dos indicadores é feito uma etapa de filtragem dos quadrados, para melhorar a precisão da detecção.

Este projeto se trata da minha implementação para reproduzir o trabalho de arte com fios Art Nitka. O programa recebe uma imagem e gera, através de um processo por busca exaustiva, uma imagem feita apenas com linhas pretas em um fundo branco que tenta reproduzir a imagem original.

Robotics

Software desenvolvido pela Equipe Poti de futebol de robôs do Departamento de Computação e Automação(DCA) da UFRN voltado para o desenvolvimento de pesquisas em robótica e participações em competições de futebol de robôs (Aqui você pode ler mais a respeito de alguns dos trabalhos realizados).

Um pouco sobre as técnologias utilizadas no software:

  • Escrito em C e C++
  • Compilação gerenciada por meio de Makefile (usando bastante dos recursos "smart" do make, ficou quase tão simples quanto usar CMake :p)
  • Linux
  • Qt para fazer as interfaces gráficas, mas o sistema também roda direto pelo terminal, porém é necessário usar a interface pelo menos para fazer a calibração das cores (o sistema de visão utiliza segmentação por cores)
  • bluetooth para comunicação com o host(pc) e os robôs (frota de três robôs)
  • No mais é C++ para fazer: processamento de imagem, visão computacional, IA, controle ...
  • v4l2 (video for linux 2) utilizada para construir a biblioteca para controle da câmera (configuração e consulta dos parâmetros da câmera) e para captura de imagens em YUYV ou RGBG.

robos

software

Algumas informações prévias: A manipulação do sistema é feita via Terminal do Linux, tendo a interface gráfica apenas o módulo de calibração.

Simulação usando CoppeliaSim (antigo VREP), projeto em C++ (from scratch) de um planejador de caminhos baseado em campos potenciais. Source Code here. Obs.: Deixarei um relatório em PDF explicando o funcionamento geral do sistema.

Projeto em C++ de construção de uma grade de ocupação probabilística (from scratch). Source code here. Obs.: Deixarei um relatório em PDF explicando o funcionamento geral do sistema.

I lost my source code :'(, I will do a new version afterward. I made that project during my Self Driving Cars specialization from Coursera.

Demos:

Implementação em C++ de controladores cinemáticos clássicos (from scratch). Source code here

  • Seguidor de Caminho
  • Seguidor de Trajetória
  • Controle Estabilizando / Posição

Simulação usando CoppeliaSim e programa em C++ para identificação de colisão em espaço de configuração (from scratch!).

Obs.: Quando fiz o vídeo eu ainda estava aprendendo sobre o conteúdo, então acabei não explicando muito bem alguns pontos, mas a ideia geral está correta. Source code here.

Embedded Systems

Software embarcado (firmware) para os robôs da Equipe Poti de futebol de robôs 2020.

Estou organizando ainda essa página e a documentação, logo mais deixarei uma descrição melhor do projeto aqui e uma documentação lá :)

Projeto em Latex do Meu TCC no link do título do projeto :). E aqui é a apresentação (também um projeto Latex) que fiz para a defesa: Slide Apresentação.

Implementação de um esquema de controle do tipo feedforward/backward para controle das velocidades angulares dos motores de um mini robô com acionamento diferencial (acionamentos independentes/um motor por roda) com sensores (Encoders magnéticos) de baixa resolução.
Algumas das tecnologias utilizadas:

  • Filtro de Kalman: Foi utilizado como estimador de estado (faz uso do modelo do sistema/motor, sinal de entrada / pwm e leitura do sensor para fazer a melhor estimativa da velocidade de rotação do motor);
  • Linguagem de Programação C e ESP-SDK: Programei em C usando o kit de desenvolvendo (libs) da desenvolvedora do mesmo (ESP-SDK).

Graphics Computing

Implementação do algoritmo de renderização raytracing em C++ e usando openGL(criação da imagem rasterizada) e OpenMP(para processamento paralelo).

Vou documentar lá ainda e melhorar esta descrição... Se liga num vídeozinho massa de demostração dessa implementação: video de demostração.

Communication Systems

Biblioteca criada e mantida pelo laboratório de robótica do DCA. Fiz alguns algumas modificações para torna-la mais genérica (foi criada para ser usada no Futrobot)

Workshops

Material que criei para ministrar um workshop sobre a linguagem de programação python para o time de rocket design da UFRN (Potiguar Rocket Design) em 2020.

A ideia era mostrar e ensinar o básico (com práticas e demostrações) sobre ferramentas úteis para a realidade da grande maioria dos integrantes do time (estudantes de engenharia mecânica em sua maioria) como:

  • Ambiente Jupyter notebook / Colab
  • Python básico
  • Programação orientada a objetos com python
  • Numpy
  • Matplotlib
  • Scipy
  • Pandas

Otimização de Sistemas (estou testando compartilhar projetos feitos no Colab aqui ainda)

Nesse link eu compartilho um projeto que desenvolvi no ambiente Colab, esse projeto foi minha solução para a prova de uma disciplina de Otimização de Sistemas, o objetivo era resolver uma sequência de problemas de otimizações utilizando o método simplex. Eramos livres para escolher como implementar a solução, eu resolvi fazer em python e utilizando o ambiente jupyter-notebook.

"O Simplex permite que se encontre valores ideais em situações em que diversos aspectos precisam ser respeitados. Diante de um problema, são estabelecidas inequações que representam restrições para as variáveis. A partir daí, testa-se possibilidades de maneira a otimizar o resultado.

O uso mais comum do Simplex é para se maximizar um resultado, ou seja, encontrar o maior valor possível para um total. Problemas típicos para se resolver com o Simplex são os que buscam quantidades ideais de produtos a serem comercializados, com restrições referentes ao armazenamento e à fabricação dos mesmos. A ideia é isolar uma função como sendo o objetivo."Algoritmo Simplex - wiki

Assim como o projeto anterior esta foi minha solução para uma prova da disciplina de otimização (segunda avaliação), o objetivo foi resolver um problema de oferta e demanda usando o método simplex, ou seja, encontrar a configuração ótima de quantos produtos devem sair de um fornecedor X para um destino Y de forma a reduzir os custos da operação. Além disso, foi pedido para se realizar análises sobre os pontos críticos de algumas dadas funções convexas: encontrar os pontos críticos (derivada zero) e descobrir se esses pontos são pontos de mínimo, máximo ou nenhum dos dois por meio da análise da Hessiana da função.

Vou introduzir cada um deles aqui e criar uma documentação em cada um deles ainda.

Tutoriais de download, instalação e uso das principais ferramentas/tecnologias que uso para desenvolver

Linux

Comandos que me foram/são úteis e que não posso esquecer...

Python Virtual Environment

Básico sobre ambientes virtuais em python 3.

VSCode

Provavelmente vou deixar uma lista com o nome das extensões que eu gostei de utilizar com um overview sobre cada um.

Vim

Já fiz o tutorial algumas vezes mas sempre acabo navegando usando as setas -_-

Tenho até que atualizar lá e colocar um manual de instalação e configuração do ambiente ainda...