reconnaissance d'image python [fermé]
ce que je veux faire, c'est une reconnaissance d'image pour une application simple:
- Image (500 x 500) PXS (1 fond couleur )
- l'image aura seulement 1 figure géométrique (triangle ou carré ou smaleyface :) ) de (50x50) pxs.
- python fera la reconnaissance de la figure et affichera ce qu'est la figure géométrique.
des liens? tous les conseils? une API? thxs:)
4 réponses
typique python outil de la chaîne d' serait:
- lire vos images avec des avec des PIL
- les transformer en Numpy matrices
- utiliser Scipy 's les filtres d'image ( et linéaire de rang , morphologique ) pour mettre en œuvre votre solution
Comme loin différencier les formes , je voudrais obtenir sa silhouette en regardant la forme de l'arrière-plan. Je détecterais alors le nombre de coins en utilisant un algorithme de 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 Harris corner avec Scipy .
Edit:
As vous de les mentionner dans les commentaires, le blog n'avait pas la fonction qui produit un noyau gaussien nécessaire dans l'algorithme. Voici un exemple d'une telle fonction du Scipy Cookbook (grande ressource 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()
OpenCV dispose d'outils d'analyse blob, il vous donnera des paramètres sur la forme que vous pouvez alimenter pour votre algorithme de reconnaissance de modèle préféré :) Eg. le rectangle a un rapport de 1,0 pour la surface / (hauteur * largeur), lorsque le rapport du cercle est d'environ 0,78.
vous pointez la figure géométrique est 50x50 px. Si taille et orientation des figures géométriques sont fixe , vous avez un classique template matching problem , adapté à la méthode de corrélation . Vous pouvez appliquer le modèle correspondant sur l'image originale ou sur une sortie de détection de bordure.
Sinon, si la taille (échelle) et / ou l'orientation sont arbitraires, Les 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 en utilisant OpenCV, NumPy ou SciPy.
si vous connaissez l'espace statistique de vos données, vous pouvez utiliser L'analyse en composantes principales. Avec PCA, tous les objets doivent être placé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 identifier comme étant un triangle, etc. Note: il ne s'agit pas d'un invariant d'échelle ou de rotation.
[je ne me souviens pas ce que cette technique est appelée, mais qui est similaire à la façon dont le bureau de poste ne handwritting rec] Si vous pouvez ne manipulez que les courbes non courbées, vous pouvez faire la détection de bord, puis faire l'échantillonnage aux intersections pour obtenir une approximation de similitude.