1313
1414# Global state
1515AUDIO_DIR = "/app/assets/audio"
16- audio_classifier = None
17-
18- def get_audio_classifier ():
19- """Lazy initialization of audio classifier"""
20- global audio_classifier
21- if audio_classifier is None :
22- try :
23- from arduino .app_peripherals .microphone import Microphone
24- try :
25- audio_classifier = AudioClassification (mic = None )
26- except :
27- class MockMicrophone :
28- def __init__ (self ):
29- self .sample_rate = 16000
30- self .channels = 1
31- def start_recording (self ): pass
32- def stop_recording (self ): pass
33- def read (self ): return b''
34- mock_mic = MockMicrophone ()
35- audio_classifier = AudioClassification (mic = mock_mic )
36- except Exception as e :
37- raise e
38- return audio_classifier
3916
4017def parse_data (data ):
41- """Parse incoming data - handle both string and dict"""
4218 if isinstance (data , str ):
43- try :
44- return json .loads (data )
45- except :
46- return {}
19+ return json .loads (data )
4720 return data if isinstance (data , dict ) else {}
4821
4922def on_run_classification (sid , data ):
50- """Run classification"""
5123 try :
5224 parsed_data = parse_data (data )
5325 confidence = parsed_data .get ('confidence' , 0.5 )
@@ -65,19 +37,17 @@ def on_run_classification(sid, data):
6537 return
6638 with open (file_path , "rb" ) as f :
6739 input_audio = io .BytesIO (f .read ())
68-
6940 if input_audio :
70- classifier = get_audio_classifier ()
7141 start_time = time .time () * 1000
72- results = classifier .classify_from_file (input_audio , confidence )
42+ results = AudioClassification .classify_from_file (input_audio , confidence )
7343 diff = time .time () * 1000 - start_time
7444
7545 response_data = { 'results' : results , 'processing_time' : diff }
7646 if results :
7747 response_data ['classification' ] = { 'class_name' : results ["class_name" ], 'confidence' : results ["confidence" ] }
7848 else :
7949 response_data ['error' ] = "No objects detected in the audio. Try to lower the confidence threshold."
80-
50+
8151 ui .send_message ('classification_complete' , response_data , sid )
8252 else :
8353 ui .send_message ('classification_error' , {'message' : "No audio available for classification" }, sid )
0 commit comments