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.6.3.tar.gz (82.0 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.6.3-py3-none-any.whl (116.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for microdetect-1.6.3.tar.gz
Algorithm Hash digest
SHA256 67862617c47144370d51a8e121b73a01eec39feb873b8530f0d1b41ede165c1b
MD5 20575317431f1b080cf0e04b0f777f3e
BLAKE2b-256 6fb772ba40b76facb03fb86c1e8a5ad109f8ccbc686c1cf6ca0eca882894cd99

See more details on using hashes here.

File details

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

File metadata

  • Download URL: microdetect-1.6.3-py3-none-any.whl
  • Upload date:
  • Size: 116.6 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.6.3-py3-none-any.whl
Algorithm Hash digest
SHA256 0c3e51a73d7a5af9b9d3045fe5b9dfbd30bf6d4886e880003911cf5f007cb6db
MD5 98222944cd616ba133e87d14ce2a3b0d
BLAKE2b-256 b32e57dc7cc97a1745d36277379af050026cf01ad0f5452c6e36a2e56f87ac43

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