Introdução ao SOONet: Funcionalidade Principal
O SOONet é um sistema para localização temporal de segmentos em vídeos longos, baseado em linguagem natural. O usuário fornece uma descrição textual de uma cena, e o sistema identifica o intervalo de tempo correspondente dentro do vídeo.
Por exemplo, em uma gravação de reunião de 2 horas, basta digitar "João apresenta o orçamento" para que o sistema localize automaticamente o trecho específico. Esta abordagem é significativamente mais eficiente que a busca manual.
Vantagens Técnicas
- Desempenho: Velocidade de inferência até 100 vezes superior a métodos tradicionais.
- Precisão: Resultados de última geração em benchmarks padrão.
- Escalabilidade: Projetado para processar vídeos com duração de horas.
- Interface: Interação simples por linguagem natural.
1. Preparação do Ambiente
1.1 Requisitos de Hardware
| Componente | Mínimo | Recomendado |
|---|---|---|
| GPU | NVIDIA com suporte a CUDA | Tesla A100 ou equivalente |
| Memória RAM | 8 GB | 16 GB+ |
| Armazenamento | 2 GB livres | 5 GB livres |
1.2 Instalação das Dependências
Crie e ative um ambiente virtual para o projeto:
# Criação do ambiente isolado
python -m venv meu_ambiente_soonet
# Ativação (Linux/macOS)
source meu_ambiente_soonet/bin/activate
# Ativação (Windows)
# .\meu_ambiente_soonet\Scripts\activate
# Instalação dos pacotes necessários
pip install "torch>=1.10.0" "torchvision>=0.11.0"
pip install "modelscope>=1.0.0" "gradio==6.4.0"
pip install "opencv-python>=4.5.0" "numpy<2.0"
1.3 Verificação dos Arquivos do Modelo
Os arquivos principais do modelo devem estar na estrutura abaixo:
/caminho/para/modelos/iic/multi-modal_soonet_video-temporal-grounding/
├── SOONet_MAD_VIT-B-32_4Scale_10C.pth # Pesos do modelo
├── ViT-B-32.pt # Encoder visual
├── configuration.json # Configurações
└── video_teste.mp4 # Arquivo de teste
Obtenha estes arquivos das fontes oficiais do projeto se estiverem ausentes.
2. Inicialização e Acesso ao Serviço
2.1 Executando o Servidor
Navegue até o diretório do projeto e execute:
cd /caminho/multi-modal_soonet_video-temporal-grounding
python app.py
A saída no terminal mostrará as URLs de acesso após a inicialização bem-sucedida.
2.2 Configurando o Acesso Dual
Acesso Local: Utilize http://localhost:7860 no navegador do mesmo computador.
Acesso Remoto:
- Identifique o endereço IP do servidor (ex:
192.168.1.150). - Em outro dispositivo na mesma rede, acesse
http://192.168.1.150:7860. - Certifique-se de que a porta 7860 não está bloqueada pelo firewall do servidor.
3. Interface Web e Utilização Básica
A interface do Gradio oferece três componentes principais:
- Campo de Texto: Insira a descrição da cena desejada em inglês.
- Área de Upload: Arraste ou selecione o arquivo de vídeo.
- Botão de Ação: Inicie o processo de localização.
Exemplo de uso:
- Insira o texto:
"person typing on a laptop keyboard" - Envie o vídeo alvo (formatos MP4, AVI, MOV suportados).
- Clique em "Start Location".
- O resultado exibirá intervalos de tempo correspondentes, como:
00:05:12 - 00:05:30 (Confidence: 0.85)
4. Utilização Programática via Python
4.1 Script de Exemplo
import cv2
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
# Carrega o modelo
locador_temporal = pipeline(
task=Tasks.video_temporal_grounding,
model='/caminho/para/o/diretorio_do_modelo'
)
# Define as entradas
descricao = "a woman opens a book and starts reading"
arquivo_video = "/meus_videos/video_longo.mp4"
# Executa a localização
resultado = locador_temporal((descricao, arquivo_video))
# Apresenta os resultados
for idx, tempo in enumerate(resultado['timestamps']):
confianca = resultado['scores'][idx]
print(f"Segmento {idx+1}: de {tempo[0]} até {tempo[1]} (confiança: {confianca:.2f})")
4.2 Processamento em Lote
def localizar_multiplos_descricoes(lista_descricoes, caminho_video):
"""
Processa uma lista de descrições em um mesmo vídeo.
"""
todos_resultados = []
for desc in lista_descricoes:
res = locador_temporal((desc, caminho_video))
todos_resultados.append({'descricao': desc, 'trechos': res['timestamps']})
return todos_resultados
# Exemplo de chamada
descricoes_para_buscar = [
"people shaking hands",
"whiteboard presentation",
"coffee break"
]
resultados_grupo = localizar_multiplos_descricoes(descricoes_para_buscar, "meeting.mp4")
5. Otimização e Solução de Problemas
5.1 Dicas para Melhores Resultados
- Descrições Precisas: Use
"man in blue shirt pointing at chart"em vez de"a man". - Idioma: Inglês oferece os melhores resultados de correspondência.
- Simplicidade: Prefira frases diretas e concisas.
5.2 Erros Comuns
Problema: Conexão recusada na porta 7860.
Solução: Verifique as regras do firewall. Exemplo para Linux:
sudo ufw allow 7860/tcp
Problema: Falha ao carregar o modelo.
Solução: Verifique os caminhos e permissões:
ls -la /caminho/para/os/arquivos_do_modelo
Problema: Erro de falta de memória (OOM).
Solução: Reduza a resolução do vídeo de entrada ou processe trechos menores.
5.3 Aceleração do Desempenho
- Utilize versões otimizadas do PyTorch com CUDA compatível.
- Para aplicações com carga alta, considere GPUs da série A100.
- Uma instância Python 3.10+ pode oferecer melhorias de velocidade.