diff --git a/classifier/feature_extraction/batch_feature_extractor.py b/classifier/feature_extraction/batch_feature_extractor.py index 8d089de..f03d76c 100644 --- a/classifier/feature_extraction/batch_feature_extractor.py +++ b/classifier/feature_extraction/batch_feature_extractor.py @@ -2,7 +2,10 @@ from os import listdir from os.path import isfile, join import multiprocessing as mp import pandas as pd -from feature_extractor import extractFeatures +if __name__ == '__main__': + from feature_extractor import extractFeatures +else: + from .feature_extractor import extractFeatures class bcolors: BLUE = '\033[94m' diff --git a/classifier/streamClassify.py b/classifier/streamClassify.py deleted file mode 100644 index 699257d..0000000 --- a/classifier/streamClassify.py +++ /dev/null @@ -1,85 +0,0 @@ -import pyaudio -import struct -import math -import pandas as pd - -from feature_extraction.feature_extractor import extractFeatures -from preprocessing.data_preprocessing import createSingleFeaturesArray, standardization -from training.model_training import kFCrossValid, simpleTrain - -FORMAT = pyaudio.paInt16 -SHORT_NORMALIZE = (1.0/32768.0) -CHANNELS = 1 -RATE = 22050 -INPUT_BLOCK_TIME = int(6144 / RATE) -INPUT_FRAMES_PER_BLOCK = 6144 - -def classify(block, clf): - import numpy as np - - audio_data = np.fromstring(block, np.int16) - audio_data = audio_data.astype(int) - - values = extractFeatures(audio_data, 'tmp.json', RATE) - audioClass = clf.predict(values) - - return audioClass - -class micListener(object): - def __init__(self): - self.pa = pyaudio.PyAudio() - self.stream = self.open_mic_stream() - - print('Training...') - dataset, target, featureKeys = createSingleFeaturesArray( - 'feature_extraction/music_features/', - 'feature_extraction/speech_features/') - - self.clf = kFCrossValid(dataset, target, model = 'rndForest') - print('Training done!') - - def stop(self): - self.stream.close() - - def find_input_device(self): - device_index = None - for i in range( self.pa.get_device_count() ): - devinfo = self.pa.get_device_info_by_index(i) - print( "Device %d: %s"%(i,devinfo["name"]) ) - - for keyword in ["mic","input"]: - if keyword in devinfo["name"].lower(): - print( "Found an input: device %d - %s"%(i,devinfo["name"]) ) - device_index = i - return device_index - - if device_index == None: - print( "No preferred input found; using default input device." ) - - return device_index - - def open_mic_stream( self ): - device_index = self.find_input_device() - - stream = self.pa.open(format = FORMAT, channels = CHANNELS, rate = RATE, - input = True, input_device_index = device_index, - frames_per_buffer = INPUT_FRAMES_PER_BLOCK) - - return stream - - def listen(self): - try: - block = self.stream.read(INPUT_FRAMES_PER_BLOCK) - except IOError as e: - # dammit. - print('IOError!') - return - - audioClass = classify(block, self.clf) - print(audioClass) - -if __name__ == "__main__": - micStr = micListener() - - for i in range(300): - micStr.listen() \ No newline at end of file