Python speech_recognition模块抛出OSError问题求助
解决speech_recognition模块OSError问题
问题根源
报错信息明确指出:系统未安装FLAC命令行转换工具。speech_recognition调用Google语音识别API时,需要将音频转换为FLAC格式,这个转换依赖系统级的FLAC工具,你的MacBook Air和iPad Pythonista环境都缺失该工具。
分环境解决
1. MacBook Air 环境解决步骤
Mac系统用Homebrew安装FLAC最便捷:
- 若未安装Homebrew,打开终端执行以下命令安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - 安装FLAC工具:
brew install flac
安装完成后重新运行代码即可。
2. iPad Pythonista 环境解决方法
Pythonista是iOS沙盒环境,无法直接安装系统级命令行工具,提供两种可行方案:
方案一:提前转换音频格式
在电脑上用音频工具(如Audacity)将audio1.wav转换为FLAC格式,传到Pythonista的文件目录后,修改代码中的文件名:
with sr.AudioFile('audio1.flac') as source: audio_text = r.listen(source)
此时speech_recognition无需再转换格式,可直接调用Google API。
方案二:用纯Python库完成转换
若想在Pythonista内直接处理,需安装pyflac库:
- 安装StaSh(Pythonista的包管理工具):打开Pythonista控制台,执行以下代码:
import requests exec(requests.get('https://raw.githubusercontent.com/ywangd/stash/master/tools/install.py').text) - 打开底部弹出的StaSh命令行框,安装pyflac:
pip install pyflac - 修改代码,手动将WAV转FLAC后识别:
import speech_recognition as sr import wave import pyflac # 读取WAV文件 with wave.open('audio1.wav', 'rb') as wf: sample_rate = wf.getframerate() channels = wf.getnchannels() bits_per_sample = wf.getsampwidth() * 8 audio_frames = wf.readframes(wf.getnframes()) # 编码为FLAC格式 encoder = pyflac.StreamEncoder( sample_rate=sample_rate, bits_per_sample=bits_per_sample, channels=channels ) flac_data = encoder.encode(audio_frames) encoder.finish() # 调用Google语音识别 r = sr.Recognizer() audio_data = sr.AudioData(flac_data, sample_rate, bits_per_sample//8) text = r.recognize_google(audio_data) print('Converting audio transcripts into text ...') print(text)
内容的提问来源于stack exchange,提问作者Sean Hong
相关产品推荐
相关产品推荐

