Spaces:
Runtime error
Runtime error
| # 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 | |