Reconocimiento simple de dígitos OCR en OpenCV-Python

| | | | | | | | | | | | | | | |

Estoy tratando de implementar un "OCR de reconocimiento de dígitos" en OpenCV-Python (cv2). Es solo para fines de aprendizaje. Me gustaría aprender las características de KNearest y SVM en OpenCV.

Tengo 100 muestras (es decir, imágenes) de cada dígito. Me gustaría entrenar con ellos.

Hay un ejemplo letter_recog.py que viene con el ejemplo de OpenCV. Pero todavía no pude averiguar cómo usarlo. No entiendo cuáles son las muestras, las respuestas, etc. Además, carga un archivo txt al principio, que no entendí primero.

Después de buscar un poco, pude encontrar un letter_recognition.data en muestras de cpp. Lo usé e hice un código para cv2.KNearest en el modelo de letter_recog.py (solo para probar):

import numpy as np import cv2 fn = "letter-recognition.data" a = np.loadtxt(fn, np.float32, delimiter=",", converters={ 0 : lambda ch : ord(ch)- ord("A") }) muestras, respuestas = a[:,1:], a[:,0] modelo = cv2.KNearest() retval = model.train(muestras,respuestas) retval, resultados, neigh_resp, dists = model.find_nearest(samples, k = 10) print results.ravel() 

Me dio una matriz de tamaño 20000, no entiendo qué es.

Preguntas:

1) ¿Qué es el archivo letter_recognition.data? ¿Cómo crear ese archivo a partir de mi propio conjunto de datos?

2) ¿Qué denota results.reval()?

3) ¿Cómo podemos escribir una herramienta de reconocimiento de dígitos simple usando el archivo letter_recognition.data (ya sea KNearest o SVM)?