ChromeOS Linux Beta版SpeechRecognition运行失败求助
ChromeOS Linux Beta下Python语音识别的ALSA/Jack报错解决
问题描述
在ChromeOS的Linux Beta版本中运行Python语音识别代码,代码无语法错误,但执行后输出大量ALSA、Jack相关报错信息,最终触发KeyboardInterrupt中断,尝试安装多个相关库后问题仍未解决。
代码示例
import speech_recognition import pyttsx3 recognizer = speech_recognition.Recognizer() try: with speech_recognition.Microphone() as mic: recognizer.adjust_for_ambient_noise(mic, duration = 0.2) audio = recognizer.listen(mic) text = recognizer.recognize_google(audio) text = text.lower() print(text) except Exception as e: print("Exception "+ str(e))
报错信息
ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21 ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21 ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40 ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41 ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50 ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51 ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71 ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958 ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958 ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958 ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline Cannot connect to server socket err = No such file or directory Cannot connect to server request channel jack server is not running or cannot be started JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock ^CTraceback (most recent call last): File "/home/perez_brian18/Python Projects/Nexus Voice Assistant Project/main.py", line 9, in <module> audio = recognizer.listen(mic) File "/home/perez_brian18/.local/lib/python3.9/site-packages/speech_recognition/__init__.py", line 491, in listen buffer = source.stream.read(source.CHUNK) File "/home/perez_brian18/.local/lib/python3.9/site-packages/speech_recognition/__init__.py", line 199, in read return self.pyaudio_stream.read(size, exception_on_overflow=False) File "/usr/lib/python3/dist-packages/pyaudio.py", line 608, in read return pa.read_stream(self._stream, num_frames, exception_on_overflow) KeyboardInterrupt
解决方案
1. 修复ALSA音频配置
ChromeOS的Linux容器默认音频配置缺失,需手动指定默认设备:
- 在用户目录下创建或编辑
.asoundrc文件:
nano ~/.asoundrc
- 写入基础配置(适配ChromeOS音频映射):
pcm.!default { type hw card 0 } ctl.!default { type hw card 0 }
若出现设备占用问题,改用dmix插件配置:
pcm.dmixed { type dmix ipc_key 1024 slave { pcm "hw:0,0" period_time 0 period_size 1024 buffer_size 4096 rate 44100 } } pcm.!default { type plug slave.pcm "dmixed" }
保存退出后,设置环境变量让PyAudio读取该配置:
export ALSA_CONFIG_PATH=~/.asoundrc
也可在代码开头添加环境变量设置:
import os os.environ['ALSA_CONFIG_PATH'] = os.path.expanduser('~/.asoundrc')
2. 开启ChromeOS Linux容器的麦克风权限
- 打开ChromeOS设置,找到「Linux开发环境」
- 进入「权限」选项,确保「麦克风」权限已开启
3. 重新安装适配的PyAudio
卸载不兼容版本,安装系统适配的PyAudio:
pip uninstall pyaudio -y sudo apt-get update && sudo apt-get install portaudio19-dev python3-pyaudio -y
4. 简化代码测试
先注释掉pyttsx3相关代码(该库在ChromeOS Linux容器中易出现音频输出问题),优先测试语音识别功能:
import os os.environ['ALSA_CONFIG_PATH'] = os.path.expanduser('~/.asoundrc') import speech_recognition recognizer = speech_recognition.Recognizer() try: with speech_recognition.Microphone() as mic: print("请说话...") recognizer.adjust_for_ambient_noise(mic, duration=0.2) audio = recognizer.listen(mic) text = recognizer.recognize_google(audio) text = text.lower() print(f"识别结果: {text}") except Exception as e: print(f"错误: {str(e)}")
5. 解决Jack服务报错
Jack服务并非语音识别必需,通过上述ALSA配置已可绕开Jack依赖,无需额外启动Jack服务。
内容的提问来源于stack exchange,提问作者Brian Perez
相关产品推荐
相关产品推荐

