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=1, frequency=16000, samples=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

10ms 스텝당 오디오 샘플 수(160)입니다.

_CATEGORY_COUNT: int

출력 카테고리 수(4)입니다.

_AVERAGE_WINDOW_SAMPLES: int

평활화 윈도우에서 평균을 내는 예측 프레임 수(1020 // _SLICE_TIME_MS)입니다.