Você está na página 1de 25

Rastreamento de Objetos com Python e OpenCV

Jones Granatyr
Dalton Vargas
O que é rastreamento de objetos?
• Localizar um objeto em quadros sucessivos de um vídeo
• Alguns algoritmos
• BOOSTING
• MIL
• KCF
• TLD
• MedianFlow
• MOSSE
• CSRT
• Goturn
• Meanshift
• CAMShift
• Optical Flow Sparse
• Optical Flow Dense
Aplicações
• Rastrear uma pessoa ou objeto específico dentre vários outros
• O rastreamento e análise do movimento de jogadores em uma partida de futebol
• O rastreamento de objetos tem vários usos, alguns dos quais são vigilância e segurança,
monitoramento de tráfego
Pré-requisitos
• Básico sobre lógica de programação (estruturas condicionais e de
repetição)
• Conhecimento em Python: desejável
• Conhecimento básico sobre o OpenCV: desejável
Rastreamento x Detecção
• Geralmente os algoritmos de rastreamento são mais rápidos que os
algoritmos de detecção
• Um bom algoritmo de rastreamento utilizará todas as informações que ele tem sobre
o objeto até esse ponto, enquanto um algoritmo de detecção sempre começa do zero
• Objetos: n frames
• Rastreamento: n-1 frames
• O rastreamento se beneficia das informações extras que ele possui, porém, podemos perder o controle de um
objeto quando ele fica atrás de um obstáculo ou se ele se move tão rápido que o algoritmo de rastreamento não
consegue alcançá-lo
• Caixa delimitadora que rastreia o objeto se afasta
• Executar um algoritmo de detecção
• O rastreamento pode ajudar quando a detecção falha
Rastreamento x Detecção
• O rastreamento preserva a identidade
Rastreamento x Detecção
• Por que precisamos do rastreamento de objetos? Não podemos
simplesmente detectar objetos em todos os quadros?
• Identidade
• A detecção de objetos pode falhar
• Pesquisa local ao invés de pesquisa global
• Detecção + rastreamento
Algoritmos de rastreamento
• Modelo de movimento
• Localização + velocidade nos quadros anteriores
• Prevê a localização aproximada do objeto
• Modelo de aparência
• Aparência do objeto (formato)
• Pesquisar em uma posição próxima para prever a localização

O modelo de movimento prevê a localização aproximada do objeto. O modelo de


aparência ajusta essa estimativa para fornecer uma estimativa mais precisa com
base na aparência
Algoritmos de rastreamento
• Classificar uma região retangular como objeto ou plano de fundo
• Recebe um patch de imagem como entrada e retorna uma pontuação entre 0 e 1 para
indicar a probabilidade de que o patch de imagem contenha o objeto (0 é o plano de
fundo e 1 é o objeto)
• Aprendizagem Online X Aprendizagem Offline
• Com base nos artigos de Satya Mallick (learnopencv.com) e Adrian Rosebrock
(pyimagesearch.com): https://www.pyimagesearch.com/2018/07/30/opencv-object-
tracking/
Boosting (mínimo OpenCV 3.0.0)
• Baseado no Haarcascade (AdaBoost)
• É treinado em tempo de execução (online) com exemplos positivos e negativos
• A caixa delimitadora inicial é aceita pelo algoritmo como exemplo positivo para o objeto. O restante da imagem fora
da caixa delimitadora são tratados como plano de fundo (1 se é o objeto e 0 se é plano de fundo)
• Dado um novo quadro, o classificador é executado em todos os pixels nas proximidades do local anterior e a
pontuação do classificador é registrada
• Os exemplos positivos são adicionados a cada frame e à medida que mais quadros entram, o classificador é
atualizado com esses dados adicionais.

Caixa de seleção inicial


• Em azul a localização
com a pontuação
máxima do classificador,
ou seja, este é o novo
positivo

• Em laranja a localização
com a pontuação menor
do classificador, sendo
estes os negativos
MIL (Multiple Instance Learning) – mínimo
OpenCV 3.0.0
• Ao invés de considerar apenas a localização atual do objeto como um exemplo positivo, o algoritmo procura
posições ao redor da localização atual para gerar vários potenciais exemplos positivos
• Coleção de imagens positivas e coleção de imagens negativas. Nas positivas, somente uma imagem prevista será
considerada positiva
• Mesmo que a localização atual do objeto rastreado não seja precisa, quando amostras da vizinhança da localização
atual são colocadas na coleção de imagens positivas, há uma boa chance de que essa coleção de imagens contenha
pelo menos uma imagem na qual o objeto esteja bem centralizado
KCF (Kernel Correlation Filters) – mínimo OpenCV
3.1.0
• Utiliza o fato de que as múltiplas amostras positivas usadas no rastreador MIL têm grandes
regiões sobrepostas
• Esses dados sobrepostos levam a algumas boas propriedades matemáticas que são exploradas
por esse rastreador para tornar o rastreamento mais rápido e preciso
• O primeiro quadro é usado para inicializar o algoritmo
• Para os próximos seis quadros, cada um dos três KCF é atualizado para estimar a mudança de
escala do objeto
CSRT (Discriminative Correlation Filter with Channel
and Spatial Reliability) – mínimo OpenCV 3.4.2
• É criado um mapa de confiabilidade espacial para ajustar a região selecionada para rastreamento
• Adequado também para objetos não retangulares
• Utiliza 2 recursos padrões das imagens (HOGs e Colornames)

