You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

629 lines
12 KiB

# 故障排除指南
## 常见问题及解决方案
### 1. 安装和环境问题
#### 问题Python 版本不兼容
**错误信息**:
```
requires-python = ">=3.12.10" but the current Python version is 3.11.x
```
**解决方案**:
1. 升级 Python 到 3.12+
```bash
# macOS 使用 Homebrew
brew install python@3.12
# 或使用 pyenv
pyenv install 3.12.10
pyenv local 3.12.10
```
2. 验证 Python 版本
```bash
python --version
# 应显示 Python 3.12.x
```
#### 问题uv 包管理器未安装
**错误信息**:
```
command not found: uv
```
**解决方案**:
```bash
# 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# 或使用 pip
pip install uv
# 验证安装
uv --version
```
#### 问题PyAudio 安装失败
**错误信息**:
```
ERROR: Failed building wheel for pyaudio
portaudio.h: No such file or directory
```
**解决方案**:
**macOS**:
```bash
# 安装 portaudio
brew install portaudio
# 重新安装依赖
uv sync --reinstall
```
**Linux (Ubuntu/Debian)**:
```bash
# 安装系统依赖
sudo apt-get update
sudo apt-get install portaudio19-dev python3-dev
# 重新安装依赖
uv sync --reinstall
```
### 2. 模型相关问题
#### 问题:模型文件缺失
**错误信息**:
```
错误: 缺少模型文件
缺少的文件:
- /path/to/models/encoder-epoch-99-avg-1.onnx
- /path/to/models/decoder-epoch-99-avg-1.onnx
- /path/to/models/joiner-epoch-99-avg-1.onnx
- /path/to/models/tokens.txt
```
**解决方案**:
1. 下载模型文件
```bash
uv run python main.py --download-model
```
2. 选择合适的模型(推荐中英双语模型)
3. 等待下载完成(可能需要几分钟)
4. 验证模型文件
```bash
ls -la models/
# 应该看到 .onnx 和 tokens.txt 文件
```
#### 问题:模型下载失败
**错误信息**:
```
下载失败: HTTP Error 404
网络连接超时
```
**解决方案**:
1. 检查网络连接
2. 使用代理(如果需要)
```bash
export https_proxy=http://proxy.example.com:8080
uv run python main.py --download-model
```
3. 手动下载模型文件
- 访问 sherpa-onnx 官方模型库
- 下载对应的模型文件
- 放置到 `models/` 目录
#### 问题:模型加载失败
**错误信息**:
```
RuntimeError: Failed to load model
ONNX Runtime error
```
**解决方案**:
1. 检查模型文件完整性
```bash
# 检查文件大小不应该为0
ls -lh models/*.onnx
```
2. 重新下载模型
```bash
rm -rf models/*.onnx
uv run python main.py --download-model
```
3. 检查系统资源
- 确保有足够内存建议4GB+
- 检查磁盘空间
### 3. 音频设备问题
#### 问题:无法初始化音频设备
**错误信息**:
```
错误: 无法初始化音频设备
OSError: [Errno -9996] Invalid input device
```
**解决方案**:
1. 检查音频设备
```bash
uv run python main.py --list-devices
```
2. 确保麦克风权限
- **macOS**: 系统偏好设置 → 安全性与隐私 → 麦克风
- **Linux**: 检查用户是否在 audio 组中
```bash
groups $USER
# 如果没有 audio 组,添加用户
sudo usermod -a -G audio $USER
```
3. 测试麦克风
```bash
# macOS
say "测试音频" && echo "如果听到声音,音频输出正常"
# Linux
arecord -d 3 test.wav && aplay test.wav
```
#### 问题:音频设备被占用
**错误信息**:
```
OSError: [Errno -9988] Stream callback result
Device is busy
```
**解决方案**:
1. 关闭其他音频应用
2. 重启音频服务
```bash
# macOS
sudo killall coreaudiod
# Linux
pulseaudio -k && pulseaudio --start
```
3. 检查进程占用
```bash
lsof | grep audio
```
#### 问题:音频质量差
**现象**:
- 识别准确率低
- 大量识别错误
- 部分结果为空
**解决方案**:
1. 检查麦克风设置
- 调整麦克风音量建议70-80%
- 减少背景噪音
- 保持适当距离20-30cm
2. 调整音频参数
```python
# 在 src/config.py 中调整
class AudioConfig:
chunk_size = 2048 # 增加缓冲区大小
samples_per_read = 3200 # 调整读取样本数
```
3. 环境优化
- 选择安静环境
- 避免回音
- 使用外接麦克风(如果可能)
### 4. 识别相关问题
#### 问题:识别结果为空
**现象**:
```
[14:30:25]
[14:30:28]
```
**解决方案**:
1. 检查音频输入
```bash
uv run python main.py --log-level DEBUG
# 查看是否有音频数据输入
```
2. 调整端点检测参数
```python
# 在 src/config.py 中调整
class ModelConfig:
rule1_min_trailing_silence = 1.0 # 减少静音检测时间
rule2_min_trailing_silence = 0.5
rule3_min_utterance_length = 100 # 减少最小语音长度
```
3. 测试语音清晰度
- 说话清晰、语速适中
- 避免方言或口音过重
- 尝试标准普通话或英语
#### 问题:识别延迟过高
**现象**:
- 说话后几秒才显示结果
- 实时性差
**解决方案**:
1. 调整音频缓冲
```python
# 减少缓冲区大小
class AudioConfig:
chunk_size = 512 # 减少延迟
samples_per_read = 800
```
2. 优化系统性能
- 关闭不必要的程序
- 确保CPU使用率不过高
- 使用SSD存储
3. 调整线程数
```python
class ModelConfig:
num_threads = 2 # 根据CPU核心数调整
```
#### 问题:中英文混合识别错误
**现象**:
- 英文单词识别为中文
- 中文识别为英文
- 混合语言断句错误
**解决方案**:
1. 确保使用中英双语模型
2. 调整断句处理
```python
# 在语音识别器中
self.enable_punctuation = True # 启用断句处理
```
3. 语言切换提示
- 在语言切换时稍作停顿
- 避免频繁切换语言
### 5. 性能问题
#### 问题:内存使用过高
**现象**:
- 系统内存占用持续增长
- 程序运行缓慢
- 系统卡顿
**解决方案**:
1. 监控内存使用
```bash
# 运行时监控
top -p $(pgrep -f "python main.py")
```
2. 调整缓冲区大小
```python
class AudioConfig:
chunk_size = 1024 # 减少缓冲区
```
3. 定期清理
```python
# 在识别器中添加清理逻辑
def cleanup_memory(self):
import gc
gc.collect()
```
#### 问题CPU使用率过高
**现象**:
- CPU使用率持续100%
- 系统风扇高速运转
- 其他程序响应缓慢
**解决方案**:
1. 调整线程数
```python
class ModelConfig:
num_threads = 1 # 减少线程数
```
2. 降低处理频率
```python
class AudioConfig:
samples_per_read = 3200 # 增加处理间隔
```
3. 使用性能分析
```bash
uv run python -m cProfile main.py
```
### 6. 文件和权限问题
#### 问题:无法创建输出文件
**错误信息**:
```
PermissionError: [Errno 13] Permission denied: 'output/transcription.txt'
```
**解决方案**:
1. 检查目录权限
```bash
ls -la output/
chmod 755 output/
```
2. 创建输出目录
```bash
mkdir -p output logs
```
3. 检查磁盘空间
```bash
df -h .
```
#### 问题:日志文件过大
**现象**:
- logs/app.log 文件过大
- 磁盘空间不足
**解决方案**:
1. 配置日志轮转
```python
import logging.handlers
handler = logging.handlers.RotatingFileHandler(
'logs/app.log', maxBytes=10*1024*1024, backupCount=5
)
```
2. 清理旧日志
```bash
find logs/ -name "*.log" -mtime +7 -delete
```
3. 调整日志级别
```bash
uv run python main.py --log-level WARNING
```
### 7. 网络相关问题
#### 问题:模型下载网络错误
**错误信息**:
```
ConnectionError: HTTPSConnectionPool
SSL: CERTIFICATE_VERIFY_FAILED
```
**解决方案**:
1. 检查网络连接
2. 配置代理
```bash
export https_proxy=http://proxy:port
export http_proxy=http://proxy:port
```
3. 跳过SSL验证不推荐
```python
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
```
### 8. 系统特定问题
#### macOS 特定问题
**问题:麦克风权限被拒绝**
**解决方案**:
1. 系统偏好设置 → 安全性与隐私 → 隐私 → 麦克风
2. 添加终端或Python到允许列表
3. 重启应用
**问题Gatekeeper 阻止运行**
**解决方案**:
```bash
# 允许运行未签名的应用
sudo spctl --master-disable
# 或针对特定文件
xattr -d com.apple.quarantine /path/to/file
```
#### Linux 特定问题
**问题ALSA 错误**
**错误信息**:
```
ALSA lib pcm_dmix.c:1032:(snd_pcm_dmix_open) unable to open slave
```
**解决方案**:
1. 安装ALSA工具
```bash
sudo apt-get install alsa-utils
```
2. 配置音频
```bash
alsamixer # 调整音频设置
```
3. 重启音频服务
```bash
sudo systemctl restart alsa-state
```
## 调试技巧
### 1. 启用详细日志
```bash
# 启用调试模式
uv run python main.py --log-level DEBUG
# 查看日志文件
tail -f logs/app.log
```
### 2. 测试音频输入
```python
# 创建测试脚本 test_audio.py
import pyaudio
import numpy as np
def test_audio():
p = pyaudio.PyAudio()
# 列出设备
for i in range(p.get_device_count()):
info = p.get_device_info_by_index(i)
print(f"Device {i}: {info['name']}")
# 测试录音
stream = p.open(
format=pyaudio.paInt16,
channels=1,
rate=16000,
input=True,
frames_per_buffer=1024
)
print("开始录音5秒...")
frames = []
for _ in range(int(16000 / 1024 * 5)):
data = stream.read(1024)
frames.append(np.frombuffer(data, dtype=np.int16))
stream.stop_stream()
stream.close()
p.terminate()
audio_data = np.concatenate(frames)
print(f"录音完成,数据长度: {len(audio_data)}")
print(f"音频范围: {audio_data.min()} 到 {audio_data.max()}")
if __name__ == "__main__":
test_audio()
```
### 3. 性能监控
```python
# 创建性能监控脚本 monitor.py
import psutil
import time
def monitor_performance():
process = psutil.Process()
while True:
cpu_percent = process.cpu_percent()
memory_info = process.memory_info()
memory_mb = memory_info.rss / 1024 / 1024
print(f"CPU: {cpu_percent:.1f}%, 内存: {memory_mb:.1f}MB")
time.sleep(1)
if __name__ == "__main__":
monitor_performance()
```
## 获取帮助
### 1. 收集诊断信息
运行以下命令收集系统信息:
```bash
# 创建诊断脚本
cat > diagnose.py << 'EOF'
import sys
import platform
import subprocess
print("=== 系统信息 ===")
print(f"操作系统: {platform.system()} {platform.release()}")
print(f"Python版本: {sys.version}")
print(f"架构: {platform.machine()}")
print("\n=== Python包信息 ===")
try:
result = subprocess.run(['uv', 'pip', 'list'], capture_output=True, text=True)
print(result.stdout)
except:
print("无法获取包信息")
print("\n=== 音频设备信息 ===")
try:
import pyaudio
p = pyaudio.PyAudio()
for i in range(p.get_device_count()):
info = p.get_device_info_by_index(i)
print(f"设备 {i}: {info['name']} (输入通道: {info['maxInputChannels']})")
p.terminate()
except Exception as e:
print(f"音频设备检测失败: {e}")
EOF
python diagnose.py
```
### 2. 提交问题报告
在提交问题时,请包含:
1. 详细的错误信息
2. 系统诊断信息
3. 重现步骤
4. 预期行为
5. 实际行为
6. 相关日志文件
### 3. 社区支持
- 查看项目文档
- 搜索已知问题
- 提交 GitHub Issue
- 参与社区讨论
---
如果以上解决方案都无法解决您的问题,请收集详细的错误信息和系统诊断信息,然后提交问题报告。