Marcus Vinicius Zerbini Canhaço
feat: atualização do detector com otimizações para GPU T4
346e896
# Arquitetura do Sistema
## Visão Geral
O sistema de detecção de riscos em vídeo é construído seguindo os princípios da Clean Architecture, garantindo separação de responsabilidades e facilitando a manutenção e evolução do código.
## Modelo de IA: OWL-ViT
O OWL-ViT (Vision Transformer for Open-World Localization) é um modelo de visão computacional avançado que combina:
- Transformers para processamento de imagens
- Zero-shot learning para detecção de objetos
- Queries em linguagem natural para especificar alvos
### Considerações Técnicas
#### Versões do Modelo
1. **OWL-ViT Base (Atual)**
```python
model_name = "google/owlv2-base-patch16"
```
- Compatível com GPU T4
- Otimizado para inference
- Suporte a half precision
2. **OWL-ViT Ensemble (Descontinuado)**
```python
model_name = "google/owlv2-base-patch16-ensemble"
```
- Problemas de compatibilidade GPU
- Requer branch dev do Transformers
- Maior precisão, mas instável
#### Requisitos Específicos
```python
# Configurações necessárias para GPU
torch.backends.cuda.matmul.allow_tf32 = True
torch.backends.cudnn.benchmark = True
model = model.half() # Usar FP16
# Branch específico do Transformers
# pip install git+https://github.com/huggingface/transformers.git
```
### Como Funciona
1. **Processamento de Imagem**
- Divide a imagem em patches
- Processa usando arquitetura Transformer
- Gera representações visuais ricas
2. **Sistema de Queries**
- Aceita descrições em texto natural
- Exemplos de queries efetivas:
```python
queries = [
"uma arma de fogo",
"uma pistola",
"um rifle",
"uma faca",
"um objeto pontiagudo perigoso"
]
```
3. **Detecção Zero-shot**
- Não requer treinamento específico
- Adapta-se a novos objetos
- Alta precisão em tempo real
## Clean Architecture
### Camadas
```mermaid
graph TD
A[Presentation] --> B[Application]
B --> C[Domain]
D[Infrastructure] --> B
D --> C
```
1. **Domain (Núcleo)**
- Regras de negócio
- Entidades fundamentais
- Interfaces abstratas
2. **Application**
- Casos de uso
- Orquestração
- Lógica de aplicação
3. **Infrastructure**
- Implementações concretas
- Integrações externas
- Adaptadores
4. **Presentation**
- Interface Gradio
- APIs REST
- Webhooks
### Diagrama de Classes
```mermaid
classDiagram
class DetectorInterface {
<<interface>>
+process_video()
+detect_objects()
+clean_memory()
}
class WeaponDetectorGPU {
-model: OWLViT
+process_video()
+detect_objects()
}
class WeaponDetectorCPU {
-model: OWLViT
+process_video()
+detect_objects()
}
class NotificationService {
<<interface>>
+send_notification()
}
DetectorInterface <|-- WeaponDetectorGPU
DetectorInterface <|-- WeaponDetectorCPU
NotificationService <|-- EmailNotification
NotificationService <|-- TelegramNotification
```
## Extensibilidade
### 1. Novos Modelos de IA
```python
class NewDetector(DetectorInterface):
"""Implementação de novo detector."""
def process_video(self):
# Implementação específica
pass
```
### 2. Suporte a Hardware
- Abstração de hardware via interfaces
- Fácil adição de novos backends:
- TPU
- Neural Engine
- Outros aceleradores
### 3. Sistema de Notificações
```python
class NotificationService {
"""Serviço de notificação abstrato."""
def send_notification(self):
# Implementação específica
pass
}
class EmailNotification(NotificationService):
"""Serviço de notificação por e-mail."""
def send_notification(self, detection_data: dict, target: str):
# Envia e-mail com detalhes da detecção
pass
class WebhookNotification(NotificationService):
"""Serviço de notificação via webhook."""
def send_notification(self, detection_data: dict, webhook_url: str):
# Envia POST request para o webhook configurado
pass
```
#### Tipos de Notificação Implementados
1. **E-mail**
- Envio de alertas por e-mail
- Suporte a templates HTML
- Detalhes das detecções incluídos
- Configurável via variáveis de ambiente
2. **Webhook**
- Integração com sistemas externos
- Payload JSON customizável
- Suporte a autenticação
- Headers configuráveis
- Retry com backoff exponencial
#### Fluxo de Notificações
```mermaid
sequenceDiagram
participant D as Detector
participant NS as NotificationService
participant E as EmailService
participant W as WebhookService
D->>NS: Detecção Encontrada
alt Email Configurado
NS->>E: Envia Alerta
E-->>NS: Status Envio
else Webhook Configurado
NS->>W: Envia POST
W-->>NS: Status Request
end
NS-->>D: Resultado
```
## Fluxo de Processamento
```mermaid
sequenceDiagram
participant UI as Interface
participant App as Application
participant Det as Detector
participant Not as Notification
UI->>App: Upload Vídeo
App->>Det: Processa Vídeo
Det->>Det: Extrai Frames
loop Cada Frame
Det->>Det: Detecta Objetos
Det->>Det: Limpa Memória
end
Det->>App: Retorna Resultados
App->>Not: Envia Notificação
App->>UI: Atualiza Interface
```
## Benefícios da Arquitetura
1. **Desacoplamento**
- Mudanças em uma camada não afetam outras
- Facilita testes unitários
- Permite evolução independente
2. **Manutenibilidade**
- Código organizado e previsível
- Responsabilidades bem definidas
- Fácil localização de problemas
3. **Escalabilidade**
- Processamento frame a frame confiável
- Múltiplos backends de processamento
- Sistemas de notificação plugáveis
## Camadas da Arquitetura
### 1. Domain (Núcleo)
- Contém as regras de negócio e entidades fundamentais
- Independente de frameworks e bibliotecas externas
- Localização: `src/domain/`
#### Componentes Principais
- `detectors/`: Implementações dos detectores (GPU/CPU)
- `entities/`: Objetos de domínio
- `factories/`: Fábricas para criação de objetos
- `interfaces/`: Contratos e interfaces
### 2. Application
- Implementa os casos de uso da aplicação
- Orquestra o fluxo de dados entre as camadas
- Localização: `src/application/`
#### Casos de Uso
- `process_video`: Processamento e análise de vídeos
- Notificações de detecções
- Gerenciamento de cache
### 3. Infrastructure
- Implementações concretas de interfaces
- Integrações com serviços externos
- Localização: `src/infrastructure/`
#### Serviços
- `WeaponDetectorService`: Serviço principal de detecção
- `NotificationService`: Serviço de notificações
- Gerenciamento de GPU/CPU
### 4. Presentation
- Interface com usuário via Gradio
- Localização: `src/presentation/`
#### Componentes
- Interface web responsiva
- Configurações de processamento
- Visualização de resultados
## Fluxo de Dados
1. Upload do vídeo via interface Gradio
2. Processamento pelo caso de uso
3. Detecção de objetos usando GPU/CPU
4. Notificações (se configuradas)
5. Retorno dos resultados
## Otimizações
### GPU
- Processamento frame a frame otimizado
- Memória pinned
- Async data loading
- Cache de modelos e frames
- Gerenciamento eficiente de memória
### CPU
- Processamento sequencial otimizado
- NumPy vectorization
- Cache de resultados
- Otimização de memória
## Diagrama de Componentes
```mermaid
graph TD
A[Interface Web] --> B[Casos de Uso]
B --> C[Detector Service]
C --> D[GPU Detector]
C --> E[CPU Detector]
B --> F[Notification Service]
D --> G[OWL-ViT Model]
E --> G
```
## Considerações de Design
### 1. Inversão de Dependência
- Interfaces abstratas no domínio
- Implementações concretas na infraestrutura
### 2. Single Responsibility
- Cada componente com responsabilidade única
- Separação clara de concerns
### 3. Open/Closed
- Extensível para novos detectores
- Fácil adição de novos serviços