【问题标题】:When I converted this .py program to an .exe file, I have problems with speech_recognition当我将此 .py 程序转换为 .exe 文件时,speech_recognition 出现问题
【发布时间】:2021-03-31 12:54:07
【问题描述】:

我正在 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 应用程序。

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

【问题讨论】:

  • 那么你的意思是,使用终端时没有问题吗?在“窗口”上执行此操作时会出现错误。无论如何,终端会显示什么,比如写了什么或什么
  • 没错!如果我在没有“窗口”的情况下转换它并运行它,终端中不会打印或显示任何内容,它只是运行正常。
  • pyinstaller -c -F main.py 是什么
  • 我试过了,但是终端出现了!然后我试了pyinstaller -c -F -w main.py居然是同样的问题
  • -c 是控制台的缩写,UDH 表示 -c AND -w。你的问题很奇怪。

标签: python tkinter speech-recognition pyinstaller


【解决方案1】:

我使用此代码通过 Speech_recognition 库隐藏控制台:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 2021-05-19
    相关资源
    最近更新 更多