8

.NET Speech 名前空間クラスを使用して、WAVファイルのオーディオをテキスト形式に変換し、画面に表示したり、ファイルに保存したりするにはどうすればよいですか?

チュートリアルのサンプルを探しています。

アップデート

ここでコードサンプルを見つけました。しかし、試してみると、間違った結果が得られます。以下は、私が採用した VB コードのサンプルです。(実際には、vb/c# のいずれかである限り、言語は気にしません...)。それは私に適切な結果を与えていません。正しい文法、つまり録音で期待される単語を入力すれば、そのテキスト出力が得られるはずです。最初に、呼び出しにあるサンプル単語を試しました。時々、その (1) 単語だけを出力し、他には何も出力しませんでした。それから、録音ではまったく予期しない言葉を試してみました...残念ながら、それも印刷されました... :(

Imports System
Imports System.Speech.Recognition

Public Class Form1

    Dim WithEvents sre As SpeechRecognitionEngine

    Private Sub btnLiterate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLiterate.Click
        If TextBox1.Text.Trim.Length = 0 Then Exit Sub
        sre.SetInputToWaveFile(TextBox1.Text)
        Dim r As RecognitionResult
        r = sre.Recognize()
        If r Is Nothing Then
            TextBox2.Text = "Could not fetch result"
            Return
        End If
        TextBox2.Text = r.Text
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = String.Empty
        Dim dr As DialogResult
        dr = OpenFileDialog1.ShowDialog()
        If dr = Windows.Forms.DialogResult.OK Then
            If Not OpenFileDialog1.FileName.Contains("wav") Then
                MessageBox.Show("Incorrect file")
            Else
                TextBox1.Text = OpenFileDialog1.FileName
            End If
        End If
    End Sub

    Public Sub New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        sre = New SpeechRecognitionEngine()

    End Sub

    Private Sub sre_LoadGrammarCompleted(ByVal sender As Object, ByVal e As System.Speech.Recognition.LoadGrammarCompletedEventArgs) Handles sre.LoadGrammarCompleted

    End Sub

    Private Sub sre_SpeechHypothesized(ByVal sender As Object, ByVal e As System.Speech.Recognition.SpeechHypothesizedEventArgs) Handles sre.SpeechHypothesized
        System.Diagnostics.Debug.Print(e.Result.Text)
    End Sub

    Private Sub sre_SpeechRecognitionRejected(ByVal sender As Object, ByVal e As System.Speech.Recognition.SpeechRecognitionRejectedEventArgs) Handles sre.SpeechRecognitionRejected
        System.Diagnostics.Debug.Print("Rejected: " & e.Result.Text)
    End Sub

    Private Sub sre_SpeechRecognized(ByVal sender As Object, ByVal e As System.Speech.Recognition.SpeechRecognizedEventArgs) Handles sre.SpeechRecognized
        System.Diagnostics.Debug.Print(e.Result.Text)
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim words As String() = New String() {"triskaidekaphobia"}
        Dim c As New Choices(words)
        Dim grmb As New GrammarBuilder(c)
        Dim grm As Grammar = New Grammar(grmb)
        sre.LoadGrammar(grm)
    End Sub

End Class

UPDATE(11月28日以降)

デフォルトの文法をロードする方法を見つけました。次のようになります。

sre.LoadGrammar(New DictationGrammar)

ここにはまだ問題があります。認識は正確ではありません。出力はゴミです。6 分のファイルの場合、おそらく音声ファイルとはまったく関係のない 5 ~ 6 語のテキストが生成されます。

4

5 に答える 5

8

System.Speech のクラスは、テキスト読み上げ用です (主にアクセシビリティ機能)。

音声認識を探しています。.Net 3.0 以降で利用可能なSystem.Speech.Recognition名前空間があります。Windows デスクトップ スピーチ エンジンを使用します。これで始められるかもしれませんが、もっと良いエンジンがあると思います。

音声認識は非常に複雑で正しく行うのが難しく、市販されている製品もあります。

于 2009-11-20T07:31:56.460 に答える
1

これは古い質問だと思いますが、後の質問と回答でより良い情報を入手できます。たとえば、asp.net Web アプリで音声からテキストへの書き起こしに最適なオプションは何ですか? を参照してください。

SetInputToDefaultAudioDevice() を呼び出す代わりに、SetInputToWaveFile() を呼び出してオーディオ ファイルから読み取ることができます。

Windows Vista と Windows 7 に搭載されているデスクトップ認識エンジンには、参照されている回答に示されているように口述文法が含まれています。

于 2011-03-22T15:03:51.973 に答える
0

を使用する必要がありますSpeechRecognitionEngine。ウェーブファイルを使用するには、を呼び出しますSetInputToWaveFile。もっとお手伝いできればいいのですが、私は専門家ではありません。

ああ、あなたの言葉が本当にならtriskaidekaphobia、人間の音声認識エンジンでさえそれを認識しないと思います...

于 2009-11-23T08:22:06.007 に答える
0

実際には自然言語ツールキットが必要です。Python では、NTLK http://www.nltk.org/を使用しました。

.Net で Antelope https://stackoverflow.com/questions/1762040/natural-language-toolkit-equivalent-in-c を見つけました

記事も参照してください http://en.wikipedia.org/wiki/Speech_recognition

于 2009-11-20T07:39:24.107 に答える
0

コードをテストしましたが、wave ファイルを適切に取得していません。つかんでいます

If Not OpenFileDialog1.FileName.Contains("wav") Then MessageBox.Show("不正なファイル") Else TextBox1.Text = OpenFileDialog1.FileName End If

else 条件ではありません。文字列にも .wav を使用してみました。

マイクからではなく、wav ファイルをテキストに書き起こすためのサンプル コードも必要です。良い解決策にたどり着いたら、ここに投稿してください。

于 2009-11-27T16:34:14.017 に答える