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
- Contatos e Informações
- Machine Learning
- Classificar: Olhos abertos ou Fechados
-
[Experiment Face Recognition](#experiment-face-recognition) - Digit Recognizer
- Classification Challenge - Dogs vs. Cats
- Working on: RSNA Pneumonia Detection Challenge
- Computer Vision and Image Digital Processing
- Filtragem Convolucional 2D
- Projetos básicos de Visão Computacional com OpenCV e Python
- Programas Desenvolvidos na Disciplina de Processamento Digital de Imagens
- Programas Desenvolvidos na Disciplina de Visão Computacional
- Filtro de Borramento Adaptativo
- Transformada Hough para Identificação de Quadrados
- Arte Com Fios
- Robotics
- Projeto: Futrobot - Software da Equipe Poti de Futebol de Robôs
- Path Planning Using Potential Field Algorithm and Occupancy Grid on the CoppeliaSim (VREP)
- Occupancy grid on the CoppeliaSim (VREP)
- Self Driving Car on Carla Simulator
- Path Follower, Position Controller and Trajectory Controller (Kinematic Controllers). Simulation on CoppeliaSim
- Identificação de Colisão em Espaço de Configuração
- Embedded Systems
- Graphics Computing
- Communication Systems
- Biblioteca BluetoothAction
- Workshops
- Otimização de Sistemas (estou testando compartilhar projetos feitos no Colab aqui ainda)
- Alguns dos Projetos que Estou Organizando para Publicar Aqui
- Tutoriais e Dicas
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
Classificar: Olhos abertos ou Fechados
Experiment| Face Recognition
Digit Recognizer
“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.
Classification Challenge - Dogs vs. Cats
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
Working on: RSNA Pneumonia Detection Challenge
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
Filtragem Convolucional 2D
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$
Projetos básicos de Visão Computacional com OpenCV e Python
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.
Programas Desenvolvidos na Disciplina de Processamento Digital de Imagens
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.
Programas Desenvolvidos na Disciplina de Visão Computacional
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.
Filtro de Borramento Adaptativo
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.
Transformada Hough para Identificação de Quadrados
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.
Arte Com Fios
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
Projeto: Futrobot - Software da Equipe Poti de Futebol de Robôs
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.
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.
Path Planning Using Potential Field Algorithm and Occupancy Grid on the CoppeliaSim (VREP)
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.
Occupancy grid on the CoppeliaSim (VREP)
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.
Self Driving Car on Carla Simulator
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:
Path Follower, Position Controller and Trajectory Controller (Kinematic Controllers). Simulation on CoppeliaSim
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
Identificação de Colisão em Espaço de Configuraçã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
Futrobot-firwmare
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 de Controle Embarcado para Robôs com Acionamento Diferencial e Encoders de Baixa Resolução
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 Raytracer em C++
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 BluetoothAction
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
Workshop: Python Overview
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)
Método Simplex em Python
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
Método Simplex: Problema Transporte e Análise de Funções Não Lineares
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.
Alguns dos Projetos que Estou Organizando para Publicar Aqui
Vou introduzir cada um deles aqui e criar uma documentação em cada um deles ainda.
Tutoriais e Dicas
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 -_-
Template ESP Project
Tenho até que atualizar lá e colocar um manual de instalação e configuração do ambiente ainda…