Skip to content

RamonCintas/Eagle-Vision

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Idiomas

Ícone da bandeira do Brasil. Clique para acessar o conteúdo em Português. Ícone da bandeira da America. Clique para acessar o conteúdo em Inglês.

🌐 Apresentação de slides do projeto

Ícone de play azul no centro, com texto "Apresentação de slides do projeto" acima, em um fundo geométrico azul escuro. Clique para iniciar a apresentação.

Descrição da Imagem Esta imagem contém um ícone de "play" azul no centro, indicando o início de uma apresentação de slides do projeto. O fundo possui formas geométricas em tons de azul escuro, com o texto "Apresentação de slides do projeto" no topo. Serve para guiar o usuário a clicar e iniciar a apresentação.


Clique aqui para visualizar o índice

🔹 🌐 Apresentação de slides do projeto

🔹 💡 Sobre o projeto

🔹 📊Status do projeto

🔹 🚀 Resultado

🔹 🧱 Estrutura de arquivos/pastas

🔹 📐 Desenho do sistema

🔹 🏗️ Estrutura da Arquitetura e fluxo de interação

🔹 ⚔️ Tecnologias

🔹 📜 Glossário

🔹 📋 Referências

🔹 📝 Autores

🔹 ⚖️ Licença

💡 Sobre o projeto

⚡ O Eagle Vision é uma API REST em Python que recebe imagens de notas fiscais eletrônicas via POST. Utilizando o API Gateway da AWS, a API armazena as imagens em um bucket S3 e aciona uma função AWS Lambda para transcrever os dados com o Amazon Textract. Os elementos extraídos são organizados usando técnicas de processamento e refinados com uma Large Language Model (LLM). Os resultados, formatados em JSON, também são armazenados em um bucket S3 e enviados como resposta para o usuário. Além disso, o projeto integra AWS CloudWatch para monitorar e registrar logs das operações, garantindo escalabilidade e eficiência na nuvem AWS.


📊 Status do projeto

Note

☁️ Em produção na AWS

Tip

🔎 Qualquer feedback entrar em contato com os desenvolvedores


🚀 Resultado

Important

🛰️ Projeto concluído

Caution

⛔ Após a apresentação o projeto será excluído da aws para não gerar custo

Logotipo do YouTube
Descrição da Imagem Esta imagem contém o logotipo do YouTube em movimento, sugerindo que o usuário pode clicar para assistir ao vídeo do projeto. O logotipo está centralizado, e o GIF cria uma sensação de interatividade. Ao clicar na imagem, o usuário será redirecionado para o vídeo do projeto no YouTube.

🧱 Estrutura de arquivos/pastas

