kNN implemented with analyse

This commit is contained in:
Denys Seredenko
2024-10-20 12:44:08 +02:00
parent 7fd466308b
commit dcb7cee31c
10 changed files with 1849 additions and 1763 deletions

View File

@@ -0,0 +1,96 @@
from typing import Any, Self
import numpy as np
import os
import pickle
from classes.concept import Concept
from classes.feature import Feature
class FeatureVector:
def __init__(self, concept: Concept, features: dict = {}, features_list: list = None, loaded: bool = False) -> None:
if loaded == False:
self.loaded: bool = False
self.features: dict = features
self.concept: Concept = concept
else:
self.loaded: bool = True
self.concept: Concept = concept
self.features_list: list = features_list
def _get_values_of_feature(self, feature: Feature) -> list[int]:
try:
feature_data = self.features[feature]
except KeyError:
print("missing key: ", feature)
return [-1]
ret = []
if feature == Feature.OVERALL_COLOR_PERCENTAGE:
feature_data: dict
for val in feature_data.values():
ret.append(val)
return ret
elif feature == Feature.RASTER_COLOR_PERCENTAGE:
feature_data: list[list[dict]]
for feature_data1d in feature_data:
for data in feature_data1d:
for val in data.values():
ret.append(val)
return ret
elif feature == Feature.CORNERS:
ret.append(feature_data)
return ret
elif feature == Feature.EDGES:
ret.append(feature_data)
return ret
elif feature == Feature.COUNTOURS:
ret.append(feature_data)
return ret
def add_feature(self, key: Feature, value: Any) -> None:
self.features.update({key: value})
def get_vector(self) -> list:
if self.loaded:
return self.features_list
ret = []
for feature in Feature:
ret = ret + self._get_values_of_feature(feature)
return ret
def get_concept(self) -> Concept:
return self.concept
def get_num_features(self) -> int:
return len(self.features)
def get_feature_value(self, key: str) -> Any:
return self.features[key]
def get_features(self) -> Any:
return self.features
def save(self, path: os.path) -> None:
with open(path, "wb") as write:
pickle.dump(self, write, pickle.HIGHEST_PROTOCOL)
def load(path: os.path) -> Self:
with open(path, "rb") as read:
self: FeatureVector = pickle.load(read)
return self