View on GitHub

Luís Gabriel Pereira Condados

Meu repositório de projetos

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

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:

$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:

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.

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

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:

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:

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…