Spaces:
Runtime error
Runtime error
Marcus Vinicius Zerbini Canhaço
commited on
Commit
·
eb1a752
1
Parent(s):
f84a89d
feat: atualização do detector com otimizações para GPU T4
Browse files- docs/api/interface.md +10 -1
- docs/architecture/overview.md +204 -1
- docs/development/contributing.md +25 -12
- docs/development/development.md +1 -1
- docs/faq.md +99 -12
- docs/scenarios.md +219 -0
- docs/setup/installation.md +68 -50
- src/main.py +1 -1
docs/api/interface.md
CHANGED
@@ -22,6 +22,7 @@
|
|
22 |
### Exemplos de Uso
|
23 |
|
24 |
1. **Upload Simples**
|
|
|
25 |
```python
|
26 |
with gr.Blocks() as demo:
|
27 |
video_input = gr.Video()
|
@@ -30,6 +31,7 @@
|
|
30 |
```
|
31 |
|
32 |
2. **Configurações Avançadas**
|
|
|
33 |
```python
|
34 |
with gr.Blocks() as demo:
|
35 |
with gr.Row():
|
@@ -42,6 +44,7 @@
|
|
42 |
### Endpoints
|
43 |
|
44 |
#### 1. Detecção em Vídeo
|
|
|
45 |
```http
|
46 |
POST /api/detect
|
47 |
Content-Type: multipart/form-data
|
@@ -54,6 +57,7 @@ Content-Type: multipart/form-data
|
|
54 |
```
|
55 |
|
56 |
**Resposta:**
|
|
|
57 |
```json
|
58 |
{
|
59 |
"detections": [
|
@@ -78,6 +82,7 @@ Content-Type: multipart/form-data
|
|
78 |
```
|
79 |
|
80 |
#### 2. Status do Serviço
|
|
|
81 |
```http
|
82 |
GET /api/status
|
83 |
|
@@ -106,6 +111,7 @@ Response:
|
|
106 |
## Webhooks
|
107 |
|
108 |
### Configuração
|
|
|
109 |
```http
|
110 |
POST /api/webhooks/configure
|
111 |
{
|
@@ -116,6 +122,7 @@ POST /api/webhooks/configure
|
|
116 |
```
|
117 |
|
118 |
### Formato do Callback
|
|
|
119 |
```json
|
120 |
{
|
121 |
"event": "detection",
|
@@ -131,6 +138,7 @@ POST /api/webhooks/configure
|
|
131 |
## Integração com Outros Serviços
|
132 |
|
133 |
### 1. Hugging Face
|
|
|
134 |
```python
|
135 |
from huggingface_hub import HfApi
|
136 |
|
@@ -143,6 +151,7 @@ api.upload_file(
|
|
143 |
```
|
144 |
|
145 |
### 2. Sistemas de Notificação
|
|
|
146 |
```python
|
147 |
def notify(detection):
|
148 |
requests.post(
|
@@ -164,4 +173,4 @@ def notify(detection):
|
|
164 |
3. **Validação de Entrada**
|
165 |
- Tamanho máximo
|
166 |
- Formatos permitidos
|
167 |
-
- Sanitização
|
|
|
22 |
### Exemplos de Uso
|
23 |
|
24 |
1. **Upload Simples**
|
25 |
+
|
26 |
```python
|
27 |
with gr.Blocks() as demo:
|
28 |
video_input = gr.Video()
|
|
|
31 |
```
|
32 |
|
33 |
2. **Configurações Avançadas**
|
34 |
+
|
35 |
```python
|
36 |
with gr.Blocks() as demo:
|
37 |
with gr.Row():
|
|
|
44 |
### Endpoints
|
45 |
|
46 |
#### 1. Detecção em Vídeo
|
47 |
+
|
48 |
```http
|
49 |
POST /api/detect
|
50 |
Content-Type: multipart/form-data
|
|
|
57 |
```
|
58 |
|
59 |
**Resposta:**
|
60 |
+
|
61 |
```json
|
62 |
{
|
63 |
"detections": [
|
|
|
82 |
```
|
83 |
|
84 |
#### 2. Status do Serviço
|
85 |
+
|
86 |
```http
|
87 |
GET /api/status
|
88 |
|
|
|
111 |
## Webhooks
|
112 |
|
113 |
### Configuração
|
114 |
+
|
115 |
```http
|
116 |
POST /api/webhooks/configure
|
117 |
{
|
|
|
122 |
```
|
123 |
|
124 |
### Formato do Callback
|
125 |
+
|
126 |
```json
|
127 |
{
|
128 |
"event": "detection",
|
|
|
138 |
## Integração com Outros Serviços
|
139 |
|
140 |
### 1. Hugging Face
|
141 |
+
|
142 |
```python
|
143 |
from huggingface_hub import HfApi
|
144 |
|
|
|
151 |
```
|
152 |
|
153 |
### 2. Sistemas de Notificação
|
154 |
+
|
155 |
```python
|
156 |
def notify(detection):
|
157 |
requests.post(
|
|
|
173 |
3. **Validação de Entrada**
|
174 |
- Tamanho máximo
|
175 |
- Formatos permitidos
|
176 |
+
- Sanitização
|
docs/architecture/overview.md
CHANGED
@@ -4,6 +4,209 @@
|
|
4 |
|
5 |
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.
|
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
## Camadas da Arquitetura
|
8 |
|
9 |
### 1. Domain (Núcleo)
|
@@ -104,4 +307,4 @@ graph TD
|
|
104 |
### 3. Open/Closed
|
105 |
|
106 |
- Extensível para novos detectores
|
107 |
-
- Fácil adição de novos serviços
|
|
|
4 |
|
5 |
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.
|
6 |
|
7 |
+
## Modelo de IA: OWL-ViT
|
8 |
+
|
9 |
+
O OWL-ViT (Vision Transformer for Open-World Localization) é um modelo de visão computacional avançado que combina:
|
10 |
+
|
11 |
+
- Transformers para processamento de imagens
|
12 |
+
- Zero-shot learning para detecção de objetos
|
13 |
+
- Queries em linguagem natural para especificar alvos
|
14 |
+
|
15 |
+
### Considerações Técnicas
|
16 |
+
|
17 |
+
#### Versões do Modelo
|
18 |
+
|
19 |
+
1. **OWL-ViT Base (Atual)**
|
20 |
+
|
21 |
+
```python
|
22 |
+
model_name = "google/owlv2-base-patch16"
|
23 |
+
```
|
24 |
+
|
25 |
+
- Compatível com GPU T4
|
26 |
+
- Otimizado para inference
|
27 |
+
- Suporte a half precision
|
28 |
+
|
29 |
+
2. **OWL-ViT Ensemble (Descontinuado)**
|
30 |
+
|
31 |
+
```python
|
32 |
+
model_name = "google/owlv2-base-patch16-ensemble"
|
33 |
+
```
|
34 |
+
|
35 |
+
- Problemas de compatibilidade GPU
|
36 |
+
- Requer branch dev do Transformers
|
37 |
+
- Maior precisão, mas instável
|
38 |
+
|
39 |
+
#### Requisitos Específicos
|
40 |
+
|
41 |
+
```python
|
42 |
+
# Configurações necessárias para GPU
|
43 |
+
torch.backends.cuda.matmul.allow_tf32 = True
|
44 |
+
torch.backends.cudnn.benchmark = True
|
45 |
+
model = model.half() # Usar FP16
|
46 |
+
|
47 |
+
# Branch específico do Transformers
|
48 |
+
# pip install git+https://github.com/huggingface/transformers.git
|
49 |
+
```
|
50 |
+
|
51 |
+
### Como Funciona
|
52 |
+
|
53 |
+
1. **Processamento de Imagem**
|
54 |
+
- Divide a imagem em patches
|
55 |
+
- Processa usando arquitetura Transformer
|
56 |
+
- Gera representações visuais ricas
|
57 |
+
|
58 |
+
2. **Sistema de Queries**
|
59 |
+
- Aceita descrições em texto natural
|
60 |
+
- Exemplos de queries efetivas:
|
61 |
+
|
62 |
+
```python
|
63 |
+
queries = [
|
64 |
+
"uma arma de fogo",
|
65 |
+
"uma pistola",
|
66 |
+
"um rifle",
|
67 |
+
"uma faca",
|
68 |
+
"um objeto pontiagudo perigoso"
|
69 |
+
]
|
70 |
+
```
|
71 |
+
|
72 |
+
3. **Detecção Zero-shot**
|
73 |
+
- Não requer treinamento específico
|
74 |
+
- Adapta-se a novos objetos
|
75 |
+
- Alta precisão em tempo real
|
76 |
+
|
77 |
+
## Clean Architecture
|
78 |
+
|
79 |
+
### Camadas
|
80 |
+
|
81 |
+
```mermaid
|
82 |
+
graph TD
|
83 |
+
A[Presentation] --> B[Application]
|
84 |
+
B --> C[Domain]
|
85 |
+
D[Infrastructure] --> B
|
86 |
+
D --> C
|
87 |
+
```
|
88 |
+
|
89 |
+
1. **Domain (Núcleo)**
|
90 |
+
- Regras de negócio
|
91 |
+
- Entidades fundamentais
|
92 |
+
- Interfaces abstratas
|
93 |
+
|
94 |
+
2. **Application**
|
95 |
+
- Casos de uso
|
96 |
+
- Orquestração
|
97 |
+
- Lógica de aplicação
|
98 |
+
|
99 |
+
3. **Infrastructure**
|
100 |
+
- Implementações concretas
|
101 |
+
- Integrações externas
|
102 |
+
- Adaptadores
|
103 |
+
|
104 |
+
4. **Presentation**
|
105 |
+
- Interface Gradio
|
106 |
+
- APIs REST
|
107 |
+
- Webhooks
|
108 |
+
|
109 |
+
### Diagrama de Classes
|
110 |
+
|
111 |
+
```mermaid
|
112 |
+
classDiagram
|
113 |
+
class DetectorInterface {
|
114 |
+
<<interface>>
|
115 |
+
+process_video()
|
116 |
+
+detect_objects()
|
117 |
+
+clean_memory()
|
118 |
+
}
|
119 |
+
|
120 |
+
class WeaponDetectorGPU {
|
121 |
+
-model: OWLViT
|
122 |
+
+process_video()
|
123 |
+
+detect_objects()
|
124 |
+
}
|
125 |
+
|
126 |
+
class WeaponDetectorCPU {
|
127 |
+
-model: OWLViT
|
128 |
+
+process_video()
|
129 |
+
+detect_objects()
|
130 |
+
}
|
131 |
+
|
132 |
+
class NotificationService {
|
133 |
+
<<interface>>
|
134 |
+
+send_notification()
|
135 |
+
}
|
136 |
+
|
137 |
+
DetectorInterface <|-- WeaponDetectorGPU
|
138 |
+
DetectorInterface <|-- WeaponDetectorCPU
|
139 |
+
NotificationService <|-- EmailNotification
|
140 |
+
NotificationService <|-- TelegramNotification
|
141 |
+
```
|
142 |
+
|
143 |
+
## Extensibilidade
|
144 |
+
|
145 |
+
### 1. Novos Modelos de IA
|
146 |
+
|
147 |
+
```python
|
148 |
+
class NewDetector(DetectorInterface):
|
149 |
+
"""Implementação de novo detector."""
|
150 |
+
def process_video(self):
|
151 |
+
# Implementação específica
|
152 |
+
pass
|
153 |
+
```
|
154 |
+
|
155 |
+
### 2. Suporte a Hardware
|
156 |
+
|
157 |
+
- Abstração de hardware via interfaces
|
158 |
+
- Fácil adição de novos backends:
|
159 |
+
- TPU
|
160 |
+
- Neural Engine
|
161 |
+
- Outros aceleradores
|
162 |
+
|
163 |
+
### 3. Sistema de Notificações
|
164 |
+
|
165 |
+
```python
|
166 |
+
class NewNotificationService(NotificationService):
|
167 |
+
"""Novo serviço de notificação."""
|
168 |
+
def send_notification(self):
|
169 |
+
# Implementação específica
|
170 |
+
pass
|
171 |
+
```
|
172 |
+
|
173 |
+
## Fluxo de Processamento
|
174 |
+
|
175 |
+
```mermaid
|
176 |
+
sequenceDiagram
|
177 |
+
participant UI as Interface
|
178 |
+
participant App as Application
|
179 |
+
participant Det as Detector
|
180 |
+
participant Not as Notification
|
181 |
+
|
182 |
+
UI->>App: Upload Vídeo
|
183 |
+
App->>Det: Processa Vídeo
|
184 |
+
Det->>Det: Extrai Frames
|
185 |
+
loop Cada Frame
|
186 |
+
Det->>Det: Detecta Objetos
|
187 |
+
end
|
188 |
+
Det->>App: Retorna Resultados
|
189 |
+
App->>Not: Envia Notificação
|
190 |
+
App->>UI: Atualiza Interface
|
191 |
+
```
|
192 |
+
|
193 |
+
## Benefícios da Arquitetura
|
194 |
+
|
195 |
+
1. **Desacoplamento**
|
196 |
+
- Mudanças em uma camada não afetam outras
|
197 |
+
- Facilita testes unitários
|
198 |
+
- Permite evolução independente
|
199 |
+
|
200 |
+
2. **Manutenibilidade**
|
201 |
+
- Código organizado e previsível
|
202 |
+
- Responsabilidades bem definidas
|
203 |
+
- Fácil localização de problemas
|
204 |
+
|
205 |
+
3. **Escalabilidade**
|
206 |
+
- Novos detectores sem mudanças no core
|
207 |
+
- Múltiplos backends de processamento
|
208 |
+
- Sistemas de notificação plugáveis
|
209 |
+
|
210 |
## Camadas da Arquitetura
|
211 |
|
212 |
### 1. Domain (Núcleo)
|
|
|
307 |
### 3. Open/Closed
|
308 |
|
309 |
- Extensível para novos detectores
|
310 |
+
- Fácil adição de novos serviços
|
docs/development/contributing.md
CHANGED
@@ -12,12 +12,14 @@
|
|
12 |
- Python Test Explorer
|
13 |
|
14 |
2. **Configuração do Git**
|
|
|
15 |
```bash
|
16 |
git config --global user.name "Seu Nome"
|
17 |
git config --global user.email "[email protected]"
|
18 |
```
|
19 |
|
20 |
3. **Pre-commit Hooks**
|
|
|
21 |
```bash
|
22 |
pip install pre-commit
|
23 |
pre-commit install
|
@@ -26,12 +28,14 @@
|
|
26 |
## Padrões de Código
|
27 |
|
28 |
### 1. Estilo
|
|
|
29 |
- PEP 8
|
30 |
- Máximo 88 caracteres por linha
|
31 |
- Docstrings em todas as funções/classes
|
32 |
- Type hints obrigatórios
|
33 |
|
34 |
Exemplo:
|
|
|
35 |
```python
|
36 |
def process_frame(
|
37 |
frame: np.ndarray,
|
@@ -50,7 +54,8 @@ def process_frame(
|
|
50 |
```
|
51 |
|
52 |
### 2. Estrutura de Arquivos
|
53 |
-
|
|
|
54 |
src/
|
55 |
├── domain/
|
56 |
│ ├── entities/
|
@@ -66,11 +71,13 @@ src/
|
|
66 |
```
|
67 |
|
68 |
### 3. Testes
|
|
|
69 |
- pytest para testes unitários
|
70 |
- pytest-cov para cobertura
|
71 |
- Mocking para dependências externas
|
72 |
|
73 |
Exemplo:
|
|
|
74 |
```python
|
75 |
def test_process_frame():
|
76 |
detector = WeaponDetector()
|
@@ -82,23 +89,15 @@ def test_process_frame():
|
|
82 |
## Fluxo de Trabalho
|
83 |
|
84 |
### 1. Branches
|
|
|
85 |
- `main`: Produção
|
86 |
- `develop`: Desenvolvimento
|
87 |
- `feature/*`: Novas funcionalidades
|
88 |
- `fix/*`: Correções
|
89 |
- `release/*`: Preparação de release
|
90 |
|
91 |
-
### 2.
|
92 |
-
```
|
93 |
-
feat: Adiciona detecção em tempo real
|
94 |
-
^--^ ^------------------------^
|
95 |
-
| |
|
96 |
-
| +-> Descrição no presente
|
97 |
-
|
|
98 |
-
+-------> Tipo: feat, fix, docs, style, refactor
|
99 |
-
```
|
100 |
|
101 |
-
### 3. Pull Requests
|
102 |
- Template obrigatório
|
103 |
- Code review necessário
|
104 |
- CI deve passar
|
@@ -107,6 +106,7 @@ feat: Adiciona detecção em tempo real
|
|
107 |
## CI/CD
|
108 |
|
109 |
### GitHub Actions
|
|
|
110 |
```yaml
|
111 |
name: CI
|
112 |
|
@@ -130,12 +130,15 @@ jobs:
|
|
130 |
```
|
131 |
|
132 |
### Deploy
|
|
|
133 |
1. Staging
|
|
|
134 |
```bash
|
135 |
./deploy.sh staging
|
136 |
```
|
137 |
|
138 |
2. Produção
|
|
|
139 |
```bash
|
140 |
./deploy.sh production
|
141 |
```
|
@@ -143,6 +146,7 @@ jobs:
|
|
143 |
## Debugging
|
144 |
|
145 |
### 1. Logs
|
|
|
146 |
```python
|
147 |
import logging
|
148 |
|
@@ -151,6 +155,7 @@ logger.info("Processando frame %d", frame_number)
|
|
151 |
```
|
152 |
|
153 |
### 2. Profiling
|
|
|
154 |
```python
|
155 |
import cProfile
|
156 |
|
@@ -163,6 +168,7 @@ def profile_detection():
|
|
163 |
```
|
164 |
|
165 |
### 3. GPU Monitoring
|
|
|
166 |
```python
|
167 |
import torch
|
168 |
|
@@ -173,11 +179,13 @@ def check_gpu():
|
|
173 |
## Otimizações
|
174 |
|
175 |
### 1. GPU
|
|
|
176 |
- Batch processing
|
177 |
- Memória pinned
|
178 |
- Async data loading
|
179 |
|
180 |
### 2. CPU
|
|
|
181 |
- Multiprocessing
|
182 |
- NumPy vectorization
|
183 |
- Cache de resultados
|
@@ -185,11 +193,13 @@ def check_gpu():
|
|
185 |
## Segurança
|
186 |
|
187 |
### 1. Dependências
|
|
|
188 |
- Safety check
|
189 |
- Dependabot
|
190 |
- SAST scanning
|
191 |
|
192 |
### 2. Código
|
|
|
193 |
- Input validation
|
194 |
- Error handling
|
195 |
- Secrets management
|
@@ -197,6 +207,7 @@ def check_gpu():
|
|
197 |
## Documentação
|
198 |
|
199 |
### 1. Docstrings
|
|
|
200 |
```python
|
201 |
def detect_objects(
|
202 |
self,
|
@@ -217,12 +228,14 @@ def detect_objects(
|
|
217 |
```
|
218 |
|
219 |
### 2. Sphinx
|
|
|
220 |
```bash
|
221 |
cd docs
|
222 |
make html
|
223 |
```
|
224 |
|
225 |
### 3. README
|
|
|
226 |
- Badges atualizados
|
227 |
- Exemplos práticos
|
228 |
-
- Troubleshooting comum
|
|
|
12 |
- Python Test Explorer
|
13 |
|
14 |
2. **Configuração do Git**
|
15 |
+
|
16 |
```bash
|
17 |
git config --global user.name "Seu Nome"
|
18 |
git config --global user.email "[email protected]"
|
19 |
```
|
20 |
|
21 |
3. **Pre-commit Hooks**
|
22 |
+
|
23 |
```bash
|
24 |
pip install pre-commit
|
25 |
pre-commit install
|
|
|
28 |
## Padrões de Código
|
29 |
|
30 |
### 1. Estilo
|
31 |
+
|
32 |
- PEP 8
|
33 |
- Máximo 88 caracteres por linha
|
34 |
- Docstrings em todas as funções/classes
|
35 |
- Type hints obrigatórios
|
36 |
|
37 |
Exemplo:
|
38 |
+
|
39 |
```python
|
40 |
def process_frame(
|
41 |
frame: np.ndarray,
|
|
|
54 |
```
|
55 |
|
56 |
### 2. Estrutura de Arquivos
|
57 |
+
|
58 |
+
```md
|
59 |
src/
|
60 |
├── domain/
|
61 |
│ ├── entities/
|
|
|
71 |
```
|
72 |
|
73 |
### 3. Testes
|
74 |
+
|
75 |
- pytest para testes unitários
|
76 |
- pytest-cov para cobertura
|
77 |
- Mocking para dependências externas
|
78 |
|
79 |
Exemplo:
|
80 |
+
|
81 |
```python
|
82 |
def test_process_frame():
|
83 |
detector = WeaponDetector()
|
|
|
89 |
## Fluxo de Trabalho
|
90 |
|
91 |
### 1. Branches
|
92 |
+
|
93 |
- `main`: Produção
|
94 |
- `develop`: Desenvolvimento
|
95 |
- `feature/*`: Novas funcionalidades
|
96 |
- `fix/*`: Correções
|
97 |
- `release/*`: Preparação de release
|
98 |
|
99 |
+
### 2. Pull Requests
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
|
|
|
101 |
- Template obrigatório
|
102 |
- Code review necessário
|
103 |
- CI deve passar
|
|
|
106 |
## CI/CD
|
107 |
|
108 |
### GitHub Actions
|
109 |
+
|
110 |
```yaml
|
111 |
name: CI
|
112 |
|
|
|
130 |
```
|
131 |
|
132 |
### Deploy
|
133 |
+
|
134 |
1. Staging
|
135 |
+
|
136 |
```bash
|
137 |
./deploy.sh staging
|
138 |
```
|
139 |
|
140 |
2. Produção
|
141 |
+
|
142 |
```bash
|
143 |
./deploy.sh production
|
144 |
```
|
|
|
146 |
## Debugging
|
147 |
|
148 |
### 1. Logs
|
149 |
+
|
150 |
```python
|
151 |
import logging
|
152 |
|
|
|
155 |
```
|
156 |
|
157 |
### 2. Profiling
|
158 |
+
|
159 |
```python
|
160 |
import cProfile
|
161 |
|
|
|
168 |
```
|
169 |
|
170 |
### 3. GPU Monitoring
|
171 |
+
|
172 |
```python
|
173 |
import torch
|
174 |
|
|
|
179 |
## Otimizações
|
180 |
|
181 |
### 1. GPU
|
182 |
+
|
183 |
- Batch processing
|
184 |
- Memória pinned
|
185 |
- Async data loading
|
186 |
|
187 |
### 2. CPU
|
188 |
+
|
189 |
- Multiprocessing
|
190 |
- NumPy vectorization
|
191 |
- Cache de resultados
|
|
|
193 |
## Segurança
|
194 |
|
195 |
### 1. Dependências
|
196 |
+
|
197 |
- Safety check
|
198 |
- Dependabot
|
199 |
- SAST scanning
|
200 |
|
201 |
### 2. Código
|
202 |
+
|
203 |
- Input validation
|
204 |
- Error handling
|
205 |
- Secrets management
|
|
|
207 |
## Documentação
|
208 |
|
209 |
### 1. Docstrings
|
210 |
+
|
211 |
```python
|
212 |
def detect_objects(
|
213 |
self,
|
|
|
228 |
```
|
229 |
|
230 |
### 2. Sphinx
|
231 |
+
|
232 |
```bash
|
233 |
cd docs
|
234 |
make html
|
235 |
```
|
236 |
|
237 |
### 3. README
|
238 |
+
|
239 |
- Badges atualizados
|
240 |
- Exemplos práticos
|
241 |
+
- Troubleshooting comum
|
docs/development/development.md
CHANGED
@@ -199,4 +199,4 @@ def profile_detection():
|
|
199 |
- Multiprocessing
|
200 |
- NumPy vectorization
|
201 |
- Cache de resultados
|
202 |
-
- Otimização de memória
|
|
|
199 |
- Multiprocessing
|
200 |
- NumPy vectorization
|
201 |
- Cache de resultados
|
202 |
+
- Otimização de memória
|
docs/faq.md
CHANGED
@@ -7,7 +7,74 @@
|
|
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 |
-
###
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
12 |
#### Armas de Fogo
|
13 |
|
@@ -31,13 +98,13 @@ O processamento pode ser feito em GPU ou CPU, com otimizações específicas par
|
|
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
|
@@ -68,15 +135,15 @@ pip install torch torchvision --extra-index-url https://download.pytorch.org/whl
|
|
68 |
|
69 |
## Performance
|
70 |
|
71 |
-
###
|
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
|
@@ -85,12 +152,12 @@ pip install torch torchvision --extra-index-url https://download.pytorch.org/whl
|
|
85 |
### Configurações Recomendadas
|
86 |
|
87 |
```plaintext
|
88 |
-
|
89 |
GPU_MEMORY_FRACTION=0.9
|
90 |
BATCH_SIZE=16
|
91 |
USE_HALF_PRECISION=true
|
92 |
|
93 |
-
|
94 |
MAX_WORKERS=8
|
95 |
CACHE_SIZE=1000
|
96 |
USE_MULTIPROCESSING=true
|
@@ -98,7 +165,7 @@ USE_MULTIPROCESSING=true
|
|
98 |
|
99 |
## Deployment
|
100 |
|
101 |
-
###
|
102 |
|
103 |
1. Configure as credenciais:
|
104 |
|
@@ -119,7 +186,7 @@ USE_MULTIPROCESSING=true
|
|
119 |
./deploy.sh
|
120 |
```
|
121 |
|
122 |
-
### Monitoramento
|
123 |
|
124 |
- Use os logs em `logs/app.log`
|
125 |
- Monitore GPU com `nvidia-smi`
|
@@ -127,7 +194,7 @@ USE_MULTIPROCESSING=true
|
|
127 |
|
128 |
## Segurança
|
129 |
|
130 |
-
###
|
131 |
|
132 |
1. Use variáveis de ambiente:
|
133 |
|
@@ -142,4 +209,24 @@ USE_MULTIPROCESSING=true
|
|
142 |
|
143 |
- Limite o tamanho dos vídeos
|
144 |
- Verifique formatos permitidos
|
145 |
-
- Sanitize inputs
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
+
### O que é o OWL-ViT?
|
11 |
+
|
12 |
+
O OWL-ViT (Vision Transformer for Open-World Localization) é um modelo de IA que:
|
13 |
+
|
14 |
+
- Usa arquitetura Transformer para processar imagens
|
15 |
+
- Permite detecção zero-shot de objetos
|
16 |
+
- Aceita queries em linguagem natural
|
17 |
+
- Não precisa de treinamento específico para novos objetos
|
18 |
+
|
19 |
+
### Problemas Conhecidos com OWL-ViT
|
20 |
+
|
21 |
+
#### Limitações do Modelo Ensemble
|
22 |
+
|
23 |
+
O modelo `owlv2-base-patch16-ensemble` apresenta incompatibilidades com processamento GPU:
|
24 |
+
|
25 |
+
- Conflitos com versões estáveis do Transformers
|
26 |
+
- Problemas de memória em GPUs com menos de 16GB
|
27 |
+
- Instabilidade em batch processing
|
28 |
+
|
29 |
+
**Solução Implementada:**
|
30 |
+
|
31 |
+
1. Mudança para modelo base: `owlv2-base-patch16`
|
32 |
+
2. Atualização do Transformers para branch de desenvolvimento:
|
33 |
+
|
34 |
+
```bash
|
35 |
+
pip install git+https://github.com/huggingface/transformers.git
|
36 |
+
```
|
37 |
+
|
38 |
+
3. Ajustes nas configurações de memória GPU:
|
39 |
+
|
40 |
+
```python
|
41 |
+
model = model.to(device='cuda', dtype=torch.float16)
|
42 |
+
```
|
43 |
+
|
44 |
+
#### Comparação de Versões
|
45 |
+
|
46 |
+
1. **Modelo Base**
|
47 |
+
- Mais estável
|
48 |
+
- Menor consumo de memória
|
49 |
+
- Compatível com mais GPUs
|
50 |
+
|
51 |
+
2. **Modelo Ensemble**
|
52 |
+
- Maior precisão
|
53 |
+
- Requer mais recursos
|
54 |
+
- Melhor para CPU
|
55 |
+
|
56 |
+
### Como fazer queries efetivas para o OWL-ViT?
|
57 |
+
|
58 |
+
Para melhores resultados, use estas técnicas:
|
59 |
+
|
60 |
+
1. **Seja Específico**
|
61 |
+
- Bom: "uma pistola preta"
|
62 |
+
- Ruim: "arma"
|
63 |
+
|
64 |
+
2. **Use Variações**
|
65 |
+
- "uma arma de fogo"
|
66 |
+
- "uma pistola"
|
67 |
+
- "um revólver"
|
68 |
+
|
69 |
+
3. **Inclua Contexto**
|
70 |
+
- "uma faca na mão de alguém"
|
71 |
+
- "uma arma apontada"
|
72 |
+
|
73 |
+
4. **Descreva Características**
|
74 |
+
- "uma faca com lâmina metálica"
|
75 |
+
- "um rifle com coronha"
|
76 |
+
|
77 |
+
### Tipos de Objetos Detectados
|
78 |
|
79 |
#### Armas de Fogo
|
80 |
|
|
|
98 |
|
99 |
### Requisitos de Hardware
|
100 |
|
101 |
+
#### Especificações GPU
|
102 |
|
103 |
- NVIDIA T4 16GB (recomendado)
|
104 |
- CUDA 11.8+
|
105 |
- 16GB RAM
|
106 |
|
107 |
+
#### Especificações CPU
|
108 |
|
109 |
- 8+ cores
|
110 |
- 32GB RAM
|
|
|
135 |
|
136 |
## Performance
|
137 |
|
138 |
+
### Otimizações de Sistema
|
139 |
|
140 |
+
#### Ajustes GPU
|
141 |
|
142 |
- Use batch processing
|
143 |
- Ative half precision
|
144 |
- Otimize o cache de modelos
|
145 |
|
146 |
+
#### Ajustes CPU
|
147 |
|
148 |
- Ative multiprocessing
|
149 |
- Use vetorização NumPy
|
|
|
152 |
### Configurações Recomendadas
|
153 |
|
154 |
```plaintext
|
155 |
+
// Configurações para GPU T4
|
156 |
GPU_MEMORY_FRACTION=0.9
|
157 |
BATCH_SIZE=16
|
158 |
USE_HALF_PRECISION=true
|
159 |
|
160 |
+
// Configurações para CPU
|
161 |
MAX_WORKERS=8
|
162 |
CACHE_SIZE=1000
|
163 |
USE_MULTIPROCESSING=true
|
|
|
165 |
|
166 |
## Deployment
|
167 |
|
168 |
+
### Processo de Deploy no Hugging Face
|
169 |
|
170 |
1. Configure as credenciais:
|
171 |
|
|
|
186 |
./deploy.sh
|
187 |
```
|
188 |
|
189 |
+
### Sistema de Monitoramento
|
190 |
|
191 |
- Use os logs em `logs/app.log`
|
192 |
- Monitore GPU com `nvidia-smi`
|
|
|
194 |
|
195 |
## Segurança
|
196 |
|
197 |
+
### Gerenciamento de Credenciais
|
198 |
|
199 |
1. Use variáveis de ambiente:
|
200 |
|
|
|
209 |
|
210 |
- Limite o tamanho dos vídeos
|
211 |
- Verifique formatos permitidos
|
212 |
+
- Sanitize inputs
|
213 |
+
|
214 |
+
```text
|
215 |
+
HUGGINGFACE_TOKEN=seu_token
|
216 |
+
GPU_MEMORY_FRACTION=0.9
|
217 |
+
MAX_CONCURRENT_REQUESTS=2
|
218 |
+
```
|
219 |
+
|
220 |
+
```text
|
221 |
+
USE_GPU=true
|
222 |
+
GPU_DEVICE=0
|
223 |
+
```
|
224 |
+
|
225 |
+
```text
|
226 |
+
USE_GPU=false
|
227 |
+
```
|
228 |
+
|
229 |
+
```text
|
230 |
+
HF_SPACE_ID=seu-espaco
|
231 |
+
HF_TOKEN=seu_token
|
232 |
+
```
|
docs/scenarios.md
ADDED
@@ -0,0 +1,219 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Cenários e Casos de Uso
|
2 |
+
|
3 |
+
## Cenários de Produção
|
4 |
+
|
5 |
+
### Alta Demanda
|
6 |
+
|
7 |
+
#### Múltiplas Requisições
|
8 |
+
|
9 |
+
- Sistema de fila com priorização
|
10 |
+
- Balanceamento GPU/CPU automático
|
11 |
+
- Cache inteligente de resultados
|
12 |
+
|
13 |
+
```python
|
14 |
+
# Exemplo de configuração de fila
|
15 |
+
demo = demo.queue(
|
16 |
+
api_open=False,
|
17 |
+
max_size=10,
|
18 |
+
concurrency_count=2
|
19 |
+
)
|
20 |
+
```
|
21 |
+
|
22 |
+
#### Processamento em Lote
|
23 |
+
|
24 |
+
- Agendamento de análises
|
25 |
+
- Otimização de recursos
|
26 |
+
- Relatórios consolidados
|
27 |
+
|
28 |
+
### Recuperação e Resiliência
|
29 |
+
|
30 |
+
#### Tratamento de Falhas
|
31 |
+
|
32 |
+
```python
|
33 |
+
try:
|
34 |
+
result = detector.process_video(video_path)
|
35 |
+
except GPUOutOfMemoryError:
|
36 |
+
# Fallback para CPU
|
37 |
+
result = cpu_detector.process_video(video_path)
|
38 |
+
except NetworkError:
|
39 |
+
# Retry com backoff exponencial
|
40 |
+
result = retry_with_backoff(process_video, video_path)
|
41 |
+
```
|
42 |
+
|
43 |
+
#### Persistência de Estado
|
44 |
+
|
45 |
+
- Checkpoints de processamento
|
46 |
+
- Retomada após falhas
|
47 |
+
- Backup de configurações
|
48 |
+
|
49 |
+
## Cenários de Integração
|
50 |
+
|
51 |
+
### Sistemas de Vigilância
|
52 |
+
|
53 |
+
#### CCTV e Câmeras IP
|
54 |
+
|
55 |
+
```python
|
56 |
+
# Exemplo de integração com RTSP
|
57 |
+
stream_url = "rtsp://camera.local/stream1"
|
58 |
+
detector.process_stream(stream_url)
|
59 |
+
```
|
60 |
+
|
61 |
+
#### Sistemas Legados
|
62 |
+
|
63 |
+
- Suporte a formatos antigos
|
64 |
+
- APIs de compatibilidade
|
65 |
+
- Conversão de protocolos
|
66 |
+
|
67 |
+
### Compliance e Segurança
|
68 |
+
|
69 |
+
#### LGPD/GDPR
|
70 |
+
|
71 |
+
- Retenção configurável de dados
|
72 |
+
- Anonimização automática
|
73 |
+
- Logs de auditoria detalhados
|
74 |
+
|
75 |
+
```python
|
76 |
+
# Exemplo de política de retenção
|
77 |
+
retention_policy = {
|
78 |
+
"video_data": "7d",
|
79 |
+
"detection_logs": "30d",
|
80 |
+
"audit_logs": "365d"
|
81 |
+
}
|
82 |
+
```
|
83 |
+
|
84 |
+
#### Segurança
|
85 |
+
|
86 |
+
- TLS/SSL para todas as conexões
|
87 |
+
- Autenticação JWT
|
88 |
+
- Rate limiting por IP/usuário
|
89 |
+
|
90 |
+
## Limitações e Contornos
|
91 |
+
|
92 |
+
### Detecção
|
93 |
+
|
94 |
+
#### Falsos Positivos
|
95 |
+
|
96 |
+
- Objetos similares (ex: guarda-chuvas vs. armas)
|
97 |
+
- Condições de baixa luminosidade
|
98 |
+
- Ângulos desfavoráveis
|
99 |
+
|
100 |
+
**Soluções:**
|
101 |
+
|
102 |
+
```python
|
103 |
+
# Ajuste de confiança por contexto
|
104 |
+
if low_light_condition:
|
105 |
+
threshold = 0.7 # Mais restritivo
|
106 |
+
else:
|
107 |
+
threshold = 0.5 # Padrão
|
108 |
+
```
|
109 |
+
|
110 |
+
#### Falsos Negativos
|
111 |
+
|
112 |
+
- Objetos parcialmente visíveis
|
113 |
+
- Movimento rápido
|
114 |
+
- Oclusões
|
115 |
+
|
116 |
+
**Mitigações:**
|
117 |
+
|
118 |
+
- Processamento de múltiplos frames
|
119 |
+
- Análise de sequência temporal
|
120 |
+
- Fusão de detecções
|
121 |
+
|
122 |
+
### Performance
|
123 |
+
|
124 |
+
#### Gargalos Conhecidos
|
125 |
+
|
126 |
+
1. **Vídeos Longos**
|
127 |
+
|
128 |
+
```python
|
129 |
+
# Processamento em chunks
|
130 |
+
chunk_size = 60 # segundos
|
131 |
+
for chunk in video.split_chunks(chunk_size):
|
132 |
+
process_chunk(chunk)
|
133 |
+
```
|
134 |
+
|
135 |
+
2. **Alta Resolução**
|
136 |
+
- Downscaling automático
|
137 |
+
- Processamento em tiles
|
138 |
+
- Balanceamento qualidade/performance
|
139 |
+
|
140 |
+
#### Limites do Sistema
|
141 |
+
|
142 |
+
| Recurso | Limite | Observação |
|
143 |
+
|---------|--------|------------|
|
144 |
+
| Vídeo | 100MB | Por upload |
|
145 |
+
| Duração | 5min | Por análise |
|
146 |
+
| Usuários | 10 | Simultâneos |
|
147 |
+
|
148 |
+
## Melhores Práticas
|
149 |
+
|
150 |
+
### Preparação de Dados
|
151 |
+
|
152 |
+
#### Vídeos
|
153 |
+
|
154 |
+
- Compressão H.264/H.265
|
155 |
+
- Resolução máxima 1080p
|
156 |
+
- FPS entre 24-30
|
157 |
+
|
158 |
+
```bash
|
159 |
+
# Exemplo de otimização com ffmpeg
|
160 |
+
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium output.mp4
|
161 |
+
```
|
162 |
+
|
163 |
+
#### Formato Ideal
|
164 |
+
|
165 |
+
- Codec: H.264
|
166 |
+
- Container: MP4
|
167 |
+
- Bitrate: 2-5 Mbps
|
168 |
+
|
169 |
+
### Monitoramento
|
170 |
+
|
171 |
+
#### Métricas Críticas
|
172 |
+
|
173 |
+
```python
|
174 |
+
metrics = {
|
175 |
+
"detection_rate": detections/total_frames,
|
176 |
+
"processing_time": end_time - start_time,
|
177 |
+
"gpu_utilization": gpu_util
|
178 |
+
}
|
179 |
+
```
|
180 |
+
|
181 |
+
#### Sistema de Alertas
|
182 |
+
|
183 |
+
- Thresholds configuráveis
|
184 |
+
- Notificações em tempo real
|
185 |
+
- Ações automáticas
|
186 |
+
|
187 |
+
### Backup e DR
|
188 |
+
|
189 |
+
#### Estratégia
|
190 |
+
|
191 |
+
1. Backup incremental de dados
|
192 |
+
2. Snapshot diário de configurações
|
193 |
+
3. Replicação de logs
|
194 |
+
|
195 |
+
#### Recuperação
|
196 |
+
|
197 |
+
1. Restore automatizado
|
198 |
+
2. Testes periódicos
|
199 |
+
3. Documentação detalhada
|
200 |
+
|
201 |
+
## Expansão Futura
|
202 |
+
|
203 |
+
### Novos Modelos
|
204 |
+
|
205 |
+
- Integração plug-and-play
|
206 |
+
- Versionamento de modelos
|
207 |
+
- A/B testing
|
208 |
+
|
209 |
+
### Novas Plataformas
|
210 |
+
|
211 |
+
- Suporte a TPU
|
212 |
+
- Apple Neural Engine
|
213 |
+
- Edge devices
|
214 |
+
|
215 |
+
### Novos Casos de Uso
|
216 |
+
|
217 |
+
- Análise comportamental
|
218 |
+
- Detecção de anomalias
|
219 |
+
- Rastreamento de objetos
|
docs/setup/installation.md
CHANGED
@@ -3,12 +3,14 @@
|
|
3 |
## Requisitos do Sistema
|
4 |
|
5 |
### Hardware Recomendado
|
6 |
-
|
7 |
-
- **
|
8 |
-
- **
|
|
|
9 |
- **Armazenamento**: 10GB+ disponível
|
10 |
|
11 |
### Software Necessário
|
|
|
12 |
- Python 3.10+
|
13 |
- CUDA 11.8+ (para GPU)
|
14 |
- Git
|
@@ -16,30 +18,35 @@
|
|
16 |
## Instalação Local
|
17 |
|
18 |
1. Clone o repositório:
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
|
|
23 |
|
24 |
2. Crie e ative um ambiente virtual:
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
|
|
30 |
|
31 |
3. Instale as dependências:
|
32 |
-
|
33 |
-
|
34 |
-
|
|
|
35 |
|
36 |
4. Configure as variáveis de ambiente:
|
37 |
-
|
38 |
-
|
39 |
-
|
|
|
40 |
|
41 |
Edite o arquivo `.env` com suas configurações:
|
42 |
-
|
|
|
43 |
HUGGINGFACE_TOKEN=seu_token
|
44 |
GPU_MEMORY_FRACTION=0.9
|
45 |
MAX_CONCURRENT_REQUESTS=2
|
@@ -47,57 +54,67 @@ MAX_CONCURRENT_REQUESTS=2
|
|
47 |
|
48 |
## Configuração do Ambiente
|
49 |
|
50 |
-
###
|
51 |
|
52 |
1. Verifique a instalação do CUDA:
|
53 |
-
|
54 |
-
|
55 |
-
|
|
|
56 |
|
57 |
2. Ajuste as configurações de GPU em `.env`:
|
58 |
-
```
|
59 |
-
USE_GPU=true
|
60 |
-
GPU_DEVICE=0
|
61 |
-
```
|
62 |
|
63 |
-
|
|
|
|
|
|
|
|
|
|
|
64 |
|
65 |
Para usar apenas CPU:
|
66 |
-
|
|
|
67 |
USE_GPU=false
|
68 |
```
|
69 |
|
70 |
-
##
|
71 |
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
|
|
|
|
|
|
76 |
|
77 |
2. Edite `.env.huggingface`:
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
|
|
82 |
|
83 |
3. Execute o deploy:
|
84 |
-
|
85 |
-
|
86 |
-
|
|
|
87 |
|
88 |
## Verificação da Instalação
|
89 |
|
90 |
1. Execute os testes:
|
91 |
-
|
92 |
-
|
93 |
-
|
|
|
94 |
|
95 |
2. Inicie a aplicação:
|
96 |
-
```bash
|
97 |
-
python app.py
|
98 |
-
```
|
99 |
|
100 |
-
|
|
|
|
|
|
|
|
|
101 |
|
102 |
## Troubleshooting
|
103 |
|
@@ -115,7 +132,7 @@ python app.py
|
|
115 |
- Verifique credenciais do Hugging Face
|
116 |
- Confirme permissões do espaço
|
117 |
|
118 |
-
### Logs
|
119 |
|
120 |
- Logs da aplicação: `logs/app.log`
|
121 |
- Logs do GPU: `logs/gpu.log`
|
@@ -123,6 +140,7 @@ python app.py
|
|
123 |
## Suporte
|
124 |
|
125 |
Para problemas e dúvidas:
|
|
|
126 |
1. Abra uma issue no GitHub
|
127 |
2. Consulte a documentação completa
|
128 |
-
3. Entre em contato com a equipe de suporte
|
|
|
3 |
## Requisitos do Sistema
|
4 |
|
5 |
### Hardware Recomendado
|
6 |
+
|
7 |
+
- **Processador**: NVIDIA T4 16GB ou superior
|
8 |
+
- **Processamento**: 4+ cores
|
9 |
+
- **Memória**: 16GB mínimo
|
10 |
- **Armazenamento**: 10GB+ disponível
|
11 |
|
12 |
### Software Necessário
|
13 |
+
|
14 |
- Python 3.10+
|
15 |
- CUDA 11.8+ (para GPU)
|
16 |
- Git
|
|
|
18 |
## Instalação Local
|
19 |
|
20 |
1. Clone o repositório:
|
21 |
+
|
22 |
+
```bash
|
23 |
+
git clone https://github.com/seu-usuario/hackatoon-1iadt.git
|
24 |
+
cd hackatoon-1iadt
|
25 |
+
```
|
26 |
|
27 |
2. Crie e ative um ambiente virtual:
|
28 |
+
|
29 |
+
```bash
|
30 |
+
python -m venv venv
|
31 |
+
source venv/bin/activate # Linux/Mac
|
32 |
+
.\venv\Scripts\activate # Windows
|
33 |
+
```
|
34 |
|
35 |
3. Instale as dependências:
|
36 |
+
|
37 |
+
```bash
|
38 |
+
pip install -r requirements.txt
|
39 |
+
```
|
40 |
|
41 |
4. Configure as variáveis de ambiente:
|
42 |
+
|
43 |
+
```bash
|
44 |
+
cp .env.example .env
|
45 |
+
```
|
46 |
|
47 |
Edite o arquivo `.env` com suas configurações:
|
48 |
+
|
49 |
+
```plaintext
|
50 |
HUGGINGFACE_TOKEN=seu_token
|
51 |
GPU_MEMORY_FRACTION=0.9
|
52 |
MAX_CONCURRENT_REQUESTS=2
|
|
|
54 |
|
55 |
## Configuração do Ambiente
|
56 |
|
57 |
+
### Configuração NVIDIA
|
58 |
|
59 |
1. Verifique a instalação do CUDA:
|
60 |
+
|
61 |
+
```bash
|
62 |
+
nvidia-smi
|
63 |
+
```
|
64 |
|
65 |
2. Ajuste as configurações de GPU em `.env`:
|
|
|
|
|
|
|
|
|
66 |
|
67 |
+
```plaintext
|
68 |
+
USE_GPU=true
|
69 |
+
GPU_DEVICE=0
|
70 |
+
```
|
71 |
+
|
72 |
+
### Modo CPU
|
73 |
|
74 |
Para usar apenas CPU:
|
75 |
+
|
76 |
+
```plaintext
|
77 |
USE_GPU=false
|
78 |
```
|
79 |
|
80 |
+
## Processo de Deploy
|
81 |
|
82 |
+
### Deploy no Hugging Face
|
83 |
+
|
84 |
+
1. Configure as variáveis de ambiente:
|
85 |
+
|
86 |
+
```bash
|
87 |
+
cp .env.example .env.huggingface
|
88 |
+
```
|
89 |
|
90 |
2. Edite `.env.huggingface`:
|
91 |
+
|
92 |
+
```plaintext
|
93 |
+
HF_SPACE_ID=seu-espaco
|
94 |
+
HF_TOKEN=seu_token
|
95 |
+
```
|
96 |
|
97 |
3. Execute o deploy:
|
98 |
+
|
99 |
+
```bash
|
100 |
+
./deploy.sh
|
101 |
+
```
|
102 |
|
103 |
## Verificação da Instalação
|
104 |
|
105 |
1. Execute os testes:
|
106 |
+
|
107 |
+
```bash
|
108 |
+
pytest
|
109 |
+
```
|
110 |
|
111 |
2. Inicie a aplicação:
|
|
|
|
|
|
|
112 |
|
113 |
+
```bash
|
114 |
+
python app.py
|
115 |
+
```
|
116 |
+
|
117 |
+
3. Acesse: <http://localhost:7860>
|
118 |
|
119 |
## Troubleshooting
|
120 |
|
|
|
132 |
- Verifique credenciais do Hugging Face
|
133 |
- Confirme permissões do espaço
|
134 |
|
135 |
+
### Sistema de Logs
|
136 |
|
137 |
- Logs da aplicação: `logs/app.log`
|
138 |
- Logs do GPU: `logs/gpu.log`
|
|
|
140 |
## Suporte
|
141 |
|
142 |
Para problemas e dúvidas:
|
143 |
+
|
144 |
1. Abra uma issue no GitHub
|
145 |
2. Consulte a documentação completa
|
146 |
+
3. Entre em contato com a equipe de suporte
|
src/main.py
CHANGED
@@ -135,7 +135,7 @@ def main():
|
|
135 |
api_open=False,
|
136 |
max_size=queue_size,
|
137 |
status_update_rate="auto",
|
138 |
-
|
139 |
)
|
140 |
|
141 |
# Launch
|
|
|
135 |
api_open=False,
|
136 |
max_size=queue_size,
|
137 |
status_update_rate="auto",
|
138 |
+
default_concurrency_limit=max_concurrent
|
139 |
)
|
140 |
|
141 |
# Launch
|