Reconocimiento de dígitos simple OCR en OpenCV-Python

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

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

Hay una muestraletter_recog.py que viene con la muestra OpenCV. Pero todavía no podía entender cómo usarlo. No entiendo cuáles son las muestras, las respuestas, etc. Además, al principio carga un archivo txt, que no entendí primero.

Más tarde, al 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') })
samples, responses = a[:,1:], a[:,0]

model = cv2.KNearest()
retval = model.train(samples,responses)
retval, results, neigh_resp, dists = model.find_nearest(samples, k = 10)
print results.ravel()

e dio una matriz de tamaño 20000, no entiendo de qué se trata.

Preguntas:

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

2) ¿Qué haceresults.reval() denotar?

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