Detecção visual de gatos por meio de detecção de anomalias

17

Eu tenho um projeto de hobby que estou pensando em me comprometer como uma maneira de aumentar minha experiência até agora limitada de aprendizado de máquina. Tirei e concluí o MOOC do Coursera sobre o assunto. Minha pergunta é com relação à viabilidade do projeto.

A tarefa é a seguinte:

De vez em quando, os gatos vizinhos visitam meu jardim, o que eu não gosto, pois eles tendem a defecar no meu gramado. Eu gostaria de ter um sistema de aviso que me avise quando houver um gato presente, para que eu possa persegui-lo usando meu super imersão. Por uma questão de simplicidade, diga que eu só me importo com um gato com cores preto e branco.

Eu configurei um raspberry pi com módulo de câmera que pode capturar vídeos e / ou fotos de uma parte do jardim.

Imagem de exemplo:

Amostra de imagem de jardim

Minha primeira idéia foi treinar um classificador para identificar objetos semelhantes a gatos ou gatos, mas depois de perceber que não poderei obter um número suficientemente grande de amostras positivas, abandonei isso em favor da detecção de anomalias.

Estimo que, se eu capturasse uma foto a cada segundo do dia, eu terminaria com talvez cinco fotos contendo gatos (de cerca de 60.000 com luz solar) por dia.

Isso é possível usando a detecção de anomalias? Se sim, quais recursos você sugeriria? Minhas idéias até agora seriam simplesmente contar o número de pixels com certas cores; faça algum tipo de detecção de blob / segmentação de imagem (que eu não sei como fazer e, portanto, gostaria de evitar) e execute a mesma análise de cores neles.

geada
fonte
1
Talvez essa pergunta seja mais adequada ao site SE de validação cruzada, agora que penso nisso. A distinção é um pouco claro para mim ...
Geada
4
Eu acho que a pergunta é muito apropriada para este site, pois discute uma aplicação prática do aprendizado de máquina. btw, pergunta boba, por que tão poucas fotos de gatos? Eles só aparecem por apenas cinco segundos?
INSYS
@insys, rumores sobre minha vigilância com o imersão parecem ter se espalhado na comunidade felina. Eles tendem a não demorar como costumavam. Acho que isso é uma coisa boa, sem o objetivo real de livrar meu jardim de gatos, mesmo que complique minha solução preferida e mais sofisticada.
Frost
2
Parece que o próximo passo óbvio (depois de obter o trabalho de detecção de gato) é um super soaker Raspberry Pi controlado :-)
Kryten

Respostas:

8

Você pode simplificar seu problema significativamente usando uma abordagem de detecção de movimento / alteração. Por exemplo, você pode comparar cada imagem / quadro com uma desde o início (por exemplo, um minuto antes) e considerar apenas os pixels que foram alterados desde o início. Você pode então extrair a região retangular da mudança e usá-la como base para sua classificação ou detecção de anomalia.

Adotar esse tipo de abordagem pode simplificar significativamente seu classificador e reduzir sua taxa de alvos falsos, porque você pode ignorar qualquer coisa que não seja do tamanho de um gato (por exemplo, uma pessoa ou pássaro). Você usaria as regiões de alteração extraídas que não foram filtradas para formar o conjunto de treinamento para o seu classificador (ou detector de anomalias).

Certifique-se de obter sua taxa-alvo falsa suficientemente baixa antes de montar uma torre a laser no seu sistema de detecção de intrusão de felinos.

Bogatron
fonte
1
É uma boa idéia para um ambiente controlado, mas não tenho certeza de sua aplicabilidade neste caso, pois estamos lidando com o ambiente natural em que há mudanças contínuas, ou seja, mudanças no clima, posição do sol, plantas e árvores por causa de vento, estações do ano, etc. Eu acredito que a região da mudança, como você descreve, cresceria perto do tamanho de toda a imagem em qualquer caso.
INSYS
@insys - Entendo seu ponto de vista, mas discordo - acredito que isso torna o detector mais resistente a alterações. A diferença de tempo entre os quadros relativos deve ser pequena (~ segundos a um minuto), de modo que o sol, a estação e o clima sejam insignificantes. Concordo que o vento fará com que as plantas se movam, mas a etapa de classificação pode evitá-las, pois seu tamanho / forma / cor são diferentes de um gato. Além disso, o uso de dois quadros em momentos semelhantes permite normalizar a intensidade dos pixels para lidar melhor com as diferentes condições de iluminação (por exemplo, um gato em um dia ensolarado ou nublado).
bogatron
Na verdade, estou mais confuso com a sua resposta agora que li o seu comentário :) Talvez eu tenha entendido mal, mas se você realmente usar as "regiões de mudança extraídas" para formar suas amostras positivas, como mencionado na sua pergunta, como você consegue tem certeza que são gatos? Eles poderiam ser qualquer coisa. Como tal, sua etapa de classificação falharia em detectar qualquer coisa, exceto o que é ensinado a detectar - ou seja, mudanças de qualquer tipo. Então, na verdade, está repetindo o trabalho do detector de "alterações".
INSYS
Além disso, as condições de iluminação são definitivamente preocupantes, mas, se eu entendi direito, não está claro quais duas imagens semelhantes, tiradas com uma diferença de 1 minuto, ofereceriam para normalizar as intensidades de pixel?
INSYS
As regiões extraídas podem representar exemplos positivos ou negativos - eles são o que você usaria para treinar o classificador de gatos. No que diz respeito às intensidades, suponha que o classificador seja treinado a partir de regiões extraídas principalmente de imagens ensolaradas. O classificador poderá encontrar facilmente gatos com pêlo branco brilhante, mas isso não funcionará bem mais tarde em um dia nublado (quando o pêlo branco não for tão claro) ou próximo ao anoitecer. A realização de uma normalização das duas imagens ajuda a atenuar esse problema (ou seja, um par de imagens brilhantes e um par de imagens escuras pareceriam semelhantes ao classificador).
bogatron
4