Construção do mapa de confiabilidade espacial.

1. Da esquerda para a direita: patch de treinamento com a caixa delimitadora do objeto a ser rastreado
2. HOG para extrair informação útil da imagem
3. Probabilidade de objeto posterior após o teste aleatório de Markov
4. Patch de treinamento mascarado com o mapa final de confiabilidade

Artigo: https://www.arxiv-vanity.com/papers/1611.08461/
MedianFlow – mínimo OpenCV 3.0.0
• Não é muito adequado para objetos com movimentos rápidos ou que
mudam sua aparência rapidamente
• Rastreia o objeto nas direções para frente e para trás no tempo e mede
as discrepâncias entre essas duas trajetórias (entre os frames)
• Permite detectar falhas de rastreamento e selecionar trajetórias nas sequências de vídeo

Rastreia os pontos entre os Estima o deslocamento do objeto


quadros consecutivos usando a mediana X e Y
TLD (Tracking Learning Detection) – mínimo
OpenCV 3.0.0
• Satya Mallick (learnopencv.com) e Adrian Rosebrock (pyimagesearch.com) não recomendam usar este
rastreador de objetos do OpenCV (muitos falsos positivos)
• Decompõe a tarefa de rastreamento a longo prazo em três componentes - rastreamento (curto prazo),
aprendizado e detecção
• O aprendizado estima os erros do detector e o atualiza
MOSSE (Minimum Output Sum of Squared Error)
– mínimo OpenCV 3.4.1
• Usa correlação adaptativa para rastreamento de objetos, que produz filtros de correlação
estáveis quando inicializados usando um único quadro
• Robusto a variações de iluminação, escala, pose e deformações não rígidas
• Detecta oclusões e permite ao rastreador pausar e retomar de onde parou quando o objeto reaparece
GOTURN (Generic Object Tracking Using
Regression Networks) – mínimo OpenCV 3.2.0
• A implementação original do GOTURN está no Caffe, mas foi portada para a
API OpenCV Tracking
• Aprendizagem off-line (treinado com milhares de sequências de vídeo)

Arquitetura CaffeNet
Comparativo entre os 8 algoritmos

Sugestão de uso:

• Use o CSRT quando precisar de maior precisão no rastreamento e


puder tolerar um FPS mais lento

• Use o KCF quando precisar de um FPS mais rápido, mas pode lidar
com uma precisão de rastreamento de objeto um pouco menor

• Use MOSSE quando precisar de maior velocidade


Meanshift
• Utiliza análise de espaço de característica para localizar os máximos de uma
função de densidade
• Determina o peso dos pontos próximos para a estimativa da média (baseado
em cores)
• Localizar os máximos de uma função de densidade

Fonte: https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_video/py_meanshift/py_meanshift.html
Meanshift
CAMshift (Continuously Adaptive Meanshift)
• Com o Meanshift, a janela sempre tem o mesmo tamanho, esteja o objeto muito longe ou muito
perto da câmera
• Este algoritmo faz com que o tamanho da janela continue sendo atualizado quando a janela de
rastreamento tenta convergir
• Calcula a elipse mais adequada e aplica novamente a mudança de média com a janela de pesquisa
recém-escalada e a janela anterior
Optical Flow
• Representa a direção de cada pixel e a velocidade
• Quanto mais longe o objeto estiver, menor o movimento dos pixels. Quanto mais perto o objeto, maior o
movimento dos pixels (matriz de cores HSV)
• A matiz (H) é usada para indicar a direção do movimento dos pixels (tentativa de estabelecer para onde cada ponto
da imagem está se movimentando)
• A saturação é usada para indicar a velocidade dos pixels
• Quando o deslocamento dos pixels é menor, a intensidade da cor também é menor (a saturação diminui)
• Quanto maior o deslocamento dos pixels, maior é a intensidade da cor (a saturação aumenta)
Optical Flow - Sparse
Optical Flow – Sparse
• Inicialmente o algoritmo faz a detecção de cantos/arestas para determinar a orientação dos vetores na imagem
utilizando o algoritmo de Harris (u e v indicam o deslocamento)

• Shi e Tomasi modificaram a equação de Harris Corner Detector. É feito o cálculo da pontuação R

• Dependendo do valor de R, cada janela é classificada como plana, aresta ou canto


• Método KLT (Kanade, Lucas e Tomasi): utiliza pirâmides, analisando imagens menores do mesmo frame
Optical Flow – Dense (Fanerbäck)
• Calcula o vetor de fluxo óptico para cada pixel de cada quadro
• Existem várias implementações de fluxo óptico denso. Um exemplo é o método de
Fanerbäck
• Utiliza o conceito de expansão polinomial
• Sparse: fornece os vetores de fluxo de • Dense: fornece os vetores de fluxo de todo
alguns "recursos interessantes" (poucos o quadro (todos os pixels). Possui maior
pixels representando as bordas ou os precisão e maior custo
cantos de um objeto) dentro do quadro

Você também pode gostar