Модель для обнаружения ключевых фраз "Вася" и "Эй, Вася" в аудиопотоке. Основана на фреймворке openWakeWord под лицензией Apache 2.0.
- Высокая точность распознавания (F1-мера > 0.97)
- Генерация синтетических данных с помощью OpenAI TTS
| Тип данных | Источник | Объем | Длительность |
|---|---|---|---|
| Негативные | Mozilla Common Voice ru | 15 000+ | ~15 часов |
| Негативные | Free Music Archive | 8 000+ | ~5 часов |
| Негативные | Free Sound Dataset | 3 000+ | ~3 часа |
| Позитивные | OpenAI TTS (gpt-4o-mini-tts) | 2 800 | ~1.5 часа |
class VasyaClassifier(nn.Module):
def __init__(self, input_dim, hidden_dim=256):
super().__init__()
self.flatten = nn.Flatten()
self.main = nn.Sequential(
nn.Linear(input_dim, hidden_dim),
nn.BatchNorm1d(hidden_dim),
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(hidden_dim, hidden_dim//2),
nn.BatchNorm1d(hidden_dim//2),
nn.ReLU(),
nn.Dropout(0.2),
nn.Linear(hidden_dim//2, hidden_dim//4),
nn.BatchNorm1d(hidden_dim//4),
nn.ReLU(),
nn.Dropout(0.1),
nn.Linear(hidden_dim//4, 1),
nn.Sigmoid()
)
def forward(self, x):
x = self.flatten(x)
return self.main(x)| Метрика | Значение |
|---|---|
| F1-мера | 0.9745 |
| Recall | 0.9556 |
| Точность | 0.9984 |
| Эпох обучения | 37/100 |
| Метрика | Значение | Описание |
|---|---|---|
| Ложных срабатываний/час | 9.0 | Частота ложных активаций |
| Порог активации | 0.6 | Уровень уверенности модели |
| Задержка реакции | < 300 мс | Время от слова до активации |
Метрики обучения: Loss, Accuracy, Recall, F1-score
Пример работы модели на аудиофайле
- Python 3.10+
- NVIDIA GPU (рекомендуется)
- API-ключ OpenAI (для генерации данных)
git clone https://github.com/frum1/vasya_wakeword.git
cd vasya_wakeword
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtСкачать датасет
или
настроить гиперпараметры и сгенерировать свой с помощью tts_gen.py
export OPENAI_API_KEY="ваш api ключ"
python3 tts_gen.pyimport openwakeword
oww_model = openwakeword.Model(
wakeword_model_paths=["vasya.onnx"],
enable_speex_noise_suppression=True
)
# Обработка аудиопотока
for frame in audio_stream:
prediction = oww_model.predict(frame)
if prediction['vasya'] > 0.6:
print("Активация обнаружена!")
# Ваш код реакции на активациюpython3 example.pyПроект распространяется под лицензией MIT.
Используемая библиотека для обработки данных openwakeword имеет лицензию Apache 2.0.
Используемые датасеты имеют собственные лицензии:
- Common Voice: CC-0
- FMA: CC BY 4.0
- FSD: Creative Commons Attribution 4.0 International
- Telegram: @p0pug