我使用CMU sphinx 4编写了语音识别应用程序,并按照此link的详细信息进行了操作。我已经定义了声学,词典和语言模型,如下所示
configuration.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us");
configuration.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict");
configuration.setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.bin");
使用上面的配置,20分钟的wav文件花了差不多20分钟来完成转录。比试图传递用户定义的config.xml要好。我没有找到配置管理器选项来传递用户定义的config.xml和当前版本的 Sphinx4 。然后我通过扩展AbstractSpeechRecognizer.java
类编写了自己的识别器(它可能是无用的)并改变了config.xml的一些参数,我尝试了但仍然没有改进。
我已经跨多个源下载了视频和音频,并使用FFMPEG转换为WAV文件
命令如下
ffmpeg -i input.mp3 -acodec pcm_s16le -ac 1 -ar 16000 output.wav
环境详情:
Java 8
Ubuntu 14.04
RAM 4GB
I5处理器
我想知道的是,我在这里缺少什么以及如何提高绩效?
答案 0 :(得分:1)
语音识别是资源密集型过程。准确的语音识别预计会很慢,您当前的速度1xRT(1分钟需要1分钟才能解码)是合理的。有些商用产品使用GPU加速,运行速度为0.05xRT,但在CPU上,运行速度通常不会超过0.2xRT。所以你仍然需要花时间解码。
如果您想更快地处理文件,可以将其拆分为零件,并在并行线程或并行机器上单独解码每个零件。