class FeatureExtractor(object): ''' Controls the processing chain and fetches the values needed for the classificator ''' def __init__(self, dataCollector): self.inputQueue = Queue() self.outputQueue = Queue() self.extractQueue = Queue() self.sigUtil = SignalUtil() self.eegUtil = EEGUtil() self.collector = dataCollector self.collectorThread = threading.Thread(target=self.collector.collectData) self.processor = DataProcessor(self.inputQueue, self.outputQueue) self.processingThread = threading.Thread(target=self.processor.processData) self.extract = True def start(self): '''setting data handler and starts collecting''' print("%s: starting feature extractor" % self.__class__.__name__) self.collector.setHandler(self.handleDataSet) self.collectorThread.start() self.processingThread.start() while self.extract: try: procData = self.outputQueue.get(timeout=1) self.extractFeatures(procData) except Empty: pass def extractFeatures(self, data): features = [] for _, sigData in data.iteritems(): theta = self.eegUtil.getThetaChannel(sigData["fft"]) features.extend(theta) self.extractQueue.put(array(features)) def handleDataSet(self, data): '''Add the given data to the processingQueue''' self.inputQueue.put(data) def close(self): self.processor.close() self.processingThread.join() self.collector.close() self.collectorThread.join() print("%s: closing feature extractor" % self.__class__.__name__)