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 ms 步长的音频样本数(160)。

_CATEGORY_COUNT: int

输出类别数(4)。

_AVERAGE_WINDOW_SAMPLES: int

在平滑窗口内取平均的预测帧数(1020 // _SLICE_TIME_MS)。