1

我正在做一个项目,我需要使用语音识别将 wav 文件输入语音(对话)转换为文本。在尝试 CMUSPhinx 一段时间后,结果很糟糕,我正在考虑使用 Microsoft SAPI (Speech API) 5.4

我正在编写 Visual Studio 中的 Visual Basic Windows 应用程序。这是我的代码片段:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    '   Dim SAPI
    '   SAPI = CreateObject("sapi.spvoice")
    '   SAPI.Speak(TextBox1.Text)

    ' Create new recognizer
    Dim Recognizer As New SpInprocRecognizer

    ' create input file stream
    InputFile = New SpFileStream
    ' Defaults to open for read-only, and DoEvents false
    InputFile.Open(MY_WAVE_AUDIO_FILENAME)

    ' connect wav audio input to speech recognition engine
    Recognizer.AudioInputStream = InputFile

    ' create recognition context
    RecoContext = Recognizer.CreateRecoContext

    '  AddHandler RecoContext.Recognition, AddressOf RecoContext_Recognition

    ' create grammar
    Grammar = RecoContext.CreateGrammar
    ' ... and load dictation
    Grammar.DictationLoad()
    ' start dictating
    Grammar.DictationSetState(SGDSActive)
End Sub

在 MY_WAVE_AUDIO_FILENAME 中,我给出了带有完整路径的文件名。当我单击按钮运行此代码时,我没有得到任何输出。我使用了以下识别方法:

 Private Sub RecoContext_Recognition(ByVal StreamNumber As Long, ByVal StreamPosition As Object, ByVal RecognitionType As SpeechRecognitionType, ByVal Result As ISpeechRecoResult)
        ' Log/Report recognized phrase/information
        Console.WriteLine("Reached here......")
        TextBox1.Text = "Text should change"
    End Sub

当我调试应用程序时,流程没有达到 RecoContext_Recognition 方法。输入文件是一个 wav 文件,每个样本 16 位,30 秒长的对话。

我正在使用此链接中提到的代码:http: //msdn.microsoft.com/en-us/library/ee431813 (v=vs.85).aspx

我如何检查问题?我在某处读到需要对语音识别引擎进行听写训练,如果在我的情况下也需要,那么我该怎么做?同样在链接中提到我们需要指定输入文件的长度才能做到这一点,我也不确定如何做到这一点。需要帮助。

4

1 回答 1

1

示例代码缺少一些需要解决的步骤。

1) Inproc 识别器在进行任何识别之前需要绑定一个引擎;

2)在开始处理音频之前,需要将 inproc 识别器设置为活动状态。

您还应该考虑为其他事件添加处理程序,特别是 SPEI_START_SR_STREAM、SPEI_SOUND_START、SPEI_SOUND_END 和 SPEI_PHRASE_START,以验证 SR 引擎是否正在处理音频并且它正在尝试进行一些识别。

于 2013-04-02T00:28:13.487 回答