ml.apps --- ML 應用程式

ml.apps 模組包含建構於 ml.Model 之上的高階 ML 應用程式類別。

class MicroSpeech -- 語音辨識

MicroSpeech 物件使用來自 TensorFlow Lite for Microcontrollers 的 MicroSpeech 模型來辨識簡單的口說單字。預設模型可辨識 "Yes""No"

class ml.apps.MicroSpeech(preprocessor: ml.Model = None, micro_speech: ml.Model = None, labels: list[str] = None, **kwargs)

建立一個 MicroSpeech 物件。

preprocessor 是音訊前處理器 ml.Model。若為 None,則載入 /rom/audio_preprocessor.tflite

micro_speech 是語音辨識 ml.Model。若為 None,則載入 /rom/micro_speech.tflite

labels 是與模型輸出類別相符的標籤字串清單。若為 None,則從 micro_speech.labels 取得標籤。

任何額外的關鍵字引數都會轉發給 audio.init()(音訊周邊裝置會以 channels=1frequency=16000samples=320 初始化)。

audio_callback(buf: bytes) None

內部音訊串流回呼函式。將來自 buf 的新樣本附加到滾動音訊緩衝區中,藉由在最新視窗上執行 preprocessor 模型來更新頻譜圖,並藉由在頻譜圖上執行 micro_speech 模型來更新預測歷史記錄。通常不直接呼叫。

start_audio_streaming() None

清除頻譜圖與預測歷史記錄,然後以 MicroSpeech.audio_callback 作為回呼函式開始音訊串流。若串流已開始則為無操作。

stop_audio_streaming() None

停止音訊串流。

listen(timeout: int = 0, callback: callable = None, threshold: float = 0.65, filter: list[str] = ['Yes', 'No']) tuple[str, numpy.ndarray]

聆聽口說單字,一旦偵測到某個標籤其平均分數高於 threshold 且包含於 filter 中,便回傳一個 (label, average_scores) 元組。若尚未開始串流,則呼叫 MicroSpeech.start_audio_streaming

timeout 是聆聽的最長時間,以毫秒為單位。若為 0,則持續聆聽直到辨識出單字為止。若為 -1,則以非阻塞模式執行,並在未辨識出單字時立即回傳 (None, average_scores);音訊串流會保持執行。對於任何正值,則聆聽該毫秒數,然後在逾時時回傳 (None, average_scores)

callback 是一個選用的可呼叫物件,當辨識出單字時會以 callback(label, average_scores) 的形式被呼叫,而不是回傳。與 timeout=0 結合使用,可實現連續辨識。

threshold 是接受一次辨識所需的最低平均信賴度。

filter 是要接受的標籤字串清單。此清單之外的辨識會被忽略。

_SLICE_SIZE: int

每個頻譜圖切片的特徵數(40)。

_SLICE_COUNT: int

儲存的頻譜圖切片數(49)。

_SLICE_TIME_MS: int

一個切片的時間跨度,以毫秒為單位(30)。

_AUDIO_FREQUENCY: int

音訊取樣率,以 Hz 為單位(16000)。

_SAMPLES_PER_STEP: int

每 10 毫秒步驟的音訊樣本數(160)。

_CATEGORY_COUNT: int

輸出類別數(4)。

_AVERAGE_WINDOW_SAMPLES: int

在平滑視窗上平均的預測影格數(1020 // _SLICE_TIME_MS)。