Arquitetura da Solução
Este projeto tem como objetivo capturar imagens de árvores em diferentes áreas utilizando drones, processar essas imagens através de um modelo de visão computacional (YOLO) e retornar a quantidade de árvores identificadas em cada imagem.

Visão Geral
A arquitetura da solução é dividida em várias camadas e componentes que interagem para fornecer uma solução robusta e escalável. A seguir, descrevemos os principais componentes e o fluxo de dados entre eles.
Camadas e Componentes
1. Frontend
- Streamlit: Utilizado para construir a interface gráfica do usuário (GUI), onde os usuários podem visualizar e interagir com os resultados. Streamlit é responsável por receber entradas do usuário e exibir os resultados das análises feitas pelo modelo.
 
2. Backend
- Firebase: Responsável pela autenticação dos usuários que acessam a aplicação.
 - Kong: Atua como uma API Gateway, gerenciando o tráfego de entrada, assegurando a segurança e gerenciando o roteamento de requisições entre os serviços.
 - Kafka: Utilizado como sistema de mensageria, garantindo a escalabilidade e a robustez na comunicação entre os serviços. Após a execução do modelo YOLO, os resultados são enviados para Kafka para evitar sobrecarregar o banco de dados.
 - PostgreSQL: Base de dados utilizada para armazenar os resultados finais das previsões feitas pelo modelo, incluindo detalhes das áreas de terra analisadas. O armazenamento é realizado após os resultados serem processados pelo serviço que consome as mensagens da fila Kafka.
 
3. ETL (Extract, Transform, Load)
- Polars: Biblioteca de manipulação de dados usada para o processamento eficiente de grandes volumes de dados. Aqui, as imagens são processadas e transformadas antes de serem enviadas para o modelo de previsão.
 - Rust: Utilizado para construir pipelines de ETL robustos e de alto desempenho. O pipeline em Rust busca as imagens armazenadas no bucket S3, processa essas imagens e executa o modelo YOLO para identificar as árvores.
 
4. Edge Layer
- Go: Linguagem utilizada para criar a camada de borda que se comunica diretamente com dispositivos embarcados e com o pipeline de ETL. Esta camada recebe as imagens capturadas pelos drones e as envia para o pipeline de processamento.
 
5. Embarcado
- Raspberry Pi: Dispositivo embarcado utilizado para capturar as imagens no campo. Ele se comunica com a camada de borda para enviar as imagens capturadas.
 - Rust: Também utilizado no Raspberry Pi para gerenciar a captura de imagens e a comunicação com a camada de borda. A escolha do Rust deve-se ao seu alto desempenho e controle de baixo nível sobre o hardware.
 
Fluxo de Dados
- Captura de Imagem: O drone, equipado com um Raspberry Pi, captura as imagens das áreas de interesse. Essas imagens são processadas pelo dispositivo Raspberry Pi e enviadas para a camada de borda.
 - Envio para ETL: A camada de borda (Go) recebe as imagens e as envia para o pipeline de ETL.
 - Processamento ETL e Execução do Modelo YOLO: As imagens são processadas utilizando Polars e Rust. Em seguida, o modelo YOLO é executado para identificar as árvores nas imagens.
 - Envio para Kafka: Os resultados das previsões feitas pelo YOLO são enviados para a fila Kafka para evitar sobrecarregar o banco de dados.
 - Armazenamento no Banco de Dados: Um serviço consome as mensagens da fila Kafka e armazena os resultados no banco de dados PostgreSQL.
 - Exibição dos Resultados: O frontend (Streamlit) exibe a quantidade de árvores identificadas em cada área analisada, com base nas previsões armazenadas.
 
Considerações Finais
Esta arquitetura foi desenhada para garantir a escalabilidade, segurança e eficiência no processamento e análise das imagens capturadas por drones. O uso de tecnologias como Rust, Go, Kafka, PostgreSQL e do modelo YOLO assegura que o sistema possa lidar com grandes volumes de dados e requisições em tempo real, enquanto gerencia eficientemente o fluxo de dados para evitar sobrecargas.