Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • Wiki Wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 6
    • Issues 6
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 1
    • Merge requests 1
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • HoorTech
  • WikiWiki
  • Wiki
  • Back End

Last edited by Pedro Henrique Tonial Pasinato Nov 12, 2024
Page history
This is an old version of this page. You can view the most recent version or browse the history.

Back End

| Home | Planejamento | Arquitetura Geral | Front End | Back End | Banco de Dados | Design do Sistema e Mockups | Infraestrutura e Orçamento | Fluxo e Versionamento | | :----------: | :--------------------------: | :-------------------------------------: | :--------------------: | :------------------------------: | :-------------------------------------------: | :----------------------------------------: | :-------------------------: |

Bem-vindo à WIKI do Back-end

Esta WIKI foi criada para fornecer uma visão geral e instruções detalhadas sobre o backend do projeto HoorTech. Aqui, você encontrará informações sobre a arquitetura do projeto, as tecnologias e bibliotecas utilizadas, e os passos necessários para configurar e rodar o ambiente de desenvolvimento.

Este documento é uma referência completa para desenvolvedores que trabalham no projeto, facilitando a compreensão da estrutura e dos componentes utilizados. Siga os tópicos abaixo para obter informações específicas:

  • Arquitetura Base: Entenda a estrutura do projeto e o papel de cada diretório e arquivo principal.
  • Tecnologias Utilizadas: Descubra as ferramentas e frameworks que compõem a base do projeto.
  • Bibliotecas Utilizadas: Veja uma descrição das bibliotecas principais e como elas aprimoram a funcionalidade do backend.
  • Rodando o Back-end pela Primeira Vez: Um guia passo a passo para configurar o ambiente de desenvolvimento e rodar a aplicação localmente.
  • Scripts Disponíveis: Lista dos comandos que podem ser executados para iniciar, compilar e configurar o projeto.

Use esta WIKI como um recurso de apoio para colaborar e desenvolver no Back-end!

Arquitetura Base

Também disponível em: Arquitetura

hoortech_backend/
├── app/                            # Diretório principal da aplicação
│   ├── handtracking/               # Código relacionado ao rastreamento de mãos
│   │   └── handtracking.py         # Script principal de rastreamento
│   ├── model/                      # Modelos de machine learning
│   │   ├── modelo_alphabet.keras   # Modelo de reconhecimento de alfabeto
│   │   └── modelo_vowel.keras      # Modelo de reconhecimento de vogais
│   ├── predictor/                  # Módulos de predição
│   │   ├── predictoralphabet.py    # Predição para alfabeto
│   │   └── predictorvowel.py       # Predição para vogais
│   └── templates/                  # Templates HTML (se aplicável)
├── test/                           # Diretório de testes
│   ├── integration_testing.py      # Testes de integração
│   ├── latra-a-base64.txt          # Arquivo de teste em Base64
│   ├── letra-a.jpg                 # Imagem de teste
│   ├── __init__.py                 # Inicialização do pacote de teste
│   └── create_mock_model.py        # Criação de modelos mock
├── routes.py                       # Definição das rotas da API
├── socket_server.py                # Servidor de WebSocket para comunicação em tempo real
├── instance/                       # Configurações específicas de instância
│   └── config.py                   # Arquivo de configuração do backend
├── models/                         # Diretório para modelos de machine learning
│   └── hand_landmarker.task        # Modelo de marcação de mão
├── .gitignore                      # Arquivos a serem ignorados pelo Git
├── Dockerfile                      # Arquivo de configuração para Docker
├── generate_base64.py              # Script para gerar dados em Base64
├── README.md                       # Instruções do projeto
├── requirements.txt                # Dependências do projeto
└── run.py                          # Script principal para execução do backend

Tecnologias Utilizadas

  • Python: A linguagem de programação usada para desenvolver o backend, escolhida pela sua simplicidade e poderosas bibliotecas de machine learning e análise de dados.

  • Docker: Utilizado para encapsular o backend com todas as dependências, garantindo a consistência do ambiente de execução em diferentes sistemas.