/Eagle-Vision
|
├── /docs                                           # Pasta para documentação do projeto.
|   └── passo-a-passo-aws-projeto.pdf               # Arquivo PDF com as instruções para configurar o ambiente AWS.
|
├── /src                                            # Diretório principal para o código-fonte.
|   ├── /Lambda-Eagle-Vision-API                    # Pasta com o código do Lambda para a API.
|   |   ├── /controller                             # Pasta para controladores.
|   |   |    └── lambda_controller.py               # Arquivo controlador da função Lambda.
|   |   |
|   |   ├── /model                                  # Pasta para modelos de dados.
|   |   |   └── jsondata_model.py                   # Arquivo de modelo de dados para manipulação de JSON.
|   |   |
|   |   ├── /service                                # Pasta para serviços.
|   |   |   ├── decoder_service.py                  # Serviço para decodificação de dados, manipulação de arquivos.
|   |   |   ├── preprocessing_service.py            # Serviço para pré-processamento da imagem.
|   |   |   ├── refinement_service.py               # Serviço de processamento e refinamento dos dados extraídos.
|   |   |   ├── s3_service.py                       # Serviço para integração e manipulação de arquivos no S3.
|   |   |   └── textract_service.py                 # Serviço para extração de texto usando Amazon Textract.
|   |   |
|   |   └── lambda_function.py                      # Função principal Lambda.
|   |
|   ├── /Eagle-Vision-Swagger                       # Pasta com a documentação Swagger da API.
|   |   ├── /assets                                 # Recursos estáticos, como imagens e arquivos CSS, para a documentação.
|   |   |   ├── /css                                # Arquivos CSS para estilizar a documentação Swagger.
|   |   |   |   ├── index.css                       # Arquivo CSS principal.
|   |   |   |   └── swagger-ui.css                  # CSS para a interface do Swagger UI.
|   |   |   └── /images                             # Imagens utilizadas na documentação.
|   |   |       ├── aws.gif                         # Imagem animada representativa da AWS.
|   |   |       ├── favicon-16x16.png               # Ícone de 16x16 pixels.
|   |   |       └── favicon-32x32.png               # Ícone de 32x32 pixels.
|   |   |
|   |   ├── /controller                             # Definições de controladores no Swagger.
|   |   |   └── /js                                 # Arquivos JavaScript para inicialização do Swagger.
|   |   |       ├── swagger-initializer.js          # Inicializador do Swagger.
|   |   |       ├── swagger-ui-bundle.js            # Bundle de arquivos JavaScript para o Swagger UI.
|   |   |       └── swagger-ui-standalone-preset.js # Configurações autônomas do Swagger UI.
|   |   |
|   |   ├── /model                                  # Definições de modelos de dados no Swagger.
|   |   |   └── /openapi                            # Arquivos de especificação OpenAPI.
|   |   |       ├── openapi.json                    # Arquivo JSON com a especificação da API.
|   |   |       └── openapi.txt                     # Arquivo de texto com notas adicionais para a especificação OpenAPI.
|   |   |
|   |   └── index.html                              # Página inicial da documentação Swagger.
|
├── /assets                                         # Pasta que contém arquivos de mídia e outros recursos usados na aplicação.
│   └── /dataset                                    # Subpasta específica para armazenar o conjunto de dados utilizadas no projeto.
|   |   └── /NFs.zip                                # Arquivo compactado com imagens de notas fiscais.
|   |
│   └── /imagens                                    # Subpasta específica para armazenar imagens utilizadas no projeto.
|   |   └── /readme                                 # Subpasta que contém imagens utilizadas especificamente no README versão português e inglês.
|   |       ├── aws.gif                             # Arquivo de imagem da apresentação da arquitetura aws em português.
|   |       ├── aws-en.gif                          # Arquivo de imagem da apresentação da arquitetura aws em inglês.
|   |       ├── compassuol.jpg                      # Arquivo de imagem da CompassUOL.
|   |       ├── trello.gif                          # Arquivo de imagem do quadro do trello.
|   |       ├── youtube-logo.gif                    # Arquivo de imagem da logo do youtube.
|   |       ├── youtube-logo-en.gif                 # Arquivo de imagem da logo do youtube em inglês.
|   |       ├── sistema.svg                         # Arquivo de imagem do diagrama de desenho do sistema em português.
|   |       ├── sistema-en.svg                      # Arquivo de imagem do diagrama de desenho do sistema em inglês.
|   |       ├── logo-projeto-en.gif                 # Arquivo de imagem da apresentação do projeto em inglês.
│   |       └── logo-projeto.gif                    # Arquivo de imagem da apresentação do projeto em português.
|   |
│   └── /passo-a-passo-aws                          # Subpasta específica para armazenar os arquivos citados na documentação de configuração da aws.
|       ├── /v1                                     # Pasta para a versão 1 dos arquivos.
|       |   ├── data.json                           # Arquivo de json para exemplo de resposta ao usuário.
|       |   ├── Eagle-Vision-API.zip                # Arquivo zip da API Eagle Vision v2.
|       |   ├── Lambda-Eagle-Vision-API.zip         # Arquivo zip da API Lambda Eagle Vision v1.
|       |   ├── NFCEmodelo.jpg                      # Arquivo de imagem NFCEmodelo.
|       |   └── nota-fiscal.jpg                     # Arquivo de imagem para teste do projeto tirada do dataset.
|       |
|       └── /v2                                     # Pasta para a versão 2 dos arquivos.
|           ├── /lambda                             # Subpasta para código Lambda.
|           |    └── lambda-ealge-vision-api.zip    # Arquivo zip da API Lambda Eagle Vision versão final.
|           └── /layer                              # Subpasta para biblioteca.
|               └── Lambda Libraries.zip            # Arquivo zip das bibliotecas usadas no Lambda.
|
├── README-EN.md                                    # Arquivo para documentação do projeto em inglês.
├── README.md                                       # Arquivo para documentação do projeto em português.
├── CODE_OF_CONDUCT.md                              # Arquivo de documento que estabelece as diretrizes de conduta para a comunidade do projeto.
├── LICENSE                                         # Arquivo de documento que descreve os termos da licença sob a qual o projeto é distribuído.
├── SECURITY.md                                     # Arquivo de documento que aborda as práticas e políticas de segurança do projeto.
└── .gitignore                                      # Arquivo para indicar ao Git quais arquivos/tipos de arquivos não devem ser rastreados.


