OCR de reconhecimento de dígito simples em OpenCV-Python

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

Estou tentando implementar um "OCR de reconhecimento de dígitos" no OpenCV-Python (cv2). É apenas para fins de aprendizagem. Eu gostaria de aprender os recursos do KNearest e do SVM no OpenCV.

Tenho 100 amostras (ou seja, imagens) de cada dígito. Eu gostaria de treinar com eles.

Há uma amostra letter_recog.py que vem com a amostra OpenCV. Mas ainda não consegui descobrir como usá-lo. Não entendo quais são as amostras, respostas etc. Além disso, ele carrega um arquivo txt no início, que eu não entendi primeiro.

Mais tarde, pesquisando um pouco, encontrei um letter_recognition.data em exemplos de cpp. Usei-o e fiz um código para cv2.KNearest no modelo de letter_recog.py (apenas para teste):

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, answers = 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() 

Me deu um array de tamanho 20000, não entendi o que é.

Perguntas:

1) O que é o arquivo letter_recognition.data? Como construir esse arquivo a partir do meu próprio conjunto de dados?

2) O que results.reval() denota?

3) Como podemos escrever uma ferramenta simples de reconhecimento de dígitos usando o arquivo letter_recognition.data (KNearest ou SVM)?