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

PyInstaller打包exe调用speech_recognition报WinError50(FLAC错误)求助

问题原因及解决方法

核心原因

本地运行时,speech_recognition库会调用系统中已安装的flac.exe工具处理音频格式转换,但PyInstaller/Auto Py to Exe默认不会自动打包这个外部依赖,导致生成的.exe文件运行时找不到该工具,进而在调用get_flac_data()时抛出OSError: [WinError 50]错误。

解决方案

方法一:手动打包flac.exe并指定路径

  1. 找到本地的flac-win32.exe文件:
    • 若通过pip安装speech_recognition,文件一般在Python安装目录下的Lib\site-packages\speech_recognition\flac-win32.exe路径中
  2. 将flac-win32.exe复制到项目根目录
  3. 在代码中手动指定flac工具路径,替换默认调用:
    import speech_recognition as sr
    
    # 手动指定flac工具路径
    r = sr.Recognizer()
    r.flac_executable = "flac-win32.exe"
    
  4. 打包时务必将flac-win32.exe加入资源:
    • Auto Py to Exe:在「Additional Files」选项中添加该文件,设置输出路径为根目录
    • PyInstaller:执行命令 pyinstaller --onefile --add-data "flac-win32.exe;." your_script.py

方法二:强制使用WAV格式,跳过FLAC转换

修改音频处理逻辑,直接生成WAV格式数据传给识别接口,彻底规避对flac工具的依赖:

import speech_recognition as sr
from io import BytesIO
import wave

def recognize_from_mic():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("听语音中...")
        audio = r.listen(source)
    
    # 将音频转为WAV格式字节流
    wav_io = BytesIO()
    with wave.open(wav_io, 'wb') as wav_file:
        wav_file.setnchannels(1)
        wav_file.setsampwidth(2)
        wav_file.setframerate(16000)
        wav_file.writeframes(audio.get_raw_data())
    wav_io.seek(0)
    
    # 用WAV数据直接调用识别接口
    try:
        result = r.recognize_google(sr.AudioFile(wav_io))
        print(f"识别结果: {result}")
    except sr.UnknownValueError:
        print("无法识别语音")
    except sr.RequestError as e:
        print(f"请求识别服务失败: {e}")

额外注意事项

  • 方法一打包后,要保证flac-win32.exe和生成的.exe文件在同一目录
  • 测试打包文件时,直接到输出目录双击.exe运行,避免PyCharm终端的环境干扰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 03:42:07