📐 Desenho do sistema

graph TD;
    %% Projeto Eagle Vision
    subgraph Eagle Vision

        %% Interação do Usuário
        U[Usuário] -->|Consulta endpoint| APIGateway[AWS API Gateway]

        %% API Gateway Chamando Lambda
        APIGateway -->|Aciona| Lambda[AWS Lambda Function]

        %% Lambda Processa a Imagem e Invoca Textract
        Lambda -->|Imagem para texto| Textract[Amazon Textract]
        Lambda -->|Armazena imagem e dados extraídos| S3[Amazon S3 Bucket]

        %% Textract Analisa e Retorna os Dados
        Textract -->|Texto extraído| Lambda

        %% Lambda Grava Logs e Retorna Resposta ao Usuário
        Lambda -->|Grava logs dos resultados| CloudWatch[Amazon CloudWatch]
        Lambda -->|Retorna resultado| APIGateway
        APIGateway -->|Responde com JSON| U

    end

    %% Estilos de classe
    classDef aws fill:#FF9900,stroke:#232F3E,stroke-width:2px,color:white;
    classDef lambda fill:#FF9900,stroke:#232F3E,stroke-width:2px,color:white;
    classDef user fill:#000000,stroke:#232F3E,stroke-width:2px,color:white;

    class U user;
    class APIGateway,Textract,S3,CloudWatch aws;
    class Lambda lambda;

Loading

Warning

🚧 GitHub mobile não tem suporte para mermaid, segue abaixo o diagrama do desenho do sistema

Fluxograma do sistema AWS, representando a interação entre serviços como API Gateway, Lambda, Textract, S3 e CloudWatch, com o usuário no topo.

Descrição da Imagem Este fluxograma descreve um sistema baseado na AWS:
  • O Usuário inicia a interação ao consultar um endpoint.
  • A solicitação passa pelo AWS API Gateway, que responde com JSON e aciona uma AWS Lambda Function.
  • A Lambda Function faz chamadas para três serviços:
    • Amazon Textract: Converte imagem para texto.
    • Amazon S3 Bucket: Armazena as imagens e os dados extraídos.
    • Amazon CloudWatch: Grava logs dos resultados.

O fluxo é representado por setas conectando os componentes principais, o usuário está disposto em uma caixa preta e os outros estão dispostos em caixas laranja, com o fundo em cinza escuro e as conexões em cinza claro.


🏗️ Estrutura da Arquitetura e fluxo de interação

1. Arquitetura

Ícone de play azul no centro, com texto "Arquitetura sem servidor" acima, em um fundo de nuvem digital e circuitos eletrônicos em azul. Clique para iniciar a apresentação.

Descrição da Imagem A imagem exibe um ícone de "play" azul no centro, sugerindo o início de uma apresentação. Ao fundo, há uma ilustração de uma nuvem digital com circuitos eletrônicos em tons de azul, representando uma arquitetura de computação em nuvem. O texto "Arquitetura sem servidor" está posicionado na parte superior, destacando o tema da apresentação. No canto inferior direito, há o logo da Amazon Web Services (AWS).

