Проблема с KNN в OpenCV, new_samples.type () == CV_32F при обучении - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь установить простую реализацию задачи KNN с набором данных из трех классов, но всякий раз, когда я пытаюсь выполнить функцию поезда, я сохраняю сказанное (-215:Assertion failed) new_samples.type() == CV_32F in function 'cv::ml::Impl::train error.

Я попытался преобразовать массив ответов во множество разных вещей, поскольку большинство ошибок происходило из той части кода, которая переходит из матрицы 1 x n в один список. Я следую этому уроку. Я могу сделать это с двумя классами, определяя свои собственные данные, как я делаю с тремя классами, но мне не удается тренироваться с тремя классами.

import numpy as np 
import cv2 as cv 

classA=([(10,1,1),(9,2,2),(11,1,2),(8,3,2),(7,2,3),(8,5,4),(9,3,4),(6,6,5),(8,6,6),(9,7,7)])
classB=([(5,1,20),(5,2,19),(5,1,21),(4,2,18),(4,1,19),(6,3,20),(6,2,19),(4,4,18),(4,5,21),(6,4,19)])
classC=([(5,14,10),(6,13,9),(4,12,11),(6,11,9),(6,7,12),(7,6,13),(7,7,10), (7,8,11),(8,8,12),(7,6,11)])

points = classA + classB + classC
responses = ([0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2])

# Using numpy's array?
points_np = np.asarray(points)
responses_np = np.asarray(responses).reshape((30,1))
#print(points_np)
#print(responses_np)

knn = cv.ml.KNearest_create()
knn.train(points_np, cv.ml.ROW_SAMPLE, responses_np)

Я знаю, что и образец, и данные ответа должны следовать схожей структуре, чтобы функция могла связывать каждую точку с классом, но я думаю, что моя проблема связана с типом структуры, которую я использую для переменной ответов. Как мне сформировать или установить переменную ответов, чтобы ее можно было прочитать для функции поезда?

1 Ответ

0 голосов
/ 19 июня 2019

Как указано в утверждении, тип данных для выборок должен быть CV_32F, что означает 32-разрядное значение с плавающей запятой.

points_np = np.asarray(points).astype(np.float32)
responses_np = np.asarray(responses).reshape((30,1)).astype(np.float32)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...