簡體   English   中英

Python 使用 pyinstaller 將文件轉換為 exe 時語音識別不起作用

[英]Python Speech Recognition not working when the file is converted to exe with pyinstaller

我使用 Python 中的語音識別和 GTTS 模塊創建了一個語音助手。 從腳本運行時,代碼運行良好。 但是當我使用pyinstaller --onefile Speak.py (文件名)轉換它時,它停止工作。 它正在使用我的麥克風,但沒有任何反應。 假設如果我說 hey google 這是喚醒關鍵字它根本不響應。 我試了一會兒,但沒有用。 誰能幫幫我嗎???

代碼:

"from gtts import gTTS
import speech_recognition as sr
import os
import playsound
from datetime import datetime
import webbrowser

keeprunning = True

WAKING = "HEY GOOGLE"
def chec(cond, tex):
    if cond in tex:
        return True
    else:
        return False

def speak(text):
    speaker = gTTS(text = text, lang = "en")
    speaker.save("Voice.mp3")
    playsound.playsound("voice.mp3")
    os.remove("Voice.mp3")
def cleanify(text, wtremove, wtremove2=""):
    try:
        text = text.replace(wtremove)
    except:
        if not wtremove2 == "":
            text = text.replace(wtremove2, "")
    return text

#Main controlling part here(Oof!)
def Control(comnd):
    if chec("SEARCH", comnd) or chec("GOOGLE", comnd):
        comnd = cleanify(comnd, "SEARCH", "GOOGLE")
        webbrowser.open(f"https://google.com/search?q={comnd.lower()}")

    elif chec("WHO ARE YOU", comnd):
        speak("I am your virtual assistant, google")
        keepcontrol()

    elif chec("TIME", comnd):
        t = datetime.now()
        t = time.strptime(t.strftime("%H:%S"), "%H:%M")
        tt = time.strftime( "%I:%M %p", t )
        speak(f"The current time is {tt}")
    elif chec("NOTE", comnd) or chec("REMEMBER", comnd) or chec("JOT", comnd):
        try:
            text = comnd.replace("NOTE")
        except:
            try:
                text = text.replace("REMEMBER")
            except:
                text = text.replace("JOT")
        try:
            with open("This_File_Name_Is_Very_Big_Because_I_dont_Want_to_overwrite_anyother_files_so_forgive_me_plz.txt", "rt") as file:
                previous = file.read()
        except:
            with open("This_File_Name_Is_Very_Big_Because_I_dont_want_to_overwrite_any_other_files_so_forgive_me_plz.txt", "wt") as file:
                ttw = f"""
                    •{text.lower()}
                """
                file.write(previous + ttw)
                previous = ""

        with open("Notes.txt", "wt") as file:
            ttw = previous + "  •" + text

            file.write(ttw)
        speak("Got it! I noted it down")

    elif chec("OPEN", comnd):
        web = cleanify(comnd, "OPEN")
        bruh = cleanify(web, ".com")
        speak(f"Opening {bruh}")
        print(comnd)
        web = cleanify(comnd, "OPEN")
        if web == "":
            web = listen()
        else:
            if "https://" in web:
                webbrowser.open(web.lower())
            else:
                web = "https://" + web
                webbrowser.open(web.lower())
        keepcontrol()
        
#Main controlling part ends

def listen():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        listen = r.listen(source)
        try:
            text = r.recognize_google(listen)
            return text.upper()
        except Exception as e:
            if not e == "":
                return ""
                keepcontrol()
            else:
                speak("Sorry we couldnt catch that, please try again")
                keepcontrol()

def keepcontrol():
    while keeprunning:
        text = listen()
        if not text == None:
            if text.count(WAKING) == 1:
                speak("I am listening..")
                text = listen()
                if not text == None and not text == "":
                    Control(text)
                else:
                    speak("Sorry i did not get that. Try again in a few seconds")
                    keepcontrol()
            elif chec("QUIT", text):
                exit()
            elif chec("", text):
                keepcontrol()
            else:
                speak("Sorry we didnt get that right. Please try again.")
                        
                
        
speak("I am booting up...")
keepcontrol()
"

當您將其轉換為exe時,我認為您忘記將用於構建助手的文件放入文件夾中。 當您的 exe 被轉換時,只需將這些文件(您使用過的文件)復制到您保存 exe 的同一文件夾中。 希望它會奏效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM