首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python上做语音助手

在python上做语音助手
EN

Stack Overflow用户
提问于 2020-04-07 13:37:25
回答 1查看 132关注 0票数 0

我需要帮助。我遵循了其中一个教程。我有一个语音助手,但它只做一个命令,什么也不做。你能帮我让他永远听我说吗。因此,它将始终侦听,但只有在我关闭它时才会关闭。注:请不要关注其他语言的单词。下面是我的代码:

代码语言:javascript
复制
import pyttsx3
import os
import time
from fuzzywuzzy import fuzz
import datetime
import speech_recognition as sr

opts = {
    "alias": ("петя", "петечка", "петюлечка", "петрович", "петич", "петр", "петька", "петь"),
    "tbr": ("скажи", "расскажи", "покажи", "сколько", "произнеси"),
    "cmds": {
        "ctime": ("текущее время", "сейчас времени", "который час"),
        "radio": ("включи музыку", "воспроизведи радио", "включи радио"),
        "stupid1": ("расскажи анекдот")
    }
}

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

def callback(recongizer, audio):
    try:
        voice = recongizer.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()

            cmd = recongize_cmd(cmd)
            execute_cmd(cmd['cmd'])
    except sr.UnknownValueError:
        print("[log] Голос не распознан!")
    except sr.RequestError as e:
        print("[log] Неизвестная ошибка, проверьте интернет")
def recongize_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("Сейчас " + str(now.hour) + ":" + str(now.minute))
    elif cmd == 'radio':
        # воспроизвести радио
        os.system("D:\\Jarvis\\res\\radio_record.m3u")
    elif cmd == 'stupid1':
        speak("Мой разработчик не научил меня анекдотам ... Ха ха ха")
    else:
        print('Команда не распознана, повторите!')

r = sr.Recognizer()
m = sr.Microphone(device_index=1)
with m as sourse:
    r.adjust_for_ambient_noise(sourse)



speak_engine = pyttsx3.init()

speak("Привет")
speak("Петя слушает")

stop_listening = r.listen_in_background(m, callback)
while True: time.sleep(0.1)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-09 21:34:33

我不得不在代码接近尾声时执行speak_engine = pyttsx3.init(),而是把它放在speak()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61073435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档