Skip to main content

Backend Python para detecção de microorganismos

Project description

MicroDetect Backend

Backend Python para a aplicação MicroDetect, responsável por gerenciar datasets, modelos e inferências.

Estrutura do Projeto

python_backend/
├── app/                    # Código da aplicação
│   ├── api/               # Endpoints da API
│   ├── core/              # Configurações e utilitários
│   ├── database/          # Modelos e conexão com banco
│   ├── models/            # Modelos ML
│   ├── schemas/           # Esquemas Pydantic
│   ├── services/          # Serviços
│   └── utils/             # Utilitários
├── data/                  # Diretório para dados
│   ├── datasets/          # Datasets
│   ├── models/            # Modelos treinados
│   ├── gallery/           # Imagens capturadas
│   └── temp/              # Arquivos temporários
├── tests/                 # Testes
├── requirements.txt       # Dependências
└── start_backend.py       # Script de inicialização

Requisitos

  • Python 3.8+
  • pip (gerenciador de pacotes Python)

Instalação

  1. Clone o repositório
  2. Navegue até o diretório do backend:
    cd python_backend
    
  3. Instale as dependências:
    pip install -r requirements.txt
    

Uso

Para iniciar o servidor:

python start_backend.py

O servidor estará disponível em http://localhost:8000

API Endpoints

Datasets

  • POST /api/v1/datasets/ - Criar novo dataset
  • GET /api/v1/datasets/ - Listar datasets
  • GET /api/v1/datasets/{id} - Obter dataset específico

Imagens

  • POST /api/v1/images/ - Upload de imagem
  • GET /api/v1/images/ - Listar imagens
  • GET /api/v1/images/{id} - Obter imagem específica

Anotações

  • POST /api/v1/annotations/ - Criar anotação
  • GET /api/v1/annotations/ - Listar anotações
  • GET /api/v1/annotations/{id} - Obter anotação específica

Treinamento

  • POST /api/v1/training/ - Iniciar sessão de treinamento
  • GET /api/v1/training/ - Listar sessões de treinamento
  • GET /api/v1/training/{id} - Obter sessão específica

Modelos

  • POST /api/v1/models/ - Criar novo modelo
  • GET /api/v1/models/ - Listar modelos
  • GET /api/v1/models/{id} - Obter modelo específico

Inferência

  • POST /api/v1/inference/ - Realizar inferência
  • GET /api/v1/inference/ - Listar resultados de inferência
  • GET /api/v1/inference/{id} - Obter resultado específico

Documentação da API

A documentação interativa da API está disponível em:

  • Swagger UI: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc

Integração com Flutter

O backend é iniciado automaticamente quando a aplicação Flutter é executada. O script start_backend.py é responsável por:

  1. Instalar dependências necessárias
  2. Iniciar o servidor FastAPI
  3. Gerenciar o ciclo de vida do servidor

Desenvolvimento

Para desenvolvimento local:

  1. Crie um ambiente virtual:

    python -m venv venv
    source venv/bin/activate  # Linux/macOS
    venv\Scripts\activate     # Windows
    
  2. Instale as dependências:

    pip install -r requirements.txt
    
  3. Execute o servidor em modo de desenvolvimento:

    python start_backend.py
    

Testes

Para executar os testes:

pytest

Contribuição

  1. Fork o repositório
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

Migrações de Banco de Dados

Este projeto utiliza o Alembic para gerenciar migrações de banco de dados. As migrações são executadas automaticamente durante a inicialização da API, garantindo que o esquema do banco de dados esteja sempre atualizado.

Como Funcionam as Migrações

  1. Quando a API inicia, ela executa automaticamente alembic upgrade head para aplicar todas as migrações pendentes.
  2. Se ocorrer algum erro durante as migrações, a API tenta criar as tabelas diretamente usando SQLAlchemy como fallback.

Criando Novas Migrações

Quando você fizer alterações nos modelos de dados (como adicionar/remover colunas, criar novas tabelas, etc.), você precisa criar uma nova migração. Use o script utilitário:

# No diretório raiz do projeto
python scripts/create_migration.py "Descrição da sua migração"

O script irá:

  1. Gerar um arquivo de migração na pasta alembic/versions/
  2. O arquivo conterá as alterações detectadas nos seus modelos

Aplicando Migrações Manualmente

Normalmente as migrações são aplicadas automaticamente quando a API inicia, mas você pode aplicá-las manualmente:

# No diretório raiz do projeto
python scripts/apply_migrations.py

Ou diretamente com o Alembic:

# No diretório raiz do projeto
python -m alembic upgrade head

Outras Operações com Alembic

  • Verificar migrações pendentes:

    python -m alembic current
    
  • Voltar para uma migração específica:

    python -m alembic downgrade <migration_id>
    
  • Gerar uma migração (mesmo que não haja mudanças):

    python -m alembic revision -m "Descrição da migração"
    

Como substituir o Pydantic

Este projeto foi adaptado para usar classes Python regulares em vez do Pydantic. Principais alterações:

  1. Criada uma classe base BaseSchema em microdetect/schemas/base.py que fornece funcionalidades de:

    • Inicialização via __init__
    • Serialização para dicionário via método dict()
    • Conversão de objetos ORM para schemas via método from_orm()
  2. Classes de esquema implementadas como classes regulares do Python que herdam de BaseSchema

  3. Utilitários de serialização em microdetect/utils/serializers.py para:

    • Converter objetos Python para JSON
    • Construir respostas da API padronizadas
  4. Os endpoints da API foram atualizados para usar os serializadores personalizados

Vantagens desta abordagem:

  • Sem dependências externas para validação/serialização
  • Maior controle sobre o comportamento de serialização
  • Classes mais simples e explícitas
  • Maior flexibilidade na manipulação dos dados

Exemplo de uso:

# Criar um objeto a partir de dados
model = SimpleModelResponse(
    id=1,
    name="Modelo de teste",
    description="Um modelo para teste"
)

# Converter para dicionário
model_dict = model.dict()

# Criar a partir de um objeto ORM
from_db = SimpleModelResponse.from_orm(db_model)

# Construir resposta da API
from microdetect.utils.serializers import build_response
response = build_response(model)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

microdetect-1.5.0.tar.gz (70.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

microdetect-1.5.0-py3-none-any.whl (103.5 kB view details)

Uploaded Python 3

File details

Details for the file microdetect-1.5.0.tar.gz.

File metadata

  • Download URL: microdetect-1.5.0.tar.gz
  • Upload date:
  • Size: 70.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.17

File hashes

Hashes for microdetect-1.5.0.tar.gz
Algorithm Hash digest
SHA256 44e10f05c307d00ea2a1001511f7d8973ccf37b3bafb4afa064fd1b33f660cc9
MD5 b7c4321fd12441eb22c6800e9f09b9f8
BLAKE2b-256 45e270f1f14f990b07bc6fc814a8bc38f99817305ca730d08bb67ffc1e064d4f

See more details on using hashes here.

File details

Details for the file microdetect-1.5.0-py3-none-any.whl.

File metadata

  • Download URL: microdetect-1.5.0-py3-none-any.whl
  • Upload date:
  • Size: 103.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.17

File hashes

Hashes for microdetect-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 79af81a68264714a6e0e6795184a5f837ca9a18cd3fed81a10628a313aba45ea
MD5 39448e12602992d3c6dd897fb12946f2
BLAKE2b-256 2a4ccaf3e8c85f76d83e375bb32c93173f9e4d3ab4f126ec454af5886d290ce9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page