音频文件语音转录的开源软件
有没有人能推荐一些可靠的开源软件,用来转录英文的wav音频文件?我研究过的两个主要程序是Sphinx和Julius,但我一直没能让它们正常工作,而且它们的转录文件的文档也很简陋。
我在64位的Ubuntu 10.04上开发,软件库里有sphinx2和julius,还有voxforge的julius英语声学模型。我专注于转录文件,而不是直接处理麦克风的声音,因为我已经放弃指望这些项目能和Ubuntu的声音系统兼容。这并不是说Ubuntu不好,因为我可以用Audacity完美地录音,但这两个系统似乎都无法访问我的麦克风,所以我希望通过读取文件来简化配置。
我首先尝试了Sphinx2,使用的是Ubuntu包里的sphinx2-bin。尽管示例sphinx2-demo似乎能正常转录文件,但几乎没有关于配置的文档,所以我不确定如何自定义它以读取任意的wav文件。示例中使用的音频文件是某种未记录的“16k”格式,通过两个配置文件间接引用。文档中简要提到sphinx2-demo是运行sphinx2-batch,但查看脚本后发现它实际上调用的是sphinx2-continuous。更糟糕的是,每个脚本的--help文档列出了大约六十多个选项,却没有说明哪些是必需的,哪些是可选的。总的来说,sphinx的文档缺乏,现有文档的质量也很差,让我感到很沮丧。
接下来我尝试了Julius,同样是从Ubuntu包中安装的,考虑到Voxforge的快速入门使用的是3.5版本,这个4.1版本竟然还算比较新。这个包似乎包含了稍微好一点的文档,甚至还有一个用Python写的示例(/usr/share/doc/julius-voxforge/examples/controlapp)。看完示例的文档后,我试着修改它,从文件中读取数据,创建了一个名为filelist.txt
的文件,里面写着“hello.wav”,指向一个同名的文件,里面录了一个人说“hello”。把这些文件放在同一个目录下,我运行了:
julius -input file -filelist filelist.txt -C julian.jconf
得到的回应是:
### read waveform input
Error: adin_file: sampling rate != 16000 (8000)
Error: adin_file: error in parsing wav header at hello.wav
Error: adin_file: failed to read speech data: "hello.wav"
0 files processed
尝试通过指定filelist.txt和hello.wav的绝对路径来重试,结果还是出现同样的错误。
我还尝试了示例中用于直接从麦克风录音的Julius调用:
julius -input mic -C julian.jconf
我多次调用这个,得到的回应在错误之间变化:
Cannot read /dev/dsp
还有:
STAT: AD-in thread created
<<< please speak >>>
在后面的情况下,无论我对着麦克风说什么,都没有反应。我不知道它是仍然无法读取麦克风,还是在读取什么,但就是无法转录音频。
我对这一切感到困惑。这些错误信息让我无从下手。为什么它不能读取wav文件?为什么它不能读取/dev/dsp?为什么它似乎能读取/dev/dsp,但却没有任何反应?
有没有其他人成功使用过开源语音识别软件,特别是在Linux上?
1 个回答
为什么它不能读取wav文件?
它告诉你文件的采样率是错误的(8000),而你需要的是(16000)。采样率对语音识别软件来说非常重要。
为什么它不能读取/dev/dsp?
在最近的Ubuntu版本中,使用的是pulseaudio框架,而不是OSS。你尝试的版本使用的是OSS,所以你需要从你的系统中安装oss兼容包,以恢复对OSS的支持。
你可以尝试更新的Julius,它支持pulseaudio。
为什么它看起来能读取/dev/dsp,但没有任何反应?
音频输入工作不正常。
有没有人成功使用开源语音识别工具,特别是在Linux上?
当然,有人做过,看看这个视频,展示了人们如何使用CMUSphinx:
http://www.youtube.com/watch?v=vfaNLIowSyk
我建议你再看看CMUSphinx这个包,它是一个领先的开源语音识别引擎。网站上有很多文档,你只需要去读一读。记住,语音识别是个复杂的领域,你可以取得很好的结果,但也需要花时间去理解这项技术,就像其他任何领域一样。
简单来说,要用CMUSphinx转录一个文件,你需要完成以下三个简单步骤:
- 拿一个wav文件,用sox把它重新采样成8khz 16位单声道文件:
sox input.wav -r 8000 -c 1 resampled.wav
- 安装pocketsphinx 0.7
apt-get install pocketsphinx
- 解码文件
pocketsphinx_continuous -samprate 8000 -infile resampled.wav
结果会打印到标准输出。如果你想抑制日志输出,可以把错误输出重定向到/dev/null。
pocketsphinx_continuous -infile resampled.wav 2> /dev/null