Próbuję zaimplementować „Rozpoznawanie cyfr OCR” w OpenCV-Python (cv2). Służy tylko do nauki. Chciałbym poznać funkcje KNearest i SVM w OpenCV.
Mam 100 próbek (tj. obrazów) każdej cyfry. Chciałbym z nimi trenować.
Istnieje przykładowy letter_recog.py
dołączony do próbki OpenCV. Ale nadal nie mogłem wymyślić, jak z niego korzystać. Nie rozumiem, jakie są próbki, odpowiedzi itp. Ponadto na początku ładuje plik txt, którego najpierw nie zrozumiałem.
Później trochę poszukując, mogłem znaleźć letter_recognition.data w próbkach cpp. Użyłem go i zrobiłem kod dla cv2.KNajbliższy w modelu letter_recog.py (tylko do testów):
import numpy as np import cv2 fn = "rozpoznawanie liter.data" a = np.loadtxt(fn, np.float32, delimiter=",", converters={ 0 : lambda ch : ord(ch)- ord("A") }) próbki, odpowiedzi = a[:,1:], a[:,0] model = cv2.KNearest() retval = model.train(samples,respons) retval, results, neigh_resp, dists = model.find_nearest(samples, k = 10) print results.ravel()
Dał mi tablicę o rozmiarze 20000, nie rozumiem, co to jest.
Pytania:
1) Co to jest plik letter_recognition.data? Jak zbudować ten plik z własnego zestawu danych?
2) Co oznacza results.reval()
?
3) Jak możemy napisać proste narzędzie do rozpoznawania cyfr przy użyciu pliku letter_recognition.data (albo KNearest lub SVM)?