Не выполняются команды у голосового помощника.

AndreiA

Новичок
Пользователь
Фев 5, 2021
1
0
1
При выполнении кода, голосовой помощник приветствует но после запроса команды к примеру включи музыку, не выполняет команду а только отображает Лог того что я сказал.
Windows 10

Код пишу через VS и PyCharm, python 3.9. В PyCharm пишет что модуль speechrecognition определить не может. хотя он стоит.
в PyCharm
altgraph 0.17
appdirs 1.4.4
certifi 2020.12.5
comtypes 1.1.8
distlib 0.3.1
filelock 3.0.12
future 0.18.2
pefile 2019.4.18
pip 21.0.1
pipenv 2020.11.15
PyAudio 0.2.11
pyinstaller 4.2
pyinstaller-hooks-contrib 2020.11
pypiwin32 223
pyttsx3 2.90
pywin32 300
pywin32-ctypes 0.2.0
setuptools 53.0.0
six 1.15.0
SpeechRecognition 3.8.1
virtualenv 20.4.2
virtualenv-clone 0.5.4

VisualStudio
Безымянный.png
Безымянный2.png
Код:
import time
import speech_recognition as sr
import os
from fuzzywuzzy import fuzz
import pyttsx3
import datetime
import win32com.client as wincl
import site
import calculator
import envelope
import translator
import playsound
from gtts import gTTS

opts = {"alias": ('Джони', 'Джо', 'Джарвис'),
        "tbr": ('скажи', 'расскажи', 'покажи', 'сколько', 'произнеси', 'как','сколько','поставь','переведи', "засеки",'запусти','сколько будет'),
        "cmds":
            {"ctime": ('текущее время', 'сейчас времени', 'который час', 'время', 'какое сейчас время'),
             'startStopwatch': ('запусти секундомер', "включи секундомер", "засеки время"),
             'stopStopwatch': ('останови секундомер', "выключи секундомер", "останови"),
             "stupid1": ('расскажи анекдот', 'рассмеши меня', 'ты знаешь анекдоты', "шутка", "прикол"),
             "calc": ('прибавить','умножить','разделить','степень','вычесть','поделить','х','+','-','/'),
             "shutdown": ('выключи', 'выключить', 'отключение', 'отключи', 'выключи компьютер'),
             "conv": ("валюта", "конвертер","доллар",'руб','евро'),
             "internet": ("открой", "вк","музыку в вк", "гугл", "сайт", 'вконтакте', "ютуб"),
             "translator": ("переводчик","translate"),
             "deals": ("дела","делишки", 'как сам', 'как дела')
             }
}


def speak(what):
    print( what )
    speak_engine.say( what )
    speak_engine.runAndWait()
    speak_engine.stop()

def callback(recognizer, audio):
    try:
        global voice
        voice = recognizer.recognize_google(audio, language="ru-RU").lower()

        print("[log] Вас понял сер: " + voice)

        if voice.startswith(opts["alias"]):
            cmd = voice

            for x in opts['alias']:
                cmd = cmd.replace(x, "").strip()

            for x in opts['tbr']:
                cmd = cmd.replace(x, "").strip()
            voice = cmd
            # распознаем и выполняем команду
            cmd = recognize_cmd(cmd)
            execute_cmd(cmd['cmd'])


    except sr.UnknownValueError:
        print("[log] Простите сер я вас не услышал!")
    except sr.RequestError as e:
        print("[log] Сер проблемы с интернетом!")

def recognize_cmd(cmd):
    RC = {'cmd': '', 'percent': 0}
    for c, v in opts['cmds'].items():
        for x in v:
            vrt = fuzz.ratio(cmd, x)
            if vrt > RC['percent']:
                RC['cmd'] = c
                RC['percent'] = vrt
    return RC
def execute_cmd(cmd):
    if cmd == 'ctime':
        now = datetime.datetime.now()
        speak("Сейчас {0}:{1}".format(str(now.hour), str(now.minute)))
    elif cmd == 'shutdown':
        os.system('shutdown -s')
        speak("Выключаю...")
    elif cmd == 'calc':
        calc.calculator()
    elif cmd == 'conv':
        convert.convertation()
    elif cmd == 'translator':
        translate.translate()
    elif cmd == 'stupid1':
        anekdot.fun()
    elif cmd == 'internet':
        browser.browser()
    elif cmd == 'startStopwatch':
        speak("Секундомер запущен")
        startTime = time.time()
    elif cmd == "stopStopwatch":
        if startTime != 0:
            Time = time.time() - startTime
            speak(f"Прошло {round(Time // 3600)} часов {round(Time // 60)} минут {round(Time % 60, 2)} секунд")
            startTime = 0
        else:
            speak("Секундомер не включен")
    elif cmd == 'deals':
        speak("Пока отлично.")
    else:
        print("Команда не распознана!")





speak_engine = pyttsx3.init()
RU_VOICE_ID = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\TokenEnums\RHVoice\Artemiy"
voices = speak_engine.getProperty('voices')
speak_engine.setProperty('voice', RU_VOICE_ID)
r = sr.Recognizer()
m = sr.Microphone()
voice = "str"

with m as source:
    r.adjust_for_ambient_noise(source)

speak_engine = pyttsx3.init()


speak("Здраствуйте сэр!")

stop_listening = r.listen_in_background(m, callback)
while True: time.sleep(0.1) # infinity loop
 
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 567
454
83
 

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