Bibliotecas Utilizadas

  • Flask (v3.0.3): Um framework web leve para Python que facilita a criação de APIs RESTful. Usado para definir rotas e endpoints da aplicação backend.

  • Flask-SocketIO (v5.3.3): Extensão para Flask que permite comunicação em tempo real usando WebSockets, especialmente útil para funcionalidades que necessitam de atualizações instantâneas.

  • Flask-Cors (v3.0.10): Extensão para Flask que permite a configuração de CORS (Cross-Origin Resource Sharing) para o backend, permitindo que recursos sejam acessados a partir de domínios diferentes.

  • gevent (v22.10.2): Biblioteca que fornece uma implementação eficiente de multi-threading em Python, usada para suportar operações assíncronas no servidor Flask.

  • gevent-websocket (v0.10.1): Extensão para gevent que permite o uso de WebSockets, integrando comunicação em tempo real ao backend.

  • opencv-python (v4.10.0.84): Biblioteca poderosa para visão computacional e processamento de imagem. Utilizada para manipulação e análise de imagens, especialmente para extrair landmarks da mão.

  • dnspython (v2.2.1): Biblioteca para manipulação de DNS em Python, usada para operações relacionadas a domínios e servidores de rede.

  • numpy (v1.26.4): Biblioteca para cálculos numéricos de alta performance, frequentemente usada para manipulação de arrays e operações matemáticas.

  • mediapipe (v0.10.14): Biblioteca do Google que fornece modelos prontos para detecção de landmarks (pontos de referência) em imagens, como mãos e rostos. É utilizada para extrair landmarks da mão na aplicação.

  • tensorflow (v2.16.1): Uma biblioteca de machine learning e deep learning que facilita a criação e treinamento de modelos de IA. Usada para carregar e executar o modelo de reconhecimento de letras no backend.

Rodando o Back-end pela Primeira Vez

Siga os passos abaixo para configurar e iniciar o ambiente de desenvolvimento do backend.

Passo a Passo para Execução

Clone o Repositório

Clone o repositório do backend para a sua máquina local e navegue até o diretório do projeto:

git clone https://github.com/seu_usuario/hoortech_backend.git
cd hoortech_backend

Crie o Ambiente Virtual

Para isolar o ambiente de desenvolvimento, crie e ative um ambiente virtual:

  • Windows
python -m venv venv
.\venv\Scripts\activate
  • Linux
python3 -m venv venv
source venv/bin/activate

Instale as Dependências

As dependências estão todas listadas no script requierements.txt

pip install --no-cache-dir -r requirements.txt

Execute o Servidor

Para iniciar o backend, execute o servidor WebSocket com o comando:

python -m app.socket_server

Funcionamento da Aplicação

O backend do projeto HoorTech utiliza Flask para criar um servidor que estará disponível na porta 5003, pronto para receber requisições POST na rota /predict. Esse servidor recebe uma string Base64 de uma imagem no corpo da requisição e retorna, em formato JSON, a letra prevista pelo modelo de IA.

Descrição das Classes

1. HandTracker

  • Local: app/handtracking/handtracking.py
  • Descrição: A classe HandTracker é responsável por processar imagens codificadas em Base64 e extrair landmarks (pontos de referência) da mão. Esses landmarks são posteriormente utilizados para a predição das letras.

Métodos Principais:

  • process_frame(image_base64: str) -> list: Recebe a imagem em Base64, decodifica e utiliza um detector de landmarks para retornar os pontos de referência da mão.

  • decode_image(image_base64: str) -> np.array: Decodifica a string Base64 para uma imagem utilizável.

2. LetterPredictor

  • Local: app/predictor/predictor.py
  • Descrição: A classe LetterPredictor é responsável por carregar o modelo de IA e utilizar landmarks como entrada para prever a letra correspondente.

Métodos Principais:

  • __init__(model_path: str): Inicializa a classe e carrega o modelo salvo no caminho especificado.

  • predict_letter(landmarks: list) -> str: Recebe uma lista de landmarks e retorna a letra prevista pelo modelo.

3. Gerador de Modelo Mock

  • Local: app/test/create_mock_model.py
  • Descrição: Esse script gera um modelo fictício e salva em formato HDF5, permitindo testes de ponta a ponta do sistema sem necessidade do modelo final treinado.

Função Principal:

  • create_mock_model(): Cria e salva um modelo mock que futuramente será substituído pelo modelo treinado.

4. Servidor SocketIO

  • Local: app/socket_server.py
  • Descrição: O servidor é implementado com Flask e Flask-SocketIO, oferecendo uma API para receber imagens codificadas em Base64, processá-las e retornar a letra prevista com base nos landmarks extraídos.

Rota Implementada

  • /predict (Método: POST): Recebe uma imagem em Base64 e retorna a letra prevista com base nos landmarks extraídos pela classe HandTracker e processados pelo modelo de IA na classe LetterPredictor.
Clone repository
  • Arquitetura Geral
  • Back End
  • Banco de Dados
  • Design do Sistema e Mockups
  • Fluxo e Versionamento
  • Front End
  • Infraestrutura e Orçamento
  • Planejamento
  • Home