Este é um projeto interessante e também bastante ambicioso :)

Não tenho certeza se a detecção de anomalias (pelo menos no sentido descrito no curso que você seguiu) seria um algoritmo muito adequado nesse caso.

Eu consideraria uma abordagem mais viável o que foi discutido no final do curso em que um fluxo de trabalho de Photo OCR foi demonstrado.

A abordagem consistiria em segmentar sua imagem em "blocos" menores e analisá-los um por um, usando um algoritmo de aprendizado supervisionado, e tentar classificar cada bloco de acordo com o gato ou não. Se um bloco contém um gato, o alarme dispara. Como bônus, você também obtém a posição do gato, de modo que você pode pensar em incorporar uma resposta "automática" como uma etapa futura do seu projeto.

O benefício aqui é que você não precisará treinar seu algoritmo usando um conjunto de dados específico para o seu jardim (o que, como você menciona é difícil de criar), mas você pode usar imagens de gatos retirados da rede (por exemplo, talvez você possa procurar por "gato na grama" ou algo assim) e talvez trechos de fotos de seus (ou de outros) jardins. Portanto, você não precisa gastar seu tempo coletando fotos da câmera e evita o risco de ter uma amostra muito pequena (comparável) de positivos (ou seja, gatos).

Agora, claro, como é fácil construir um detector de gatos preciso é outro tópico.

insys
fonte
E o que aconteceria se o seu bloco dividisse o corte em duas ou mais fatias? A estratégia de bloqueio é uma abordagem muito comum, mas, ao ter uma câmera completamente fixa em uma determinada posição, a detecção de movimento é uma abordagem melhor e menos demorada, do meu ponto de vista.
adesantos
@adesantos - O que você diz pode muito bem ser verdade, e a previsão de diferenciação entre partes móveis e não móveis tem suas vantagens. Mas, para o treinamento, da maneira como é descrito pelo bogatron, não está claro quais benefícios ele traz para a mesa. No geral, minha opinião é que acrescenta complexidade, o que aumenta significativamente o tempo de depuração. A vantagem de mover a janela está na simplicidade.
INSYS
Aliás, em relação à divisão mencionada, uma estratégia óbvia é deixar as janelas sobrepostas, para que a posição da divisão não afete o seu classificador.
INSYS
Eu acrescentaria à minha proposta (detecção de movimento) o uso do algoritmo SIFT com uma textura de gato. O método SIFT também pode ser usado com essa estratégia de blocos, mas nesse caso você comparará mais blocos do que o necessário. Observe que um gato se move, mas uma árvore ou um arbusto não muito.
Adesivas
3

A estratégia de detecção de movimento / mudança é certamente adequada, mas eu acrescentaria uma operação extra. Eu detectaria as regiões com maior probabilidade de serem alteradas, por exemplo, a escada parece um lugar onde os humanos podem ser (também gatos) e grama onde cães, gatos ou humanos podem estar.

Capturava um mapa com o tamanho do objeto e a trajetória e, com isso, criava um cluster com o objetivo de detectar um objeto (com tamanho específico dentro da imagem em termos de pixels) que se move com uma certa velocidade e trajetória.

Você pode conseguir isso usando R ou sugiro o OpenCV para detectar movimento e seguir objetos diferentes.

adesantos
fonte
2

A subtração em segundo plano do OpenCV encontrará objetos se movendo sobre o seu endurecimento. Depois disso, você pode usar um classificador ou uma análise de forma para diferenciar gatos, pessoas, árvores e etc.

vrfsdbelbeml
fonte
1

Isso é um passaro? E um gato? Temos tamanho de gato em preto e branco! pegas aqui. então isso iria falhar.

A primeira coisa seria excluir todas as áreas verdes, os gatos raramente são verdes.

Em seguida, compare o restante com uma imagem de referência para remover objetos estáticos, como pedras e escadas.

A detecção de objetos de tamanho mínimo deve ser possível, mas para uma classificação a resolução é muito baixa. Também pode ser seu vizinho testando seu novo drone com controle remoto.

Com duas câmeras, você pode fazer um mapeamento 3d dos objetos e eliminar objetos voadores.

user1164
fonte