2. Fluxo de Dados

  • Recepção da Nota Fiscal:
    • O usuário faz upload da nota fiscal através do endpoint (POST http://<URL>/api/v1/invoice).
    • Não há conteúdo em body na requisição. Segue o exemplo de comando curl:
  curl --location --request POST 'http://<URL>/api/v1/invoice' --form 'file=@"<Nome do arquivo>"'
  • Integração com Lambda:
    • O API Gateway invoca a função Lambda que processa a requisição.
  • Armazenamento em S3:
    • A função Lambda armazena a imagem no bucket S3.
  • Processamento pelo Textract:
    • A função Lambda usa o Textract para extrair dados da nota fiscal.
  • Processamento e Refinamento com LLM:
    • A função Lambda envia os dados extraídos para o modelo LLM, onde eles são processados e refinados para identificar elementos específicos. O modelo organiza e formata as informações, garantindo que os dados estejam estruturados de maneira precisa para o uso.
  • Classificação de Pagamentos:
    • A nota é movida para a pasta correspondente no S3 com base na forma de pagamento, dinheiro/pix para dinheiro e outras formas de pagamento para outros.
  • Resposta ao Usuário:
    • A API retorna os dados estruturados da nota fiscal ao usuário em formato JSON via API Gateway.
    • Para campos não identificados o valor é None.
{
  "nome_emissor": "<nome-fornecedor>",
  "CNPJ_emissor": "00.000.000/0000-00",
  "endereco_emissor": "<endereco-fornecedor>",
  "CNPJ_CPF_consumidor": "000.000.000-00",
  "data_emissao": "00/00/0000",
  "numero_nota_fiscal": "123456",
  "serie_nota_fiscal": "123",
  "valor_total": "0000.00",
  "forma_pgto": "<dinheiropix/outros>"
}

⚔️ Tecnologias

As seguintes ferramentas foram utilizadas para desenvolver esse projeto:

Ferramenta Utilizada
WindowsSistema Windows Sistema operacional
Visual Studio CodeVisual Studio Code Editor de código
TrelloTrello Organização geral de tarefas
PostmanPostman Teste de API
AWSAWS Projeto hospedado na cloud AWS
GitHub GitHub Plataforma de hospedagem de repositórios de código
Discord Discord Plataforma Utilizada para reuniões
Git Git Ferramenta de versionamento de código
amazoncloudwatch amazoncloudwatch Coleta e registra logs, métricas e dados de eventos em tempo real do projeto
Amazon S3 Amazon S3 Armazenamento de imagens e dados extraídos
Amazon API Gateway Amazon API Gateway Expõe o endpoint da API e envia a requisição do usuário para a função Lambda e recebe o json
Amazon Lambda Amazon Lambda A função Lambda executa a lógica da API em python
canva Canva Design do projeto
... ...

📜 Glossário

Certos termos são usados ao longo do projeto Eagle Vision com significados consistentes ou convenções, segue abaixo alguns deles.

Termo Descrição
AWS Serviços Web da Amazon.
API Interface de Programação de Aplicações.
Amazon S3 Serviço de Armazenamento Simples da Amazon.
Amazon Lambda Serviço de computação sem servidor da AWS que executa código em resposta a eventos.
Amazon API Gateway Serviço que permite a criação, publicação, manutenção e segurança de APIs.
Amazon CloudWatch Serviço de monitoramento para recursos da AWS que coleta e rastreia métricas e logs.
Amazon Textract Serviço de extração automática de texto e dados de documentos escaneados.
JSON Notação de Objetos JavaScript.

📋 Referências


📝 Autores

Imagem de perfil de Amanda Marino no GitHub
Badge com o nome Amanda Marino LinkedIn de Amanda Marino
Descrição da Imagem Esta imagem mostra a foto de perfil de Amanda Marino no GitHub. O badge do github e outro badge do linkedin, e ao clicar na imagem ou nos badges, você será direcionado ao perfil.
Imagem de perfil de Gustavo Tsuru no GitHub
Badge com o nome Gustavo Tsuru LinkedIn de Gustavo Tsuru
Descrição da Imagem Esta imagem mostra a foto de perfil de Gustavo Tsuru no GitHub. O badge do github e outro badge do linkedin, e ao clicar na imagem ou nos badges, você será direcionado ao perfil.
Imagem de perfil de Neemias Borges no GitHub
Badge com o nome Neemias Borges LinkedIn de Neemias Borges
Descrição da Imagem Esta imagem mostra a foto de perfil de Neemias Borges no GitHub. O badge do github e outro badge do linkedin, e ao clicar na imagem ou nos badges, você será direcionado ao perfil.
Imagem de perfil de Ramon Gomes no GitHub
Badge com o nome Ramon Gomes LinkedIn de Ramon Gomes
Descrição da Imagem Esta imagem mostra a foto de perfil de Ramon Gomes no GitHub. O badge do github e outro badge do linkedin, e ao clicar na imagem ou nos badges, você será direcionado ao perfil.

⚖️ Licença

(Voltar ao topo)

Texto animado dizendo:
'OBS: Em conformidade com as leis de proteção de dados, não compartilhamos nenhum código nem informações críticas, Priorizamos a privacidade e segurança, Por isso arquivos e links foram removidos.'

GIF ilustrando que os dados estão protegidos.

Descrição da Imagem A imagem exibe um GIF ilustrando que os dados estão protegidos.