Marcus Vinicius Zerbini Canhaço commited on
Commit
f84a89d
·
1 Parent(s): 1429e38

Documentação e melhorias no Examples

Browse files
README.md CHANGED
@@ -14,14 +14,18 @@ resources:
14
  gpu: true
15
  ---
16
 
17
- # Detector de Riscos em Vídeo
 
18
 
19
- Sistema de detecção de objetos de risco em vídeos usando OWL-ViT e processamento GPU/CPU otimizado.
 
20
 
21
- [![Open in Hugging Face](https://img.shields.io/badge/Hugging%20Face-Spaces-yellow)](https://huggingface.co/spaces/seu-usuario/seu-espaco)
22
- [![GitHub](https://img.shields.io/badge/GitHub-Repo-blue)](https://github.com/seu-usuario/hackatoon-1iadt)
 
 
23
 
24
- ## 🚀 Funcionalidades
25
 
26
  - Detecção de objetos de risco em vídeos
27
  - Processamento otimizado em GPU (NVIDIA T4) e CPU
@@ -30,58 +34,63 @@ Sistema de detecção de objetos de risco em vídeos usando OWL-ViT e processame
30
  - Suporte a webhooks para notificações
31
  - Métricas detalhadas de processamento
32
 
33
- ## 📋 Requisitos
34
 
35
  - Python 3.10+
36
  - CUDA 11.8+ (para GPU)
37
  - NVIDIA T4 16GB ou superior (recomendado)
38
  - 16GB RAM mínimo
39
 
40
- ## 🔧 Instalação
41
 
42
  1. Clone o repositório:
43
- ```bash
44
- git clone https://github.com/seu-usuario/hackatoon-1iadt.git
45
- cd hackatoon-1iadt
46
- ```
 
47
 
48
  2. Instale as dependências:
49
- ```bash
50
- pip install -r requirements.txt
51
- ```
 
52
 
53
  3. Configure o ambiente:
54
- ```bash
55
- cp .env.example .env
56
- ```
 
57
 
58
  [Documentação completa de instalação](docs/setup/installation.md)
59
 
60
- ## 💻 Uso
61
 
62
  1. Inicie a aplicação:
63
- ```bash
64
- python app.py
65
- ```
66
 
67
- 2. Acesse: http://localhost:7860
 
 
 
 
68
 
69
  3. Upload de vídeo:
70
- - Arraste ou selecione um vídeo
71
- - Ajuste as configurações
72
- - Clique em "Detectar"
73
 
74
- ## 📚 Documentação
 
 
 
 
75
 
76
  - [Arquitetura do Sistema](docs/architecture/overview.md)
77
  - [Instalação e Configuração](docs/setup/installation.md)
78
  - [API e Interface](docs/api/interface.md)
79
 
80
- ## 🏗️ Arquitetura
81
 
82
  O projeto segue os princípios da Clean Architecture:
83
 
84
- ```
85
  src/
86
  ├── domain/ # Regras de negócio
87
  ├── application/ # Casos de uso
@@ -91,54 +100,56 @@ src/
91
 
92
  [Detalhes da arquitetura](docs/architecture/overview.md)
93
 
94
- ## 🚀 Deploy no Hugging Face
95
 
96
  1. Configure as credenciais:
97
- ```bash
98
- cp .env.example .env.huggingface
99
- ```
 
100
 
101
  2. Execute o deploy:
102
- ```bash
103
- ./deploy.sh
104
- ```
105
 
106
- [Instruções detalhadas de deploy](docs/setup/installation.md#deployment-no-hugging-face)
 
 
107
 
108
- ## 💪 Máquinas Recomendadas
109
 
110
  ### GPU
 
111
  - NVIDIA T4 16GB (Hugging Face Pro)
112
  - NVIDIA A100 (Performance máxima)
113
  - NVIDIA V100 (Alternativa)
114
 
115
  ### CPU
 
116
  - 8+ cores
117
  - 32GB+ RAM
118
  - SSD para armazenamento
119
 
120
- ## 🔍 Interface
121
 
122
  ### Componentes
 
123
  - Upload de vídeo (MP4, AVI, MOV)
124
  - Configurações de detecção
125
  - Visualização de resultados
126
  - Métricas em tempo real
127
 
128
- [Documentação da interface](docs/api/interface.md)
129
-
130
- ## 🔗 Links
131
 
132
- - [Hugging Face Space](https://huggingface.co/spaces/seu-usuario/seu-espaco)
133
- - [GitHub Repository](https://github.com/seu-usuario/hackatoon-1iadt)
134
  - [Documentação](docs/)
135
  - [Issues](https://github.com/seu-usuario/hackatoon-1iadt/issues)
136
 
137
- ## 📄 Licença
138
 
139
- Este projeto está licenciado sob a MIT License - veja o arquivo [LICENSE](LICENSE) para detalhes.
 
140
 
141
- ## 👥 Contribuição
142
 
143
  1. Fork o projeto
144
  2. Crie sua feature branch (`git checkout -b feature/AmazingFeature`)
@@ -146,11 +157,8 @@ Este projeto está licenciado sob a MIT License - veja o arquivo [LICENSE](LICEN
146
  4. Push para a branch (`git push origin feature/AmazingFeature`)
147
  5. Abra um Pull Request
148
 
149
- ## 📞 Suporte
150
 
151
  - Abra uma [issue](https://github.com/seu-usuario/hackatoon-1iadt/issues)
152
  - Consulte a [documentação](docs/)
153
  - Entre em contato com a equipe
154
-
155
- ---
156
- Desenvolvido com ❤️ para o Hackathon FIAP
 
14
  gpu: true
15
  ---
16
 
17
+ Sistema de detecção de objetos de risco em vídeos usando OWL-ViT e processamento
18
+ GPU/CPU otimizado.
19
 
20
+ [![Open in Hugging Face][hf-badge]][hf-space]
21
+ [![GitHub][gh-badge]][gh-repo]
22
 
23
+ [hf-badge]: https://img.shields.io/badge/Hugging%20Face-Spaces-yellow
24
+ [hf-space]: https://huggingface.co/spaces/seu-usuario/seu-espaco
25
+ [gh-badge]: https://img.shields.io/badge/GitHub-Repo-blue
26
+ [gh-repo]: https://github.com/seu-usuario/hackatoon-1iadt
27
 
28
+ ## Funcionalidades
29
 
30
  - Detecção de objetos de risco em vídeos
31
  - Processamento otimizado em GPU (NVIDIA T4) e CPU
 
34
  - Suporte a webhooks para notificações
35
  - Métricas detalhadas de processamento
36
 
37
+ ## Requisitos
38
 
39
  - Python 3.10+
40
  - CUDA 11.8+ (para GPU)
41
  - NVIDIA T4 16GB ou superior (recomendado)
42
  - 16GB RAM mínimo
43
 
44
+ ## Instalação
45
 
46
  1. Clone o repositório:
47
+
48
+ ```bash
49
+ git clone https://github.com/seu-usuario/hackatoon-1iadt.git
50
+ cd hackatoon-1iadt
51
+ ```
52
 
53
  2. Instale as dependências:
54
+
55
+ ```bash
56
+ pip install -r requirements.txt
57
+ ```
58
 
59
  3. Configure o ambiente:
60
+
61
+ ```bash
62
+ cp .env.example .env
63
+ ```
64
 
65
  [Documentação completa de instalação](docs/setup/installation.md)
66
 
67
+ ## Uso
68
 
69
  1. Inicie a aplicação:
 
 
 
70
 
71
+ ```bash
72
+ python app.py
73
+ ```
74
+
75
+ 2. Acesse: `http://localhost:7860`
76
 
77
  3. Upload de vídeo:
 
 
 
78
 
79
+ - Arraste ou selecione um vídeo
80
+ - Ajuste as configurações
81
+ - Clique em "Detectar"
82
+
83
+ ## Documentação
84
 
85
  - [Arquitetura do Sistema](docs/architecture/overview.md)
86
  - [Instalação e Configuração](docs/setup/installation.md)
87
  - [API e Interface](docs/api/interface.md)
88
 
89
+ ## Arquitetura
90
 
91
  O projeto segue os princípios da Clean Architecture:
92
 
93
+ ```plaintext
94
  src/
95
  ├── domain/ # Regras de negócio
96
  ├── application/ # Casos de uso
 
100
 
101
  [Detalhes da arquitetura](docs/architecture/overview.md)
102
 
103
+ ## Deploy no Hugging Face
104
 
105
  1. Configure as credenciais:
106
+
107
+ ```bash
108
+ cp .env.example .env.huggingface
109
+ ```
110
 
111
  2. Execute o deploy:
 
 
 
112
 
113
+ ```bash
114
+ ./deploy.sh
115
+ ```
116
 
117
+ ## Máquinas Recomendadas
118
 
119
  ### GPU
120
+
121
  - NVIDIA T4 16GB (Hugging Face Pro)
122
  - NVIDIA A100 (Performance máxima)
123
  - NVIDIA V100 (Alternativa)
124
 
125
  ### CPU
126
+
127
  - 8+ cores
128
  - 32GB+ RAM
129
  - SSD para armazenamento
130
 
131
+ ## Interface
132
 
133
  ### Componentes
134
+
135
  - Upload de vídeo (MP4, AVI, MOV)
136
  - Configurações de detecção
137
  - Visualização de resultados
138
  - Métricas em tempo real
139
 
140
+ ## Links
 
 
141
 
142
+ - [Hugging Face Space][hf-space]
143
+ - [GitHub Repository][gh-repo]
144
  - [Documentação](docs/)
145
  - [Issues](https://github.com/seu-usuario/hackatoon-1iadt/issues)
146
 
147
+ ## Licença
148
 
149
+ Este projeto está licenciado sob a MIT License - veja o arquivo [LICENSE](LICENSE)
150
+ para detalhes.
151
 
152
+ ## Contribuição
153
 
154
  1. Fork o projeto
155
  2. Crie sua feature branch (`git checkout -b feature/AmazingFeature`)
 
157
  4. Push para a branch (`git push origin feature/AmazingFeature`)
158
  5. Abra um Pull Request
159
 
160
+ ## Suporte
161
 
162
  - Abra uma [issue](https://github.com/seu-usuario/hackatoon-1iadt/issues)
163
  - Consulte a [documentação](docs/)
164
  - Entre em contato com a equipe
 
 
 
docs/api/interface.md CHANGED
@@ -1,6 +1,6 @@
1
  # Interface e API
2
 
3
- ## Interface Web (Gradio)
4
 
5
  ### Componentes Principais
6
 
@@ -64,7 +64,7 @@ Content-Type: multipart/form-data
64
  {
65
  "label": "arma",
66
  "confidence": 95.5,
67
- "bbox": [x1, y1, x2, y2]
68
  }
69
  ]
70
  }
 
1
  # Interface e API
2
 
3
+ ## Interface Web
4
 
5
  ### Componentes Principais
6
 
 
64
  {
65
  "label": "arma",
66
  "confidence": 95.5,
67
+ "bbox": [0, 0, 100, 100]
68
  }
69
  ]
70
  }
docs/architecture/overview.md CHANGED
@@ -7,41 +7,49 @@ O sistema de detecção de riscos em vídeo é construído seguindo os princípi
7
  ## Camadas da Arquitetura
8
 
9
  ### 1. Domain (Núcleo)
 
10
  - Contém as regras de negócio e entidades fundamentais
11
  - Independente de frameworks e bibliotecas externas
12
  - Localização: `src/domain/`
13
 
14
- #### Componentes Principais:
 
15
  - `detectors/`: Implementações dos detectores (GPU/CPU)
16
  - `entities/`: Objetos de domínio
17
  - `factories/`: Fábricas para criação de objetos
18
  - `interfaces/`: Contratos e interfaces
19
 
20
  ### 2. Application
 
21
  - Implementa os casos de uso da aplicação
22
  - Orquestra o fluxo de dados entre as camadas
23
  - Localização: `src/application/`
24
 
25
- #### Casos de Uso:
 
26
  - `process_video`: Processamento e análise de vídeos
27
  - Notificações de detecções
28
  - Gerenciamento de cache
29
 
30
  ### 3. Infrastructure
 
31
  - Implementações concretas de interfaces
32
  - Integrações com serviços externos
33
  - Localização: `src/infrastructure/`
34
 
35
- #### Serviços:
 
36
  - `WeaponDetectorService`: Serviço principal de detecção
37
  - `NotificationService`: Serviço de notificações
38
  - Gerenciamento de GPU/CPU
39
 
40
  ### 4. Presentation
 
41
  - Interface com usuário via Gradio
42
  - Localização: `src/presentation/`
43
 
44
- #### Componentes:
 
45
  - Interface web responsiva
46
  - Configurações de processamento
47
  - Visualização de resultados
@@ -57,11 +65,13 @@ O sistema de detecção de riscos em vídeo é construído seguindo os princípi
57
  ## Otimizações
58
 
59
  ### GPU
 
60
  - Detecção automática de hardware
61
  - Configurações específicas para T4 e Zero-GPU
62
  - Gerenciamento de memória otimizado
63
 
64
  ### CPU
 
65
  - Fallback automático
66
  - Otimizações para processamento em CPU
67
  - Cache de resultados
@@ -81,14 +91,17 @@ graph TD
81
 
82
  ## Considerações de Design
83
 
84
- 1. **Inversão de Dependência**
85
- - Interfaces abstratas no domínio
86
- - Implementações concretas na infraestrutura
 
 
 
 
 
 
87
 
88
- 2. **Single Responsibility**
89
- - Cada componente com responsabilidade única
90
- - Separação clara de concerns
91
 
92
- 3. **Open/Closed**
93
- - Extensível para novos detectores
94
- - Fácil adição de novos serviços
 
7
  ## Camadas da Arquitetura
8
 
9
  ### 1. Domain (Núcleo)
10
+
11
  - Contém as regras de negócio e entidades fundamentais
12
  - Independente de frameworks e bibliotecas externas
13
  - Localização: `src/domain/`
14
 
15
+ #### Componentes Principais
16
+
17
  - `detectors/`: Implementações dos detectores (GPU/CPU)
18
  - `entities/`: Objetos de domínio
19
  - `factories/`: Fábricas para criação de objetos
20
  - `interfaces/`: Contratos e interfaces
21
 
22
  ### 2. Application
23
+
24
  - Implementa os casos de uso da aplicação
25
  - Orquestra o fluxo de dados entre as camadas
26
  - Localização: `src/application/`
27
 
28
+ #### Casos de Uso
29
+
30
  - `process_video`: Processamento e análise de vídeos
31
  - Notificações de detecções
32
  - Gerenciamento de cache
33
 
34
  ### 3. Infrastructure
35
+
36
  - Implementações concretas de interfaces
37
  - Integrações com serviços externos
38
  - Localização: `src/infrastructure/`
39
 
40
+ #### Serviços
41
+
42
  - `WeaponDetectorService`: Serviço principal de detecção
43
  - `NotificationService`: Serviço de notificações
44
  - Gerenciamento de GPU/CPU
45
 
46
  ### 4. Presentation
47
+
48
  - Interface com usuário via Gradio
49
  - Localização: `src/presentation/`
50
 
51
+ #### Componentes
52
+
53
  - Interface web responsiva
54
  - Configurações de processamento
55
  - Visualização de resultados
 
65
  ## Otimizações
66
 
67
  ### GPU
68
+
69
  - Detecção automática de hardware
70
  - Configurações específicas para T4 e Zero-GPU
71
  - Gerenciamento de memória otimizado
72
 
73
  ### CPU
74
+
75
  - Fallback automático
76
  - Otimizações para processamento em CPU
77
  - Cache de resultados
 
91
 
92
  ## Considerações de Design
93
 
94
+ ### 1. Inversão de Dependência
95
+
96
+ - Interfaces abstratas no domínio
97
+ - Implementações concretas na infraestrutura
98
+
99
+ ### 2. Single Responsibility
100
+
101
+ - Cada componente com responsabilidade única
102
+ - Separação clara de concerns
103
 
104
+ ### 3. Open/Closed
 
 
105
 
106
+ - Extensível para novos detectores
107
+ - Fácil adição de novos serviços
 
docs/development/development.md ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Guia de Desenvolvimento
2
+
3
+ ## Ambiente de Desenvolvimento
4
+
5
+ ### Configuração do Ambiente
6
+
7
+ 1. **Preparação do Sistema**
8
+
9
+ - Instale Python 3.10+
10
+ - Configure CUDA 11.8+ (para GPU)
11
+ - Instale Git
12
+
13
+ 2. **Configuração do Projeto**
14
+
15
+ ```bash
16
+ # Clone o repositório
17
+ git clone https://github.com/seu-usuario/hackatoon-1iadt.git
18
+ cd hackatoon-1iadt
19
+
20
+ # Crie e ative o ambiente virtual
21
+ python -m venv venv
22
+ source venv/bin/activate # Linux/Mac
23
+ .\venv\Scripts\activate # Windows
24
+
25
+ # Instale as dependências
26
+ pip install -r requirements.txt
27
+ ```
28
+
29
+ ### Ferramentas Recomendadas
30
+
31
+ - **IDE**: VSCode com extensões:
32
+ - Python
33
+ - Pylance
34
+ - GitLens
35
+ - Python Test Explorer
36
+
37
+ - **Linters e Formatadores**:
38
+ - Ruff
39
+ - Black
40
+ - isort
41
+ - mypy
42
+
43
+ ## Padrões de Código
44
+
45
+ ### Estilo de Código
46
+
47
+ 1. **PEP 8**
48
+
49
+ - Máximo 88 caracteres por linha
50
+ - 4 espaços para indentação
51
+ - Sem tabs, apenas espaços
52
+
53
+ 2. **Docstrings**
54
+
55
+ ```python
56
+ def process_video(video_path: str, fps: int = 2) -> dict:
57
+ """Processa um vídeo para detecção de objetos.
58
+
59
+ Args:
60
+ video_path: Caminho do arquivo de vídeo
61
+ fps: Frames por segundo para processamento
62
+
63
+ Returns:
64
+ Dicionário com resultados da detecção
65
+
66
+ Raises:
67
+ FileNotFoundError: Se o vídeo não for encontrado
68
+ """
69
+ pass
70
+ ```
71
+
72
+ 3. **Type Hints**
73
+
74
+ ```python
75
+ from typing import List, Dict, Optional
76
+
77
+ def detect_objects(
78
+ frame: np.ndarray,
79
+ confidence: float = 0.5
80
+ ) -> List[Dict[str, Any]]:
81
+ pass
82
+ ```
83
+
84
+ ## Testes
85
+
86
+ ### Estrutura de Testes
87
+
88
+ ```plaintext
89
+ tests/
90
+ ├── unit/
91
+ │ ├── test_detector.py
92
+ │ └── test_video_processor.py
93
+ ├── integration/
94
+ │ └── test_api.py
95
+ └── conftest.py
96
+ ```
97
+
98
+ ### Exemplos de Testes
99
+
100
+ ```python
101
+ def test_detector_initialization():
102
+ """Testa a inicialização do detector."""
103
+ detector = WeaponDetector()
104
+ assert detector.is_initialized()
105
+ assert detector.device == "cuda" if torch.cuda.is_available() else "cpu"
106
+
107
+ @pytest.mark.parametrize("threshold", [0.3, 0.5, 0.7])
108
+ def test_detection_threshold(threshold):
109
+ """Testa diferentes limiares de detecção."""
110
+ detector = WeaponDetector()
111
+ result = detector.detect(sample_image, threshold=threshold)
112
+ assert all(d["confidence"] >= threshold for d in result)
113
+ ```
114
+
115
+ ## Fluxo de Trabalho
116
+
117
+ ### Git Flow
118
+
119
+ 1. **Branches Principais**
120
+
121
+ - `main`: Produção
122
+ - `develop`: Desenvolvimento
123
+ - `feature/*`: Novas funcionalidades
124
+ - `fix/*`: Correções
125
+ - `release/*`: Preparação de release
126
+
127
+ 2. **Commits**
128
+
129
+ ```plaintext
130
+ feat: Adiciona detecção em tempo real
131
+ ^--^ ^------------------------^
132
+ | |
133
+ | +-> Descrição no presente
134
+ |
135
+ +-------> Tipo: feat, fix, docs, style, refactor
136
+ ```
137
+
138
+ ### CI/CD
139
+
140
+ 1. **GitHub Actions**
141
+
142
+ ```yaml
143
+ name: CI
144
+ on: [push, pull_request]
145
+ jobs:
146
+ test:
147
+ runs-on: ubuntu-latest
148
+ steps:
149
+ - uses: actions/checkout@v2
150
+ - name: Test
151
+ run: pytest
152
+ ```
153
+
154
+ 2. **Deploy**
155
+
156
+ ```bash
157
+ # Deploy para staging
158
+ ./deploy.sh staging
159
+
160
+ # Deploy para produção
161
+ ./deploy.sh production
162
+ ```
163
+
164
+ ## Debugging
165
+
166
+ ### Logs
167
+
168
+ ```python
169
+ import logging
170
+
171
+ logger = logging.getLogger(__name__)
172
+ logger.info("Processando frame %d", frame_number)
173
+ ```
174
+
175
+ ### Profiling
176
+
177
+ ```python
178
+ import cProfile
179
+
180
+ def profile_detection():
181
+ profiler = cProfile.Profile()
182
+ profiler.enable()
183
+ # código
184
+ profiler.disable()
185
+ profiler.print_stats()
186
+ ```
187
+
188
+ ## Otimizações
189
+
190
+ ### GPU
191
+
192
+ - Batch processing
193
+ - Memória pinned
194
+ - Async data loading
195
+ - Cache de modelos
196
+
197
+ ### CPU
198
+
199
+ - Multiprocessing
200
+ - NumPy vectorization
201
+ - Cache de resultados
202
+ - Otimização de memória
docs/faq.md ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # FAQ
2
+
3
+ ## Geral
4
+
5
+ ### Como o sistema funciona?
6
+
7
+ O sistema utiliza um modelo de IA (OWL-ViT) para detectar objetos de risco em vídeos.
8
+ O processamento pode ser feito em GPU ou CPU, com otimizações específicas para cada caso.
9
+
10
+ ### Quais objetos são detectados?
11
+
12
+ #### Armas de Fogo
13
+
14
+ - Pistolas
15
+ - Rifles
16
+ - Espingardas
17
+
18
+ #### Armas Brancas
19
+
20
+ - Facas
21
+ - Canivetes
22
+ - Objetos pontiagudos
23
+
24
+ #### Outros Objetos
25
+
26
+ - Bastões
27
+ - Objetos contundentes
28
+ - Materiais explosivos
29
+
30
+ ## Técnico
31
+
32
+ ### Requisitos de Hardware
33
+
34
+ #### GPU
35
+
36
+ - NVIDIA T4 16GB (recomendado)
37
+ - CUDA 11.8+
38
+ - 16GB RAM
39
+
40
+ #### CPU
41
+
42
+ - 8+ cores
43
+ - 32GB RAM
44
+ - SSD para cache
45
+
46
+ ### Problemas Comuns
47
+
48
+ #### Erro CUDA
49
+
50
+ **Problema**: `CUDA not available`
51
+
52
+ **Solução**:
53
+
54
+ ```bash
55
+ nvidia-smi
56
+ pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/cu118
57
+ ```
58
+
59
+ #### Memória Insuficiente
60
+
61
+ **Problema**: `CUDA out of memory`
62
+
63
+ **Solução**:
64
+
65
+ - Reduza o tamanho do batch
66
+ - Diminua a resolução
67
+ - Ajuste `GPU_MEMORY_FRACTION` no `.env`
68
+
69
+ ## Performance
70
+
71
+ ### Como melhorar a performance?
72
+
73
+ #### GPU
74
+
75
+ - Use batch processing
76
+ - Ative half precision
77
+ - Otimize o cache de modelos
78
+
79
+ #### CPU
80
+
81
+ - Ative multiprocessing
82
+ - Use vetorização NumPy
83
+ - Implemente cache de resultados
84
+
85
+ ### Configurações Recomendadas
86
+
87
+ ```plaintext
88
+ # GPU T4
89
+ GPU_MEMORY_FRACTION=0.9
90
+ BATCH_SIZE=16
91
+ USE_HALF_PRECISION=true
92
+
93
+ # CPU
94
+ MAX_WORKERS=8
95
+ CACHE_SIZE=1000
96
+ USE_MULTIPROCESSING=true
97
+ ```
98
+
99
+ ## Deployment
100
+
101
+ ### Como fazer deploy no Hugging Face?
102
+
103
+ 1. Configure as credenciais:
104
+
105
+ ```bash
106
+ cp .env.example .env.huggingface
107
+ ```
108
+
109
+ 2. Edite as variáveis:
110
+
111
+ ```plaintext
112
+ HF_SPACE_ID=seu-espaco
113
+ HF_TOKEN=seu_token
114
+ ```
115
+
116
+ 3. Execute o deploy:
117
+
118
+ ```bash
119
+ ./deploy.sh
120
+ ```
121
+
122
+ ### Monitoramento
123
+
124
+ - Use os logs em `logs/app.log`
125
+ - Monitore GPU com `nvidia-smi`
126
+ - Verifique métricas no Hugging Face
127
+
128
+ ## Segurança
129
+
130
+ ### Como proteger as credenciais?
131
+
132
+ 1. Use variáveis de ambiente:
133
+
134
+ ```bash
135
+ cp .env.example .env
136
+ ```
137
+
138
+ 2. Nunca comite arquivos `.env`
139
+ 3. Use secrets no Hugging Face
140
+
141
+ ### Validação de Entrada
142
+
143
+ - Limite o tamanho dos vídeos
144
+ - Verifique formatos permitidos
145
+ - Sanitize inputs
src/domain/detectors/base.py CHANGED
@@ -7,6 +7,7 @@ import os
7
  import cv2
8
  from PIL import Image
9
  import time
 
10
 
11
  logger = logging.getLogger(__name__)
12
 
 
7
  import cv2
8
  from PIL import Image
9
  import time
10
+ import sys
11
 
12
  logger = logging.getLogger(__name__)
13
 
src/presentation/web/gradio_interface.py CHANGED
@@ -223,33 +223,17 @@ class GradioInterface:
223
  """)
224
  # Vídeos de exemplo
225
  if sample_videos:
226
- with gr.Group():
227
- gr.Markdown("### Vídeos de Exemplo")
228
- with gr.Row():
229
- with gr.Column(scale=3):
230
- gr.Markdown("#### Vídeo")
231
- with gr.Column(scale=1):
232
- gr.Markdown("#### Ação")
233
-
234
- for video in sample_videos:
235
- with gr.Row():
236
- with gr.Column(scale=3):
237
- gr.PlayableVideo(
238
- value=video['path'],
239
- format="mp4",
240
- height=150,
241
- interactive=True,
242
- show_label=True)
243
-
244
- with gr.Column(scale=1, min_width=100):
245
- gr.Button(
246
- "📥 Carregar",
247
- size="md"
248
- ).click(
249
- fn=self.load_sample_video,
250
- inputs=[gr.State(video['path'])],
251
- outputs=[input_video]
252
- )
253
 
254
  # Configurar callback do botão
255
  submit_btn.click(
 
223
  """)
224
  # Vídeos de exemplo
225
  if sample_videos:
226
+ gr.Markdown("### Vídeos de Exemplo")
227
+ examples = [
228
+ [video['path']] for video in sample_videos
229
+ ]
230
+ gr.Examples(
231
+ examples=examples,
232
+ inputs=input_video,
233
+ outputs=input_video,
234
+ fn=self.load_sample_video,
235
+ label="Clique em um vídeo para carregá-lo"
236
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
 
238
  # Configurar callback do botão
239
  submit_btn.click(