首页 > 解决方案 > 当我将此 .py 程序转换为 .exe 文件时,speech_recognition 出现问题

问题描述

我正在 python 和 tkinter 中创建语音助手,并使用 pyinstaller 将其转换为可执行文件。命令行是:

pyinstaller -F -w main.py

这是我的代码:

import pyttsx3
from pyttsx3.drivers import sapi5
import speech_recognition as sr
import time
from tkinter import *
from datetime import datetime

engine = pyttsx3.init()
rate = engine.getProperty("rate")
engine.setProperty("rate", 175)
volume = engine.getProperty("volume")
engine.setProperty("volume", 0.75)
voices = engine.getProperty("voices")
engine.setProperty("voice", voices[2].id)

window = Tk()

var = StringVar()
var1 = StringVar()

class App:
    def __init__(self):
        window.title("Voice-Assistant")
        window.geometry("1280x720")
        window.resizable(False, False)
        window.iconbitmap(r"C:\Users\itsju\Documents\KarenDef\Projects\Karen10\IconofKaren.ico")

        karenW = Frame(window, bg="#3498db")
        karenW.place(relwidth=1, relheight=0.5, x=5, y=365)

        spokeW = Frame(window, bg="#1a5276")
        spokeW.place(relwidth=1, relheight=0.5, x=5)

        karenT = Label(karenW, bg="#3498db", fg="white", font=("Consolas", 16), textvariable=var1, wraplength=1230, justify="left")
        karenT.place(x=10, y=28)

        spokeT = Label(spokeW, bg="#1a5276", fg="white", font=("Consolas", 16), textvariable=var, wraplength=1230, justify="left")
        spokeT.place(x=10, y=28)

        karenL = Label(karenW, bg="#3498db", fg="white", font=("Calibri 11 bold underline"), text="Karen")
        karenL.pack()

        spokeL = Label(spokeW, bg="#1a5276", fg="light blue", font=("Calibri 11 bold underline"), text="You")
        spokeL.pack()

    def talk(self, audio):
        var1.set(audio)
        window.update()
        engine.say(audio)
        engine.runAndWait()

    def get_command(self):
        r = sr.Recognizer()
        with sr.Microphone() as source:
            var1.set("Listening...")
            window.update()
            audio = r.listen(source)
            spoke = ""
            try:
                var1.set("Recognizing...")
                window.update()
                spoke = r.recognize_google(audio, language='nl')
                var.set(spoke)
            except sr.UnknownValueError:
                var1.set("Couldn't get that!")
                window.update()
                time.sleep(0.25)
                var.set("")
            except sr.RequestError:
                var1.set("Check your internet connection!")
                window.update()
                time.sleep(0.5)
                var.set("")

            return spoke.lower()

a = App()

while True:
    spoke = get_command()
    if 'hello' in spoke:
        a.talk("Hello there!")
        break

因此,当它被转换时,我运行程序,它会在我的应用程序中打印“正在听...”。然后,如果我说“你好”,我的程序应该识别它并说“你好!” 背部。虽然,它进入了例外之一!如果我用终端转换我的程序,命令行:pyinstaller -F main.py没有-w它工作正常!但我不希望终端和我的 tkinter 应用程序打开。

希望有人可以帮助我解决这个奇怪的问题!谢谢。

标签: pythontkinterspeech-recognitionpyinstaller

解决方案


我使用这段代码来隐藏带有 Speech_recognition 库的控制台:

import ctypes
ctypes.windll.user32.ShowWindow( ctypes.windll.kernel32.GetConsoleWindow(), 0 ) # Hide the console.

推荐阅读