Source code for feature_extractor.feature_extractor

from src.Roadway.roadway import Roadway
from src.Record.record import SceneRecord
from feature_extractor import FeatureState


[docs]class MultiFeatureExtractor: def __init__(self, extractors: []): ''' :param extractors: List{FeatureExtractors} ''' self.extractors = extractors self.lengths = [len(subext) for subext in extractors] self.num_features = sum(self.lengths) self.features = [0 for i in range(self.num_features)] def __len__(self): return self.num_features
[docs] def pull_features(self, rec: SceneRecord, roadway: Roadway, vehicle_index: int, models: {}=dict(), pastframe: int = 0): # = Dict{Int, DriverModel}() feature_index = 0 for (subext, length) in zip(self.extractors, self.lengths): stop = feature_index + length self.features[feature_index:stop] = subext.pull_features(rec, roadway, vehicle_index, models, pastframe) feature_index += length return self.features
[docs] def feature_names(self): fs = [] for subext in self.extractors: for feature in subext.feature_names(): fs.append(feature) return fs
[docs] def feature_info(self): info = dict() for subext in self.extractors: info = dict(**info, **(subext.feature_info())) return info
[docs]def set_feature_missing(features: list, i: int, censor: float = 0.): features[i] = censor features[i + 1] = 1.0 return features
[docs]def set_feature(features: list, i: int, v: float): features[i] = v features[i + 1] = 0.0 return features
[docs]def set_dual_feature(features: list, i: int, f: FeatureState.FeatureValue, censor: float = 0.): if f.i == FeatureState.MISSING: features = set_feature_missing(features, i, censor=censor) else: features = set_feature(features, i, f.v) return features