当我将这个.py程序转换为.exe文件时,我在语音识别方面遇到了问题

2024-04-20 02:53:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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应用程序被打开

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


Tags: importvarupdateplacewindowaudiolabelengine
1条回答
网友
1楼 · 发布于 2024-04-20 02:53:58

我使用以下代码隐藏带有语音识别库的控制台:

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

相关问题 更多 >