CMUS狮身人面像(九)-使用 sphinx4 (5 pre-alpha 版本)构建应用程序

本文介绍了Sphinx4,一个纯Java语音识别库,支持语音转文本、说话者识别等功能。详细讲解了如何在Java项目中添加依赖,使用Gradle或Maven集成,以及提供了一个简单的代码示例。还介绍了配置参数和高级接口,如实时语音识别器和语音对齐器。
摘要由CSDN通过智能技术生成

概述

Sphinx4是一个纯Java语音识别库。它提供了一个快速、简单的 API,可借助 CMUSphinx 声学模型将语音记录转换为文本。它可以在服务器和桌面应用程序中使用。除了语音识别之外,Sphinx4 还有助于识别说话者、调整模型、将现有转录与音频对齐以设置时间戳等。

Sphinx4 支持美国英语和许多其他语言。

在您的项目中使用 sphinx4

与 Java 中的任何库一样,使用 sphinx4 所需要做的就是将 jar 添加到项目的依赖项中,然后就可以使用 API 编写代码。

使用 sphinx4 最简单的方法是使用现代构建工具,例如 Apache Maven Gradle Sphinx-4 在Sonatype OSS 存储库中作为 Maven 包提供。

在 gradle 中,您需要以下几行build.gradle

repositories {
    mavenLocal()
    maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}

dependencies {
    compile group: 'edu.cmu.sphinx', name: 'sphinx4-core', version:'5prealpha-SNAPSHOT'
    compile group: 'edu.cmu.sphinx', name: 'sphinx4-data', version:'5prealpha-SNAPSHOT'
}

要在您的 Maven 项目中使用 sphinx4,请在您的以下位置指定此存储库pom.xml

<project>
...
    <repositories>
        <repository>
            <id>snapshots-repo</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
...
</project>

然后添加sphinx4-core项目依赖:

<dependency>
  <groupId>edu.cmu.sphinx</groupId>
  <artifactId>sphinx4-core</artifactId>
  <version>5prealpha-SNAPSHOT</version>
</dependency>

sphinx4-data如果您想使用默认的美国英语声学和语言模型,也请添加到依赖项:

<dependency>
  <groupId>edu.cmu.sphinx</groupId>
  <artifactId>sphinx4-data</artifactId>
  <version>5prealpha-SNAPSHOT</version>
</dependency>

许多 IDE(例如 Eclipse、Netbeans 或 Idea)都通过插件或内置功能支持 Gradle。在这种情况下,您可以在 IDE 的帮助下将 sphinx4 库包含到您的项目中。请检查 IDE 文档的相关部分,例如 Gradle 上的 IDEA 文档

您还可以在非 Maven 项目中使用 Sphinx4。在这种情况下,您需要手动从存储库下载 jar 。您可能还需要下载依赖项(我们尽量保持较小的依赖项)并将它们包含在您的项目中。如果要使用美国英语声学模型,则需要sphinx4-core jar 和 sphinx4-data jar:

Sphinx4 jar下载

以下是如何在 Eclipse 中包含 jar 的示例:

将 Jar 包含到 Eclipse 项目中

基本用法

要快速开始使用 sphinx4,请如上所述创建一个 java 项目,添加所需的依赖项并键入以下简单代码:

package com.example;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import edu.cmu.sphinx.api.Configuration;
import edu.cmu.sphinx.api.SpeechResult;
import edu.cmu.sphinx.api.StreamSpeechRecognizer;

public class TranscriberDemo {       

    public static void main(String[] args) throws Exception {

        Configuration configuration = new Configuration();

        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");

	StreamSpeechRecognizer recognizer = new StreamSpeechRecognizer(configuration);
	InputStream stream = new FileInputStream(new File("test.wav"));

        recognizer.startRecognition(stream);
	SpeechResult result;
        while ((result = recognizer.getResult()) != null) {
	    System.out.format("Hypothesis: %s\n", result.getHypothesis());
	}
	recognizer.stopRecognition();
    }
}

这个简单的代码片段会转录该文件test.wav- 只需确保它存在于项目根目录中即可。

sphinx4中有几个高级识别接口:

  • 实时语音识别器
  • 流语音识别器
  • 语音对齐器

对于大多数语音识别工作来说,高级接口就足够了。基本上,您只需设置四个属性:

  • 声学模型
  • 字典
  • 语法/语言模型
  • 言语来源

前三个属性是使用对象设置的Configuration,然后将其传递给识别器。连接到语音源的方式取决于您的具体识别器,通常作为方法参数传递。

配置

AConfiguration用于向识别器提供必需的和可选的属性。

Configuration configuration = new Configuration();

// Set path to acoustic model.
configuration.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us");
// Set path to dictionary.
configuration.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict");
// Set language model.
configuration.setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.bin");

实时语音识别器

使用LiveSpeechRecognizer麦克风作为语音源。

LiveSpeechRecognizer recognizer = new LiveSpeechRecognizer(configuration);
// Start recognition process pruning previously cached data.
recognizer.startRecognition(true);
SpeechResult result = recognizer.getResult();
// Pause recognition process. It can be resumed then with startRecognition(false).
recognizer.stopRecognition();

流语音识别器

使用StreamSpeechRecognizeranInputStream作为语音源。您可以从文件、网络套接字或现有字节数组传递数据。

StreamSpeechRecognizer recognizer = new StreamSpeechRecognizer(configuration);
recognizer.startRecognition(new FileInputStream("speech.wav"));

SpeechResult result = recognizer.getResult();
recognizer.stopRecognition();

请注意,此解码的音频必须具有以下格式之一:

RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 16000 Hz

或者

RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 8000 Hz

该解码器不支持其他格式。如果音频格式不匹配,您将不会得到任何结果。这意味着,您需要在解码之前将音频转换为正确的格式。例如,如果您想以 8000 Hz 采样率解码电话质量的音频,您需要调用

configuration.setSampleRate(8000);

您可以检索多个结果,直到到达文件末尾:

while ((result = recognizer.getResult()) != null) {
    System.out.println(result.getHypothesis());
}

语音对齐器

文本与音频语音的时间SpeechAligner对齐。

SpeechAligner aligner = new SpeechAligner(configuration);
aligner.align(new URL("101-42.wav"), "one oh one four two");

演讲结果

ASpeechResult提供对识别结果各个部分的访问,例如识别的话语、带有时间戳的单词列表、识别网格等:

// Print utterance string without filler words.
System.out.println(result.getHypothesis());

// Get individual words and their times.
for (WordResult r : result.getWords()) {
    System.out.println(r);
}

// Save lattice in a graphviz format.
result.getLattice().dumpDot("lattice.dot", "lattice");

演示

sphinx4 源代码中包含许多示例演示,以便您了解如何运行 sphinx4。您可以从 sphinx4-samples jar 运行它们:

如果您打算从演示开始,请不要修改 sphinx4 源代码中的演示。相反,请将代码复制到您的项目中并在那里进行修改。

从源头构建

如果您想开发 sphinx4 本身,您可能需要从源代码构建它。
Sphinx4 使用Gradle构建系统。为了编译和安装所有内容(包括依赖项),只需在根目录中输入“gradle build”即可。

如果您打算使用 IDE,请确保它支持 Gradle 项目。然后只需导入 sphinx4 源代码树即可。

故障排除

您在使用 sphinx4 时可能会遇到这样或那样的问题。在论坛上提出任何新问题之前,请先查看常见问题解答。

如果您对准确性有疑问,您需要提供您尝试识别的音频录音以及您使用的所有模型。此外,您需要描述您的结果与您的期望有何不同。

  • 28
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟V-SpHeNIC

支持科研技术

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值