首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python的语音助手

使用Python的语音助手
EN

Stack Overflow用户
提问于 2020-06-19 13:51:07
回答 3查看 614关注 0票数 1

我正试图用Python中的tkinter制作一个语音助理应用程序,我的代码有两个问题。

--我代码的一个片段:

代码语言:javascript
复制
def listen_to_me():
    msg2 = Message(root, text="Listening...", bg='yellow', font=('times', 14, 'italic'))
    msg2.pack
    msg2.place(x=200, y=220)

    with sr.Microphone() as source:

        audio = r.listen(source)

        global query

        query = r.recognize_google(audio, language='en-IN', show_all=True)
        if query:
            try:
                (f"[Me]: {query}")                                       
            except:
                engine.say("Sorry didn't quite catch that. Please repeat.")   


    return query



def reply():
    while True:
        global query

        # Logic for executing tasks based on query
        if 'wikipedia' in query:
            speak('Searching Wikipedia...')
            query = query.replace("wikipedia", "")
            query = query.replace("search", "")
            query = query.replace("for", "")
            results = wikipedia.summary(query, sentences=1)
            speak(f'According to Wikipedia, {results}')

        elif 'open youtube' in query:
            speak('Opening Youtube')
            webbrowser.open("https://youtube.com")

        elif 'open stack overflow' in query:
            speak('Opening StackOverflow')
            webbrowser.open("https://stackoverflow.com")

        elif 'what' in query and 'time' in query:
            strTime = datetime.datetime.now().strftime("%H:%M:%S")    
            speak(f"Sir, The time is {strTime}")

        elif 'how are you' or 'what\'s up' in query:
            speak('I am doing jolly good, sir.')

问题-1:-我得到了输出,但它似乎被困在一个循环中:

代码语言:javascript
复制
[MyAssistant]: Good evening! I am Jarvis. How may I help you today?
[MyAssistant]: I am doing jolly good, sir.
[MyAssistant]: I am doing jolly good, sir.
[MyAssistant]: I am doing jolly good, sir.
[MyAssistant]: I am doing jolly good, sir.
[MyAssistant]: I am doing jolly good, sir.
[MyAssistant]: I am doing jolly good, sir.
[MyAssistant]: I am doing jolly good, sir.

问题-2:我想把我的查询转换成小写.我试过以下几种方法:

query = query.lower()

错误:

代码语言:javascript
复制
AttributeError: 'list' object has no attribute 'lower'

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2020-06-19 19:43:09

对于第一个问题,错误是由行while True引起的。这只是在一个无限循环中设置。您可能希望用一种更好的方式来构造它,以避免循环中出现这种情况,例如替换

代码语言:javascript
复制
while = True

带着

代码语言:javascript
复制
while = (conditional_statement)

考虑到您显示的输出确实实现了您想要的结果,您的第二个问题还不清楚。但是你可以做的一种方法是用循环替换字典中的键和值。

代码语言:javascript
复制
for key,val in query['alternative'].items():
    key = key.lower()
    key = val[0].lower()

以上只是一个想法,您必须做什么,以取代您的查询小写字符。

票数 2
EN

Stack Overflow用户

发布于 2020-06-20 09:09:36

问题的解决方案-2:

query 不能简单地使用.lower()方法将转换为字符串类型。这是因为recognize_google() (在SpeechRecognition模块中)是一个列表类型,.lower()只能应用于字符串。为了将查询隐藏为小写,请遵循以下方法:

1.创建另一个字符串变量myStr (例如)

2.初始化myStr = query

3.转换为小写myStr= myStr.lower()

4. Fianlly,return myStr

如果要在另一个函数中使用该字符串,只需初始化any_other_variable_name = myStr

票数 1
EN

Stack Overflow用户

发布于 2021-07-26 15:52:39

对于第一个代码,您可以简单地将while True语句添加到代码的底部,然后在此下面键入run_name of the voice assistant。也要停止循环,只需添加一个if语句,就像您对其他语句所做的那样

命令中的

elif 'stop‘:

说(好的,先生,祝你今天愉快!)

出口(“您在顶部注册的助理的姓名”)

对于第二个问题,我没有给出答案,因为我对此并不那么肯定。此外,@AzyCrw4282 4282已经给出了一个清晰而完美的答案。

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

https://stackoverflow.com/questions/62471748

复制
相关文章

相似问题

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