reconhecimento de imagem pitão [fechado]
-
05-07-2019 - |
Pergunta
o que eu quero fazer é um reconhecimento de imagem para um aplicativo simples:
- determinada imagem (500 x 500) pxs (fundo 1 cor)
- a imagem terá apenas 1 figura geométrica (triângulo ou quadrado ou smaleyface :)) de (50x50) pxs.
- python vai fazer o reconhecimento da figura e exibir o geométrica figura é.
quaisquer links? alguma dica? qualquer API? thxs:)
Solução
A ferramenta python cadeia típica seria:
- ler suas imagens com com PIL
- transformá-los em Numpy matrizes
- Scipy de filtros de imagem ( linear e classificação , morfológica ) para implementar sua solução
Até diferenciando-se a formas , gostaria de obter sua silhueta, olhando para a forma do fundo. Eu seguida, detectar o número de cantos utilizando um algoritmo de detecção de href="http://en.wikipedia.org/wiki/Corner_detection" rel="noreferrer"> canto da detecção de cantos de Harris com Scipy .
Editar:
Como você menciona nos comentários, o blog não apresentou a função que produz um kernel gaussiano necessário no algoritmo. Aqui está um exemplo de uma função tal do Scipy Cookbook (grande recurso btw):
def gauss_kern(size, sizey=None):
""" Returns a normalized 2D gauss kernel array for convolutions """
size = int(size)
if not sizey:
sizey = size
else:
sizey = int(sizey)
x, y = mgrid[-size:size+1, -sizey:sizey+1]
g = exp(-(x**2/float(size)+y**2/float(sizey)))
return g / g.sum()
Outras dicas
OpenCV tem ferramentas de análise blob, ele vai te dar métricas sobre a forma que você pode alimentar para o seu algoritmo de reconhecimento de padrões favorito :) por exemplo. rectângulo tem 1,0 rácio para a área (altura * largura) /, quando a relação de círculo é de cerca de 0.78.
Você aponta a figura geométrica é 50x50 px. Se tamanho e orientação das figuras geométricas são fixa , você tem um problema clássico de harmonização template , adequado ao método de correlação . Você pode aplicar o casamento de modelos na imagem original ou em uma saída de detecção de fronteira.
Caso contrário, se o tamanho (escala) e / ou orientação são arbitrárias,
Todos estes métodos podem ser codificados utilizando OpenCV, NumPy ou SciPy.
Se você sabe o statespace dos seus dados, você pode usar Análise de Componentes Principais. Com PCA todos os objetos devem ser colocados (no centro da tela). PCA não vai fazer a detecção, mas vai separar objetos em camadas únicas em que você pode identificar como sendo um triângulo, etc. Além disso, note: esta não é a escala ou invariantes rotação.
[não me lembro o que esta técnica é chamada, mas a sua semelhante à forma como o posto de correio não handwritting rec] Se você pode lidar apenas curvfaces não curvas, você poderia fazer a detecção de bordas, e depois fazer a amostragem nos cruzamentos para obter uma aproximação de similaridade.