Reconnaissance de caractères manuscrits à l'aide de KNN en Python

Reconnaissance de caractères manuscrits apprise dans OpenCV Tutorial.

Un nouveau venu qui a été assigné cette année a dit: «J'avais l'habitude de reconnaître les personnages quand j'étais à l'université», alors j'essaie de me faire une idée.

Obtention des données du dictionnaire

Utilisez digits.png inclus dans la distribution OpenCV comme données de dictionnaire. Malheureusement, l'environnement conda install --channel https://conda.anaconda.org/menpo opencv3``` dans l'environnement Anaconda n'incluait pas digits.png.

Il s'agit des données d'image des nombres manuscrits de 0 à 9. En fait, si vous essayez de créer une OCR en japonais, vous devez créer une énorme quantité de données de dictionnaire si vous l'implémentez telle quelle. Si vous essayez de distinguer les variations de kanji telles que Watanabe-san et Saito-san, ce sera difficile. Sera-t-il géré?

Avant cela, qu'est-ce que KNN?

Wikipedia a une entrée comme méthode de voisinage k. En particulier, Figure a KNN. C'est très simple et facile à comprendre.

C'est-à-dire que lorsque l'on souhaite déterminer si un échantillon inconnu appartient au groupe A ou au groupe B dans un espace d'une certaine coordonnée, on dit qu '"il appartient au groupe avec de nombreuses données classifiées connues à proximité". C'est pour juger.

Maintenant que vous comprenez le concept, il est facile à utiliser avec python (+ OpenCV).

Décomposer les données du dictionnaire caractère par caractère

cells = [np.hsplit(row,100) for row in np.vsplit(gray,50)]

Qu'est-ce que cela fait? En parlant de cela, l'image appelée digits.png est de taille 1000x2000, et chaque nombre est écrit 500 fois en taille 20x20, donc la verticale est divisée par 100 et l'horizontale est divisée par 50 sous forme de tableau en cellules. Indique qu'il est stocké. Cependant, en réalité, je ne peux pas le comprendre, ou je ne peux jamais l'écrire moi-même. Il peut suffire de savoir qu'il existe des moyens de fractionner le tableau, tels que np.hsplit () et np.vsplit ().

Divisé en ensemble d'entraînement et ensemble de test

Après l'avoir stocké dans un tableau de numpy appelé x, divisez 250 de chaque nombre en un ensemble d'apprentissage et les 250 restants en un ensemble de test.

x = np.array(cells)

train = x[:,:50].reshape(-1,400).astype(np.float32)
test = x[:,50:100].reshape(-1,400).astype(np.float32)

Définissez également une étiquette pour chaque donnée.

np.arange(10)Puis 10 de 0 à 9 tableau de ce tableau d'entiers contigus([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])Est créé, répétez-le 250 fois pour l'étiqueter.



```python
k = np.arange(10)
train_labels = np.repeat(k,250)[:,np.newaxis]
test_labels = train_labels.copy()

Exécution KNN

Enfin exécutez KNN. Lançons-le avec k = 5.

knn = cv2.KNearest()
knn.train(train,train_labels)
ret,result,neighbours,dist = knn.find_nearest(test,k=5)

En fait, ce qui précède entraînera une erreur. Tutoriel semble être faux. Réécrivez les trois lignes ci-dessus comme suit.

knn = cv2.ml.KNearest_create()
knn.train(train,cv2.ml.ROW_SAMPLE,train_labels)
ret, results, neighbours, dist = knn.findNearest(test, 5)

Jetons un coup d'œil aux résultats du discriminateur.

matches = results==test_labels
correct = np.count_nonzero(matches)
accuracy = correct*100.0/results.size
print(accuracy)

20160909006.png

Le résultat de cette exécution est `` 91,76 ''. J'ai l'impression que cette précision est un peu faible en ne distinguant que 10 caractères.

C'est tout pour aujourd'hui.

Ce code

Recommended Posts

Reconnaissance de caractères manuscrits à l'aide de KNN en Python
Reconnaissance vocale avec Python
Effectuer la reconnaissance de caractères manuscrits à l'aide de Pylearn 2
Traduit à l'aide de googletrans en Python
Utilisation du mode Python dans le traitement
Reconnaissance des nombres dans les images avec Python
Programmation GUI en Python avec Appjar
Précautions lors de l'utilisation de Pit avec Python
Application de reconnaissance de caractères manuscrite interactive utilisant pygame
Essayez d'utiliser LevelDB avec Python (plyvel)
Utilisation de variables globales dans les fonctions python
Voyons voir l'utilisation de l'entrée en python
Puissance totale en Python (en utilisant functools)
Essayez d'utiliser LeapMotion avec Python
Recherche de priorité de profondeur à l'aide de la pile en Python
Lors de l'utilisation d'expressions régulières en Python
Essayez d'utiliser la reconnaissance de caractères manuscrits (OCR) de GCP
Création d'interface graphique en python avec tkinter 2
Python: principes de base de la reconnaissance d'image à l'aide de CNN
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Essayez d'utiliser l'API Wunderlist en Python
Création d'interface graphique en python à l'aide de tkinter partie 1
Obtenir l'équilibre Suica en Python (en utilisant libpafe)
Pratique d'utilisation de ceci en Python (mauvais)
Hachez lentement les mots de passe en utilisant bcrypt en Python
Essayez d'utiliser l'API Kraken avec Python
Utilisation de venv dans un environnement Windows + Docker [Python]
[FX] Hit oanda-API avec Python en utilisant Docker
Python: Application de la reconnaissance d'image à l'aide de CNN
Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016
Tweet à l'aide de l'API Twitter en Python
[Python] [Windows] Communication série en Python à l'aide de DLL
J'ai essayé d'utiliser l'optimisation bayésienne de Python
Connectez-vous à Slack à l'aide de requêtes en Python
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Utilisation des constantes physiques dans Python scipy.constants ~ constant e ~
Scraping de sites Web à l'aide de JavaScript en Python
Développement de slack bot avec python en utilisant chat.postMessage
Traffic Safety-kun: Reconnaissance des panneaux de signalisation en Python
Ecrire un module python dans fortran en utilisant f2py
Dessinez une structure arborescente en Python 3 à l'aide de graphviz
Remarques sur l'utilisation de python (pydev) avec eclipse
Classification des maladies par Random Forest en utilisant Python
Téléchargez des fichiers dans n'importe quel format en utilisant Python
Exécution de tâches parallèles à l'aide de concurrent.futures en Python
Reconnaissance de scène par quantité de fonctionnalités GIST en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
SendKeys en Python
Époque en Python
Discord en Python
Commencez à utiliser Python
Allemand en Python
DCI en Python
tri rapide en python