본문으로 건너뛰기

© 2026 Molayo

GH Trending릴리즈2026. 05. 14. 07:53

dscripka/openWakeWord

요약

openWakeWord는 음성 활성화 애플리케이션 및 인터페이스 제작에 사용할 수 있는 오픈 소스 웨이크워드 라이브러리입니다. 이 라이브러리는 실제 환경에서 작동하는 일반 단어 및 문구에 대한 사전 학습된 모델을 포함하고 있으며, 사용자는 `pip install openwakeword` 명령어로 쉽게 설치할 수 있습니다. 사용자 코드를 통해 Model 클래스를 사용하여 스트리밍 탐지나 개별 WAV 파일 예측값을 가져올 수 있으며, Speex 노이즈 억제 및 VAD(Voice Activity Detection) 임계값 설정을 통해 성능을 최적화할 수 있습니다.

핵심 포인트

  • openWakeWord는 음성 활성화 시스템 구축에 사용되는 오픈 소스 웨이크워드 라이브러리입니다.
  • 설치 과정은 `pip install openwakeword`로 간단하며, Linux 환경에서는 onnxruntime과 tflite-runtime이 의존성으로 설치됩니다.
  • Speex 노이즈 억제 및 VAD 임계값 설정을 통해 소음 환경에서의 성능을 향상시킬 수 있습니다.
  • 라이브러리는 스트리밍 탐지뿐만 아니라 개별 WAV 파일에 대한 예측값 가져오기 등 다양한 유틸리티 함수를 제공합니다.

openWakeWord는 음성 활성화 애플리케이션 및 인터페이스를 제작하는 데 사용할 수 있는 오픈 소스 웨이크워드 (wakeword) 라이브러리입니다. 실제 환경에서 잘 작동하는 일반적인 단어 및 문구에 대한 사전 학습된 모델 (pre-trained models)을 포함하고 있습니다.

빠른 링크

2024/02/11

  • openWakeWord v0.6.0이 출시되었습니다. 새로운 기능 및 변경 사항에 대한 전체 설명은 릴리스 (releases)를 참조하세요.

2023/11/09

  • 웹 애플리케이션에서 openWakeWord로 오디오 스트리밍을 시연하는 examples/web 아래에 예제 스크립트를 추가했습니다.

2023/10/11

  • 새로운 모델을 학습시키는 프로세스에 상당한 개선이 이루어졌으며, 1시간 미만으로 기본적인 웨이크워드 모델을 학습시키는 방법을 보여주는 Google Colab 노트북 예제가 포함되었습니다.

2023/06/15

  • openWakeWord v0.5.0이 출시되었습니다. 새로운 기능 및 변경 사항에 대한 전체 설명은 릴리스 (releases)를 참조하세요.

HuggingFace Spaces를 통해 포함된 사전 학습된 모델의 온라인 데모를 바로 여기서 체험해 볼 수 있습니다!

Spaces에서는 마이크 스트림의 실시간 탐지가 때때로 이상하게 동작할 수 있음에 유의하십시오. 가장 신뢰할 수 있는 테스트를 위해서는 아래에 설명된 대로 로컬 설치를 수행하십시오.

openWakeWord를 설치하는 방법은 간단하며 의존성 (dependencies)이 최소화되어 있습니다:

pip install openwakeword

Linux 시스템에서는 두 추론 프레임워크 (inference frameworks)를 모두 지원하기 때문에 onnxruntime 패키지와 tflite-runtime 패키지가 모두 의존성으로 설치됩니다. Windows에서는 tflite의 최신 버전 지원 부족으로 인해 onnxruntime만 설치됩니다.

소음이 있는 환경에서 성능을 향상시키기 위해 Linux 시스템에서 (선택적으로) Speex 노이즈 억제 (noise suppression)를 사용하려면, Speex 의존성을 설치한 다음 사전 빌드된 Python 패키지(모든 .whl 버전은 여기의 assets를 참조하세요)를 설치하십시오. 이때 필요한 경우 Python 버전과 시스템 아키텍처에 맞춰 조정해야 합니다.

sudo apt-get install libspeexdsp-dev
pip install https://github.com/dscripka/openWakeWord/releases/download/v0.1.1/speexdsp_ns-0.1.2-cp38-cp38-linux_x86_64.whl

Speex 노이즈 억제 라이브러리의 Python 래퍼 (wrapper)를 제작해 준 TeaPoly에게 깊은 감사를 표합니다.

빠른 로컬 테스트를 위해, 이 저장소(repository)를 클론(clone)하고 포함된 예제 스크립트를 사용하여 로컬 마이크로부터 스트리밍 탐지(streaming detection)를 시도해 보세요. 현재 및 이전 릴리스(release)에서 사전 학습된 모델(pre-trained models)을 개별적으로 다운로드하거나, Python을 사용하여 다운로드할 수 있습니다 (아래 참조).

