Browse Source

Fix batch_feature_extractor, Remove streamClassify

master
Apostolos Fanakis 6 years ago
parent
commit
c05562f63c
No known key found for this signature in database GPG Key ID: 56CE2DEDE9F1FB78
  1. 5
      classifier/feature_extraction/batch_feature_extractor.py
  2. 85
      classifier/streamClassify.py

5
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'

85
classifier/streamClassify.py

@ -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…
Cancel
Save