11

マイクに話しかける代わりに、.wavsを与えるレコグナイザーをプログラムでトレーニングすることは可能ですか?

もしそうなら、それを行う方法は?、現在私は0.wavファイルのオーディオで認識を実行し、認識されたテキストをコンソールに書き込むコードを持っています。

Imports System.IO
Imports System.Speech.Recognition
Imports System.Speech.AudioFormat

Namespace SampleRecognition
    Class Program
        Shared completed As Boolean

        Public Shared Sub Main(ByVal args As String())
            Using recognizer As New SpeechRecognitionEngine()
                Dim dictation As Grammar = New DictationGrammar()
                dictation.Name = "Dictation Grammar"
                recognizer.LoadGrammar(dictation)
                ' Configure the input to the recognizer.
                recognizer.SetInputToWaveFile("C:\Users\ME\v02\0.wav")

                ' Attach event handlers for the results of recognition.
                AddHandler recognizer.SpeechRecognized, AddressOf recognizer_SpeechRecognized
                AddHandler recognizer.RecognizeCompleted, AddressOf recognizer_RecognizeCompleted

                ' Perform recognition on the entire file.
                Console.WriteLine("Starting asynchronous recognition...")
                completed = False
                recognizer.RecognizeAsync()
                ' Keep the console window open.
                While Not completed
                    Console.ReadLine()
                End While
                Console.WriteLine("Done.")
            End Using

            Console.WriteLine()
            Console.WriteLine("Press any key to exit...")
            Console.ReadKey()
        End Sub

        ' Handle the SpeechRecognized event.
        Private Shared Sub recognizer_SpeechRecognized(ByVal sender As Object, ByVal e As SpeechRecognizedEventArgs)
            If e.Result IsNot Nothing AndAlso e.Result.Text IsNot Nothing Then
                Console.WriteLine("  Recognized text =  {0}", e.Result.Text)
            Else
                Console.WriteLine("  Recognized text not available.")
            End If
        End Sub

        ' Handle the RecognizeCompleted event.
        Private Shared Sub recognizer_RecognizeCompleted(ByVal sender As Object, ByVal e As RecognizeCompletedEventArgs)
            If e.[Error] IsNot Nothing Then
                Console.WriteLine("  Error encountered, {0}: {1}", e.[Error].[GetType]().Name, e.[Error].Message)
            End If
            If e.Cancelled Then
                Console.WriteLine("  Operation cancelled.")
            End If
            If e.InputStreamEnded Then
                Console.WriteLine("  End of stream encountered.")
            End If
            completed = True
        End Sub
    End Class
End Namespace

編集

トレーニングウィザードを使用すると、これを行うのに役立つことを理解しています

音声認識を開き、[スタート]ボタン->[コントロールパネル]->[アクセスのしやすさ]->[音声認識]をクリックして実行します

カスタムwavまたはmp3ファイルで音声認識をカスタムトレーニングする方法は?

トレーニングウィザード(コントロールパネルトレーニングUI)を使用する場合、トレーニングファイルは {AppData} \ Local \ Microsoft \ Speech \ Files\TrainingAudioに保存されます。

トレーニングウィザードを使用する代わりに、カスタムトレーニングを使用または作成するにはどうすればよいですか?

音声コントロールパネルは、キーHKCU \ Software \ Microsoft \ Speech \ RecoProfiles \ Tokens {ProfileGUID} {00000000-0000-0000-0000-0000000000000000}\Filesにトレーニングオーディオファイルのレジストリエントリを作成します

コードによって作成されたレジストリエントリをそこに配置する必要がありますか?

これを行う理由は、自分のwavファイルと単語やフレーズのリストを使用してカスタムトレーニングを行い、すべてを他のシステムに転送したいからです。

4

2 に答える 2

5

