You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于现有Python Excel录入程序实现语音输入转文本存储功能?

语音输入功能实现方案

核心修改内容

  • 编写语音转文本工具函数,处理语音捕获与识别逻辑
  • 为Speak按钮添加事件响应,将识别结果填充到当前选中的输入框
  • 处理语音识别过程中的异常场景,提升用户体验

修改后的完整代码

import PySimpleGUI as sg
import pandas as pd
import speech_recognition as sr

# 初始化语音识别器
recognizer = sr.Recognizer()

# 设置窗口主题
sg.theme('Green')

exfile = 'Break Down Report.xlsx'
df = pd.read_excel(exfile)

layout = [
    [sg.Text('Machines Breakdown Entries Table:')],
    [sg.Text('S.No', size=(15,1)), sg.InputText(key='S.No')],
    [sg.Text('Fault Desc', size=(15,1)), sg.InputText(key='Fault Desc')],
    [sg.Text('Start Time', size=(15,1)), sg.InputText(key='Start Time')],
    [sg.Text('End Time', size=(15,1)), sg.InputText(key='End Time')],
    [sg.Text('Date', size=(15,1)), sg.InputText(key='Date')],
    [sg.Text('Employe Name', size=(15,1)), sg.InputText(key='Employe Name')],
    [sg.Button('Speak'), sg.Save(), sg.Button('Clear'), sg.Quit()]
]

window = sg.Window('Daily Breakdown Report ', layout)

def clear_input():
    for key in values:
        window[key]('')
    return None

def get_speech_text():
    """将麦克风输入的语音转换为文本"""
    with sr.Microphone() as source:
        sg.popup('请开始说话', auto_close_duration=2)
        recognizer.adjust_for_ambient_noise(source)  # 消除环境噪音干扰
        audio_data = recognizer.listen(source)
    
    try:
        # 使用Google语音识别,支持多语言,可修改language参数切换(如'en-US')
        return recognizer.recognize_google(audio_data, language='zh-CN')
    except sr.UnknownValueError:
        sg.popup('无法识别语音,请重试')
        return None
    except sr.RequestError:
        sg.popup('语音识别服务不可用,请检查网络连接')
        return None

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == 'Quit':
        break
    if event == 'Clear':
        clear_input()
    if event == 'Save':
        # 适配Pandas 2.0+版本,原append方法已弃用
        df = df._append(values, ignore_index=True)
        df.to_excel(exfile, index=False)
        sg.popup('数据已保存!')
        clear_input()
    if event == 'Speak':
        # 获取当前聚焦的输入框
        active_input = window.find_element_with_focus()
        if active_input and active_input.Type == sg.ELEM_TYPE_INPUT_TEXT:
            speech_content = get_speech_text()
            if speech_content:
                active_input.update(value=speech_content)
        else:
            sg.popup('请先点击要输入的文本框,再点击Speak按钮')

window.close()

关键细节说明

  1. 语音识别初始化:提前创建识别器实例,避免重复初始化带来的性能损耗
  2. 噪音处理:调用adjust_for_ambient_noise自动适配环境噪音,提升识别准确率
  3. 多语言支持:修改recognize_google的language参数即可切换识别语言,比如英文场景用'en-US'
  4. 输入框定位:通过find_element_with_focus获取当前选中的输入框,确保语音内容填充到目标位置
  5. Pandas兼容性:将原df.append替换为df._append,适配Pandas 2.0及以上版本(原方法已被标记为弃用)

内容的提问来源于stack exchange,提问作者Hassaan Rasheed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:15:35