Marcus Vinicius Zerbini Canhaço
feat: atualização do detector com otimizações para GPU T4
eb1a752
# Interface e API
## Interface Web
### Componentes Principais
1. **Upload de Vídeo**
- Formatos suportados: MP4, AVI, MOV
- Tamanho máximo: 100MB
- Duração máxima: 5 minutos
2. **Configurações de Detecção**
- Limiar de confiança (0-100%)
- Modo de processamento (GPU/CPU)
- Tamanho do lote de frames
3. **Visualização de Resultados**
- Vídeo com anotações
- Timeline de detecções
- Métricas de processamento
### Exemplos de Uso
1. **Upload Simples**
```python
with gr.Blocks() as demo:
video_input = gr.Video()
detect_btn = gr.Button("Detectar")
output_display = gr.Video()
```
2. **Configurações Avançadas**
```python
with gr.Blocks() as demo:
with gr.Row():
confidence = gr.Slider(0, 100)
batch_size = gr.Number(value=4)
```
## API REST
### Endpoints
#### 1. Detecção em Vídeo
```http
POST /api/detect
Content-Type: multipart/form-data
{
"video": binary_data,
"confidence": 0.5,
"use_gpu": true
}
```
**Resposta:**
```json
{
"detections": [
{
"frame": 0,
"timestamp": "00:00:01",
"objects": [
{
"label": "arma",
"confidence": 95.5,
"bbox": [0, 0, 100, 100]
}
]
}
],
"metrics": {
"frames_processed": 150,
"processing_time": 2.5,
"fps": 60
}
}
```
#### 2. Status do Serviço
```http
GET /api/status
Response:
{
"status": "online",
"gpu_available": true,
"memory_usage": "45%",
"queue_size": 2
}
```
### Códigos de Erro
- `400`: Parâmetros inválidos
- `413`: Vídeo muito grande
- `500`: Erro interno
- `503`: Serviço indisponível
### Rate Limiting
- 10 requisições/minuto por IP
- 100 requisições/hora por usuário
- Tamanho máximo do vídeo: 100MB
## Webhooks
### Configuração
```http
POST /api/webhooks/configure
{
"url": "https://seu-servidor.com/callback",
"events": ["detection", "error"],
"secret": "seu_secret"
}
```
### Formato do Callback
```json
{
"event": "detection",
"timestamp": "2024-03-20T15:30:00Z",
"data": {
"video_id": "abc123",
"detections": []
},
"signature": "hash_hmac"
}
```
## Integração com Outros Serviços
### 1. Hugging Face
```python
from huggingface_hub import HfApi
api = HfApi()
api.upload_file(
path_or_fileobj="./video.mp4",
path_in_repo="videos/test.mp4",
repo_id="seu-espaco"
)
```
### 2. Sistemas de Notificação
```python
def notify(detection):
requests.post(
"https://seu-servidor.com/notify",
json={"detection": detection}
)
```
## Considerações de Segurança
1. **Autenticação**
- Token JWT obrigatório
- Renovação automática
2. **Rate Limiting**
- Por IP e usuário
- Cooldown progressivo
3. **Validação de Entrada**
- Tamanho máximo
- Formatos permitidos
- Sanitização