C#を使用してSAPIをトレーニングすることは確かに可能です。SAPIのspeechlibラッパーを使用して、C#からトレーニングモードAPIにアクセスできます。@ EricBrownが手順に回答しました

  • inprocレコグナイザーを作成し、適切なオーディオ入力をバインドします。
  • 認識のために音声を保持していることを確認してください。後で必要になります。
  • トレーニングするテキストを含む文法を作成します。
  • 認識が発生したときに認識機能を一時停止するように文法の状態を設定します。(これは、オーディオファイルからのトレーニングにも役立ちます。)

    認識が発生したとき:

  • 認識されたテキストと保持された音声を取得します。

  • CoCreateInstance(CLSID_SpStream)を使用してストリームオブジェクトを作成します。
  • ISpRecognizer::GetObjectTokenおよびISpObjectToken::GetStorageFileNameを使用してトレーニングオーディオファイルを作成し、それをストリームにバインドします(ISpStream :: BindToFileを使用)。
  • 保持されたオーディオをストリームオブジェクトにコピーします。
  • QI ISpTranscriptインターフェイスのストリームオブジェクトを確認し、ISpTranscript :: AppendTranscriptを使用して、認識されたテキストをストリームに追加します。
  • 次の発話のために文法を更新し、認識機能を再開し、トレーニングテキストがなくなるまで繰り返します。

他のオプションは、必要な出力でsapiを一度トレーニングしてから、コードでプロファイルを取得し、それを他のシステムに転送することです。次のコードはISpeechObjectTokensオブジェクトを返します。

GetProfilesメソッドは、使用可能なユーザー音声プロファイルの選択を返します。プロファイルは一連のトークンとして音声構成データベースに保存され、各トークンは1つのプロファイルを表します。GetProfilesは、使用可能なすべてのプロファイルトークンを取得します。返されるリストはISpeechObjectTokensオブジェクトです。トークンに関する追加情報またはより詳細な情報は、ISpeechObjectTokensに関連付けられたメソッドで利用できます。トークン検索は、RequiredAttributesおよびOptionalAttributes検索属性を使用してさらに絞り込むことができます。指定されたRequiredAttributes検索属性に一致するトークンのみが返されます。RequiredAttributesキーに一致するトークンのうち、OptionalAttributesは、OptionalAttributesに一致する順序でデバイスを一覧表示します。検索属性が提供されていない場合、すべてのトークンが返されます。SAPI 5で定義された属性のリストについては、オブジェクトトークンとレジストリ設定のホワイトペーパーを参照してください

Public SharedRecognizer As SpSharedRecognizer
Public theRecognizers As ISpeechObjectTokens

Private Sub Command1_Click()
    On Error GoTo EH

    Dim currentProfile As SpObjectToken
    Dim i As Integer
    Dim T As String
    Dim TokenObject As ISpeechObjectToken
    Set currentProfile = SharedRecognizer.Profile

    For i = 0 To theRecognizers.Count - 1
        Set TokenObject = theRecognizers.Item(i)

        If tokenObject.Id <> currentProfile.Id Then
            Set SharedRecognizer.Profile = TokenObject
            T = "New Profile installed: "
            T = T & SharedRecognizer.Profile.GetDescription
            Exit For
        Else
            T = "No new profile has been installed."
        End If
    Next i

    MsgBox T, vbInformation

EH:
    If Err.Number Then ShowErrMsg
End Sub

Private Sub Form_Load()
    On Error GoTo EH

    Const NL = vbNewLine
    Dim i, idPosition As Long
    Dim T As String
    Dim TokenObject As SpObjectToken

    Set SharedRecognizer = CreateObject("SAPI.SpSharedRecognizer")
    Set theRecognizers = SharedRecognizer.GetProfiles

    For i = 0 To theRecognizers.Count - 1
        Set TokenObject = theRecognizers.Item(i)
        T = T & TokenObject.GetDescription & "--" & NL & NL
        idPosition = InStrRev(TokenObject.Id, "\")
        T = T & Mid(TokenObject.Id, idPosition + 1) & NL
    Next i

    MsgBox T, vbInformation

EH:
    If Err.Number Then ShowErrMsg
End Sub

Private Sub ShowErrMsg()

    ' Declare identifiers:
    Dim T As String

    T = "Desc: " & Err.Description & vbNewLine
    T = T & "Err #: " & Err.Number
    MsgBox T, vbExclamation, "Run-Time Error"
    End

End Sub
于 2013-02-24T03:55:28.353 に答える
2

SAPIエンジン(マネージAPIではない)を使用してカスタムトレーニングを生成できます

これを行う方法に関するリンクは次のとおりです(少しあいまいですが)

于 2013-02-19T09:35:58.287 に答える