Protótipo do Projeto Integrador (PGI) — Curso de Sistemas para Internet (Univali).
O CronotaScan realiza a leitura visual de discos diagrama de cronotacógrafo analógico por visão computacional (OpenCV), detecta excessos de velocidade e paradas prolongadas, persiste o histórico em SQLite e gera laudos PDF de auditoria.
Documentação extra (Engenharia de Software 2): DOCUMENTACAO_ES2.md.
- Windows 10/11 (testado)
- Python 3.11+
- Navegador moderno (Chrome, Edge ou Firefox)
Tutorial completo (PC da Univali): veja
TUTORIAL.md.
Abra o PowerShell na pasta do projeto:
cd E:\CRONOTACOGRAFOSpython -m venv .venv
.\.venv\Scripts\Activate.ps1Se aparecer erro de política de execução:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
.\.venv\Scripts\Activate.ps1python -m pip install -r requirements.txtPrincipais bibliotecas: FastAPI, Uvicorn, OpenCV, NumPy, Pandas, SQLAlchemy, ReportLab.
python main.pyAguarde a mensagem:
Uvicorn running on http://127.0.0.1:8081
No navegador, acesse:
Documentação Swagger da API: http://127.0.0.1:8081/docs
Health check: http://127.0.0.1:8081/api/health
Porta: o CronotaScan usa 8081 por padrão, para poder rodar junto com outro software na 8080.
Para mudar:$env:PORT=8090e depoispython main.py.
- Informe a placa do veículo (ex.:
ABC-1234). - Selecione a imagem do disco (PNG/JPG) e clique em Upload do Disco.
- Aguarde o processamento (overlay de carregamento).
- Confira no dashboard:
- distância estimada, velocidades e total de infrações;
- gráfico Chart.js da curva;
- imagem desdobrada (debug);
- tabela de excessos/paradas.
- No Histórico de leituras, use Filtrar, Ver Detalhes e PDF.
- Clique em Gerar Laudo PDF para abrir o laudo em nova aba.
- Use Limpar / Novo Escaneamento para reiniciar o formulário.
Envie uma foto sem disco / muito escura / cortada. O sistema deve responder com mensagem clara em português (ex.: impossibilidade de localizar o centro) e não travar a tela.
CRONOTACOGRAFOS/
├── main.py # API FastAPI + handlers de erro
├── requirements.txt
├── README.md
├── PLANO_DE_IMPLEMENTACAO.md
├── tacografos.db # SQLite (criado automaticamente)
├── temp/ # Imagens desdobradas / PDFs de teste
├── static/
│ └── index.html # SPA (dashboard)
└── core/
├── processador_imagem.py # OpenCV — LeitorDisco
├── analisador.py # Regras de negócio
├── database.py # SQLAlchemy / SQLite
└── gerador_pdf.py # Laudos PDF (ReportLab)
| Método | Rota | Descrição |
|---|---|---|
GET |
/ |
Interface SPA |
GET |
/api/health |
Status da API |
POST |
/upload-disco/ |
Processa disco + placa e grava no banco |
GET |
/api/v1/viagens |
Lista histórico (?placa= opcional) |
GET |
/api/v1/viagens/{id} |
Detalhe da viagem |
GET |
/api/v1/viagens/{id}/pdf |
Laudo PDF de auditoria |
Parar o servidor: Ctrl + C no terminal.
Reiniciar o banco (apaga o histórico):
# com o servidor parado
Remove-Item E:\CRONOTACOGRAFOS\tacografos.db -Force
python main.pyLimpar imagens de debug:
Remove-Item E:\CRONOTACOGRAFOS\temp\* -Force -ErrorAction SilentlyContinue- O protótipo prioriza escaneamentos bem iluminados e centralizados.
- A distância é uma estimativa por integração velocidade × tempo.
- O histórico e os laudos PDF apoiam a auditoria de frota; a validação final é do gestor/auditor.
- Detalhes de arquitetura e roadmap: consulte
PLANO_DE_IMPLEMENTACAO.md.
CronotaScan — PGI Univali — Sistemas para Internet