web-dev-qa-db-fra.com

python reconnaissance d'image

ce que je veux faire, c'est une reconnaissance d'image pour une application simple:

  1. image donnée (500 x 500) px (1 fond de couleur)
  2. l'image n'aura qu'une seule figure géométrique (triangle ou carré ou smaleyface :)) de (50x50) px.
  3. python fera la reconnaissance de la figure et affichera ce qu'est la figure géométrique.

des liens? des indices? une API? thxs :)

36
panchicore

Une chaîne d'outils python typique serait:

En ce qui concerne la différenciation des formes , j'obtiendrais sa silhouette en regardant la forme du fond. Je détecterais alors le nombre de coins en utilisant un algorithme détection de coin (par exemple Harris). Un triangle a 3 coins, un carré 4 et un smiley aucun. Voici un python implémentation de la détection de coin Harris avec Scipy .

Modifier:

Comme vous le mentionnez dans les commentaires, le billet de blog n'a pas présenté la fonction qui produit un noyau gaussien nécessaire à l'algorithme. Voici un exemple d'une telle fonction tirée du Scipy Cookbook (great resource 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()
32
Ivan

OpenCV a des outils d'analyse de blob, il vous donnera des métriques sur la forme que vous pouvez alimenter pour votre algorithme de reconnaissance de modèle préféré :) Par exemple. le rectangle a un rapport de 1,0 pour l'aire/(hauteur * largeur), lorsque le rapport du cercle est d'environ 0,78.

10
Harriv

Vous pointez la figure géométrique est 50x50 px. Si la taille et l'orientation des figures géométriques sont fixes , vous avez un problème de correspondance de modèle classique , adapté à la méthode de corrélation . Vous pouvez appliquer la correspondance du modèle sur l'image d'origine ou sur une sortie de détection de bordure.

Sinon, si la taille (échelle) et/ou l'orientation sont arbitraires, Des descripteurs de Fourier peuvent être appliqués. Ces descripteurs sont des invariants de rotation et d'échelle.

Toutes ces méthodes peuvent être codées à l'aide d'OpenCV, NumPy ou SciPy.

3
TH.

Si vous connaissez l'espace d'états de vos données, vous pouvez utiliser l'analyse des composants principaux. Avec PCA, tous les objets doivent être posés (au centre de l'écran). PCA ne fera pas de détection, mais il séparera les objets en couches uniques dans lesquelles vous pouvez vous identifier comme étant un triangle, etc. Notez également: ce n'est pas une invariance d'échelle ou de rotation.

[Je ne me souviens pas de la façon dont cette technique est appelée, mais elle est similaire à la façon dont le bureau de poste effectue l'écriture manuscrite] similarité.

2
monksy