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 from os.path import isfile, join
import multiprocessing as mp import multiprocessing as mp
import pandas as pd 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: class bcolors:
BLUE = '\033[94m' 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