@Elacov_top

Как сделать активацию по фразе?

Я хочу создать голосового ассистента. Мне нужно как то сделать активацию по фразе. Пытался через иф, но ничего не вышло.
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('Чего?')

Вот это вот то, что я сделал. На таймер можете не обращать внимания.
  • Вопрос задан
  • 213 просмотров
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
научись декомпозировать
и дело пойдет
ты сейчас как еврей к золотой рыбке: "... это раз.."

разбей задачу на
1) восприятие с голоса в текст
2) сопоставление текста

и решай по мере
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы