Skip to content

Commit 8064f11

Browse files
audio-classification: classify without initializing a microphone (#23)
1 parent 12567bb commit 8064f11

File tree

1 file changed

+3
-33
lines changed
  • examples/audio-classification/python

1 file changed

+3
-33
lines changed

examples/audio-classification/python/main.py

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -13,41 +13,13 @@
1313

1414
# Global state
1515
AUDIO_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

4017
def 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

4922
def 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

Comments
 (0)