Apostolos Fanakis
6 years ago
2 changed files with 4 additions and 86 deletions
@ -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() |
|
Loading…
Reference in new issue