사용자의 Python 코드에 openWakeWord를 추가하는 데는 단 몇 줄이면 충분합니다:

import openwakeword
from openwakeword.model import Model
# 모든 사전 학습된 모델을 한 번만 다운로드 (또는 특정 모델만 선택 가능)
...

또한, openWakeWord는 다른 유용한 유틸리티 함수(utility functions)들을 제공합니다. 예를 들어:

# 개별 WAV 파일(16-bit 16khz PCM)에 대한 예측값 가져오기
from openwakeword.model import Model
model = Model()
...

클래스 메서드(class methods)와 유틸리티 함수의 전체 사양은 openwakeword/utils.pyopenwakeword/model.py를 참조하세요.

openWakeWord의 기본 설정이 많은 경우에 잘 작동하겠지만, 일부 배포 시나리오에서 성능을 향상시킬 수 있는 조정 가능한 파라미터(parameters)들이 openWakeWord에 존재합니다.

지원되는 플랫폼(현재 X86 및 Arm64 linux만 지원)에서는 openWakeWord 모델을 인스턴스화(instantiating)할 때 enable_speex_noise_suppression=True를 설정함으로써 Speex 노이즈 억제(noise suppression)를 활성화할 수 있습니다. 이는 비교적 일정한 배경 소음이 존재하는 경우 성능을 향상시킬 수 있습니다.

둘째로, Silero의 음성 활동 탐지 (VAD, Voice Activity Detection) 모델이 openWakeWord에 포함되어 있으며, openWakeWord 모델을 인스턴스화할 때 vad_threshold 인자를 0과 1 사이의 값으로 설정하여 활성화할 수 있습니다. 이렇게 하면 VAD 모델이 지정된 임계값(threshold)보다 높은 점수를 동시에 가질 때만 openWakeWord의 양성 예측(positive prediction)을 허용하므로, 비음성 소음(non-speech noise)이 존재하는 상황에서 오탐지(false-positive) 활성화를 크게 줄일 수 있습니다.

포함된 모든 openWakeWord 모델은 0.5의 기본 임계값에서 잘 작동하도록 학습되었습니다.

양성 예측 (positive prediction)을 위한 것이지만, 테스트를 통해 귀하의 환경과 사용 사례 (use-case)에 가장 적합한 임계값 (threshold)을 결정하는 것을 권장합니다. 특정 배포 환경에서는 실제로 더 낮거나 높은 임계값을 사용하는 것이 성능을 크게 향상시킬 수 있습니다.

만약 openWakeWord 모델의 기본 성능이 특정 애플리케이션에 충분하지 않다면 (구체적으로, 오활성화율 (false activation rate)이 허용할 수 없을 정도로 높다면), 예측에 대한 2단계 필터 역할을 하는 특정 목소리용 커스텀 검증기 (verifier) 모델을 학습시키는 것이 가능합니다 (즉, 알려진 목소리 집합에 의해 말해졌을 가능성이 높은 활성화만 허용함). 이는 openWakeWord 시스템이 새로운 목소리에 반응할 가능성을 낮추는 대가로 성능을 크게 향상시킬 수 있습니다.

openWakeWord는 네 가지 상위 수준의 목표를 가지고 있으며, 이들이 결합되어 (바라건대!) 사용하기 쉬우면서도 확장 가능한 프레임워크를 생성합니다.

빠를 것

사용 편의성과 개발 용이성을 유지하면서, 실제 사용 환경에서 충분히 빠를 것. 예를 들어, Raspberry Pi 3의 단일 코어에서 15-20개의 openWakeWord 모델을 실시간으로 동시에 실행할 수 있습니다. 하지만 모델들은 성능이 낮은 시스템이나 마이크로컨트롤러 (micro-controllers)에게는 여전히 너무 클 가능성이 높습니다. Picovoice Porcupine 또는 Fluent Wakeword와 같은 상용 옵션이 매우 제한된 하드웨어 환경에는 더 적합할 것입니다. -
정확할 것

실제 사용 환경에서 충분할 것입니다. 포함된 모델들은 일반적으로 평균적인 사용자의 불쾌감 임계값(annoyance threshold)보다 낮은 오인식률(false-accept rate)과 미인식률(false-reject rate)을 가집니다. 이는 분명히 주관적이지만, 시간당 오인식률(false-accept rate) 0.5 미만 및 미인식률(false-reject rate) 5% 미만은 실무적으로 흔히 합리적인 수준으로 간주됩니다. 포함된 모델들이 실제 환경에서 어느 정도의 성능을 낼 것으로 기대할 수 있는지에 대한 자세한 내용은 Performance & Evaluation 섹션을 참조하십시오. -
단순한 모델 아키텍처 (model architecture)와 추론 (inference) 프로세스를 갖추고 있습니다. 모델은 80ms 프레임 단위로 오디오 데이터 스트림을 처리하며, 각 프레임에 대해 웨이크 워드(wake word)/구문이 감지되었을 확률을 나타내는 0과 1 사이의 점수를 반환합니다. 모든 모델은 공유된 특징 추출 백본 (feature extraction backbone)을 가지고 있어, 추가되는 각 모델이 전체 시스템 복잡도와 리소스 요구 사항에 미치는 영향이 적습니다.

