Я хочу создать голосового ассистента. Мне нужно как то сделать активацию по фразе. Пытался через иф, но ничего не вышло.
import speech_recognition as sr
import webbrowser
import os
import time
from fuzzywuzzy import fuzz
import pyttsx3
import subprocess
from playsound import playsound
import keyboard
import re
import vosk
import pyaudio
#Списки
VA_NAME = 'Олег'
VA_ALIAS = ('олег', 'олежа')
VA_CMD_LIST = {
"help": ('список команд', 'команды', 'что ты умеешь', 'твои навыки', 'навыки'),
"ctime": ('таймер'),
"vk": ('открой вконтакте', 'запусти вконтакте', 'vk', 'открой вк', 'запусти вк', 'вк'),
"sleep": ('отключи компьютер', 'выключи компьютер','спокойной ночи'),
'time_min': ('минут','минуту','минуты'),
'time_hours': ('час', 'часа', 'часов'),
}
# Загрузка модели распознавания речи
model_path = "C:/Users/PC/Desktop/Oleg/model"
if not os.path.exists(model_path):
print("Модель не найдена")
exit()
model = vosk.Model(model_path)
# Инициализация PyAudio
audio = pyaudio.PyAudio()
# Настройка параметров записи
stream = audio.open(format=pyaudio.paInt16, channels=1,
rate=16000, input=True,
frames_per_buffer=8000)
# Инициализация распознавателя
vosk.SetLogLevel(-1)
rec = vosk.KaldiRecognizer(model, 16000)
# Обработка аудио с микрофона и распознавание речи
while True:
data = stream.read(4000, exception_on_overflow=False)
if len(data) == 0:
break
if rec.AcceptWaveform(data):
print(rec.Result())
# Вывод результатов распознавания
text = rec.FinalResult()
print(text)
# Остановка потока записи и PyAudio
stream.stop_stream()
stream.close()
audio.terminate()
def activate(text):
if any(name in text for name in VA_ALIAS):
if any(vk_cmd in text.lower() for vk_cmd in VA_CMD_LIST['vk']):
print('Запускаю...')
webbrowser.open('https://vk.com')
elif any(sleep_cmd in text.lower() for sleep_cmd in VA_CMD_LIST['sleep']):
print('Засыпаю!')
os.system('shutdown -s')
elif any(timer_cmd in text.lower() for timer_cmd in VA_CMD_LIST['ctime']):
if any(TimeValues in text for TimeValues in VA_CMD_LIST['time_values']):
regexp = re.compile(r"([0-9.,]+)\s*(секунд\w*|минут\w*|час\w*)", re.I)
parts = list(regexp.findall(text))
if any(h in parts for h in VA_CMD_LIST['time_hours']):
parts[0] * 3600
if any(m in parts for m in VA_CMD_LIST['time_min']):
parts[0] * 60
total = parts[0]
while True:
i = 0
ii = 0
iii = 0
time_user = total
for q in range(time_user):
time.sleep(1)
i += 1
if(i % 60) == 0:
ii += 1
print(f"Прошло", ii, "минут")
if(i % 3600) == 0:
iii += 1
print(f"Прошло", iii, "часов")
print('Время окончено!')
else:
print('Скажите значения')
else:
print('Чего?')
Вот это вот то, что я сделал. На таймер можете не обращать внимания.