Команды не распознанёт

1000v

Новичок
Пользователь
Ноя 4, 2023
1
0
1
Windows 10
Python 3.10



Код:
import os
import json
import pyaudio
import yaml
import subprocess
from vosk import Model, KaldiRecognizer

def load_commands():
    with open(os.path.join('commands', '1', 'command.yaml'), 'r') as file:
        commands = yaml.safe_load(file)
    return commands

def recognize_speech():
    model = Model("model_small")
    recognizer = KaldiRecognizer(model, 16000)

    p = pyaudio.PyAudio()
    stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=8000)
    stream.start_stream()

    while True:
        print("Ожидание команды:")
        data = stream.read(4000)
        if len(data) == 0:
            break
        if recognizer.AcceptWaveform(data):
            result = json.loads(recognizer.Result())
            if "джарвис" in result['text'].lower():
                print("Джарвис активирован, слушаю...")
                while True:
                    data = stream.read(4000)
                    if recognizer.AcceptWaveform(data):
                        command_result = json.loads(recognizer.Result())
                        command_text = command_result.get('text')
                        if command_text:
                            print(f"Команда: {command_text}")
                            # Здесь вы можете добавить свою логику для обработки команд
                            if "отмена" in command_text.lower():
                                print("Команда отмены.")
                                break
                            elif not process_command(command_text):  # Если команда не распознана
                                print("Команда не распознана, начинаю слушать снова...")
                                break

def process_command(command):
    commands = load_commands()
    for cmd in commands['list']:
        if command in cmd['voice']['phrases']:
            # Здесь вы можете добавить свою логику для обработки команд
            print(f"Выполняется команда: {cmd['command']['exe_path']}")
            subprocess.run([cmd['command']['exe_path']] + cmd['command']['exe_args'])
            return True
    # Если команда не распознана, верните False
    return False

if __name__ == "__main__":
    while True:
        command = recognize_speech()

        if command:
            print(f"Распознанная команда: {command}")

            if cancel_command(command):
                print("Команда отмены.")
                break

            # Здесь вы можете добавить свою логику для обработки команд

YAML:
list:
- command:
    action: ahk
    exe_path: ahk/Run browser.exe
    exe_args:
  voice:
    sounds:
    - ok1
    - ok2
    - ok3
    - ok4
  phrases:
  - открой браузер
  - запусти браузер
  - открой гугл хром
  - гугл хром


Джарвис активирован, слушаю…
Команда: открой браузер
Команда не распознана, начинаю слушать снова…
хоть команда есть в списке command.yaml
 

Форум IT Специалистов