새로운 모델을 훈련하기 위해 수동 데이터 수집이 거의 또는 전혀 필요하지 않습니다. 포함된 모델들(자세한 내용은 Pre-trained Models 섹션 참조)은 모두 텍스트 음성 변환 (text-to-speech) 모델에서 생성된 100% 합성 (synthetic) 음성으로 훈련되었습니다. 새로운 모델을 훈련하는 것은 대상 웨이크 워드/구문에 대한 새로운 클립을 생성하고, 고정된(frozen) 공유 특징 추출기 위에 작은 모델을 훈련시키는 것만큼 간단합니다. 자세한 내용은 Training New Models 섹션을 참조하십시오.

openWakeWord의 향후 릴리스는 새로운 기능을 추가하더라도 이러한 목표를 유지하는 것을 목표로 할 것입니다.

openWakeWord는 일반적인 단어 및 구문에 대한 사전 훈련된 (pre-trained) 모델을 제공합니다. 현재는 영어 모델만 지원되지만, 다양한 유형의 화자 악센트와 발음 전반에 걸쳐 상당히 견고할 것입니다.

아래 표에는 각 모델, 해당 모델이 인식하도록 훈련된 단어/구문의 예시, 그리고 추가 세부 정보를 위한 관련 문서 페이지가 나열되어 있습니다. 이 모델 중 다수는 동일한 단어/구문의 여러 변형으로 훈련되었습니다. 지원되는 모든 단어 및 구문 변형을 확인하려면 각 모델의 개별 문서 페이지를 참조하십시오.

모델감지된 음성문서 페이지
alexa"alexa"docs
...

성능 테스트에서 논의된 방법들에 기반하여, 포함된 각 모델은 적절한 임계값 조정 (threshold tuning)을 통해 5% 미만의 오거부율 (false-reject rates) 및 시간당 0.5회 미만의 오수락률 (false-accept rates)이라는 목표 성능 기준을 충족하는 것을 목표로 합니다. 이러한 수준은 주관적이지만, 평균적인 사용자가 의도된 활성화를 자주 놓치거나 원치 않는 시간에 너무 빈번하게 활성화되어 방해를 일으키는 시스템에 대해 좌절감을 느끼는 짜증 임계값 (annoyance threshold) 보다는 낮기를 바랍니다. 예를 들어, 이러한 성능 수준에서 사용자는 모델이 몇 시간 동안 지속적인 혼합 콘텐츠 오디오를 처리할 때 기껏해야 몇 번의 오활성화 (false activations)만을 경험하고, 의도된 활성화 실패는 20회 시도 중 1회 미만 (그리고 재시도 실패는 400회 시도 중 1회 미만)으로 유지될 것을 기대할 수 있습니다.

다음 릴리스에 포함되기를 원하는 새로운 웨이크 워드 (wake word) 또는 문구가 있다면 이슈 (issue)를 생성해 주세요. 모델을 훈련할 수 있도록 최선을 다하겠습니다! 이러한 요청과 향후 릴리스의 초점은 매우 특정한 용도보다는 폭넓게 일반적인 용도로 사용되는 단어와 문구에 맞춰질 것입니다.

openWakeWord 모델은 세 가지 별도의 구성 요소로 이루어져 있습니다:

입력 오디오 데이터의 멜 스펙트로그램 (melspectrogram)을 계산하는 전처리 (pre-processing) 함수. openWakeWord의 경우, 여러 장치에서 효율적인 성능을 구현하기 위해 고정된 파라미터를 가진 Torch의 melspectrogram 함수를 ONNX 구현체로 사용합니다.

melspectrogram 입력을 범용 음성 오디오 임베딩 (embeddings)으로 변환하는 공유 특징 추출 백본 (backbone) 모델입니다. 이 모델은 Google에서 Apache-2.0 라이선스 하에 TFHub 모듈로 제공합니다. openWakeWord의 경우, TFHub 모듈과 비교하여 다양한 기능을 분리하고 아키텍처 수정에 대해 더 많은 제어를 허용하기 위해 이 모델을 수동으로 재구현했습니다. 모델 자체는 일련의 비교적 단순한 컨볼루션 블록 (convolutional blocks)으로 구성되어 있으며, 대량의 데이터를 통한 광범위한 사전 학습 (pre-training)을 통해 강력한 성능을 얻습니다. 이 모델은 openWakeWord의 핵심 구성 요소이며, 완전히 합성된 데이터 (fully-synthetic data)로 학습할 때조차 강력한 성능을 보여주는 기반이 됩니다.

공유된 (그리고 고정된) 특징 추출 모델 다음에 이어지는 분류 (classification) 모델입니다. 이 분류 모델의 구조는 임의적이지만, 실제로는 단순한 완전 연결 네트워크 (fully-connected network) 또는 2층 RNN이 잘 작동합니다.

웨이크 워드 (wake word)/구문 탐지 모델을 평가하는 것은 매우 까다로우며, 논문이나 다른 프로젝트에서 제시된 서로 다른 모델들이 두 가지 핵심 지표인 오인식률 (false-reject rates) 및 오탐지율 (false-accept rates) 측면에서 실제로 배포되었을 때 어떻게 작동할지 평가하는 것은 매우 어려운 경우가 많습니다. 정의를 명확히 하자면 다음과 같습니다:

*오인식 (false-reject)*은 모델이 사용자의 의도된 활성화를 감지하지 못하는 경우를 의미합니다.

*오탐지 (false-accept)*는 사용자가 의도하지 않았음에도 모델이 부주의하게 활성화되는 경우를 의미합니다.

openWakeWord의 경우, 평가는 다음 두 가지 원칙을 따릅니다:

*오인식 (false-reject)*률은 배경 소음과 잔향 (reverberation)이 포함된 실제 녹음 환경을 나타내는 웨이크 워드/구문을 통해 결정되어야 합니다. 이는 이러한 환경에서 직접 수집한 데이터나 데이터 증강 (data augmentation) 방법을 사용하여 시뮬레이션함으로써 달성할 수 있습니다. -
오탐지 (false-accept)

*오탐지 (false-accept)*율은 단순히 훈련/평가 데이터뿐만 아니라, 모델이 배포될 환경의 유형을 나타내는 오디오를 통해 결정되어야 합니다. 실제로 이는 모델이 수 시간 동안 지속되는 음성과 배경 소음이 존재하는 상황에서도 오류로 인해 활성화되는 일이 매우 드물어야 함을 의미합니다.

다른 웨이크워드 (wakeword) 평가 표준들이 존재하지만, openWakeWord의 경우 사용자가 실제 환경 배포 시 기대할 수 있는 성능을 더 잘 나타내기 위해 맞춤형 평가를 수행하기로 결정했습니다. 구체적으로는 다음과 같습니다:

*오거부 (false-reject)*율은 다음 중 하나를 통해 계산됩니다: 현실적인 신호 대 잡음비 (SNR, signal-to-noise ratios, 예: 5-10 dB)로 배경 소음과 혼합되고, 원거리 오디오 (far-field audio)를 더 잘 시뮬레이션하기 위해 실내 임펄스 응답 함수 (RIRs, room Impulse Response Functions)로 잔향이 입혀진 웨이크워드의 깨끗한 녹음 데이터, 또는 실제 배포 환경에서 수집된 데이터 (예: 일반적인 환경 소음이 포함된 원거리 캡처).

*오탐지 (false-accept)*율은 약 5.5시간의 원거리 음성, 배경 음악 및 기타 잡음을 나타내는 Dinner Party Corpus 데이터셋을 사용하여 결정됩니다. 이 데이터셋은 유사한 상황에서 얼마나 많은 오활성화가 발생할 수 있는지에 대한 현실적인 (비록 도전적일지라도) 목표를 설정합니다.

openWakeWord가 얼마나 유능한 모델을 생성할 수 있는지 보여주기 위해, 포함된 "alexa" 모델의 오탐지/오거부 곡선을 강력한 상용 경쟁 제품인 Picovoice Porcupine의 성능과 함께 아래에 나타냈습니다. 다른 기존 오픈 소스 웨이크워드 엔진 (예: Snowboy, PocketSphinx 등)은 더 이상 유지 관리되지 않거나 Porcupine보다 현저히 낮은 성능을 보이므로 포함하지 않았습니다. 사용된 양성 테스트 예시는 Picovoice가 커뮤니티에 무료로 제공한 훌륭한 리소스인 그들의 리포지토리에 포함된 것들입니다. 다만, 테스트 데이터는 Picovoice의 구현 방식과 다르게 준비되었음을 유의하십시오 (자세한 내용은 Alexa 모델 문서를 참조하십시오).

적어도 이 테스트 데이터와 준비 과정에 있어서는, openWakeWord가 Porcupine보다 더 정확한 모델을 생성합니다.

두 번째 예시로, 포함된 "hey mycroft"의 오인식률 (false-accept/false-reject rate)

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub Trending Jupyter Notebook (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0