Я хочу конвертировать речь в текст с помощью Microsoft.Speech - PullRequest
0 голосов
/ 09 января 2019

В настоящее время я пытался использовать текст в речи System.Speech и Microsoft.Speech

я могу использовать только Microsoft.Speech, потому что System.Speech не работает, если язык по умолчанию не английский.

Сначала я попытался использовать этот код для получения текста из моего голоса.

public void Recognize()
    {
        using ( SpeechSynthesizer Synthesizer = new SpeechSynthesizer() )
        {
            // Text To Speech
            Synthesizer.SetOutputToDefaultAudioDevice();
            //Synthesizer.Speak( "Test" );

            using ( SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine() )
            {
                recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>( OnSpeechRecognized );
                recognizer.LoadGrammarCompleted += new EventHandler<LoadGrammarCompletedEventArgs>( OnLoadGrammarCompleted );
                recognizer.SetInputToDefaultAudioDevice();

                recognizer.LoadGrammar( new Grammar( "Resources/Grammar.xml" )
                {
                    Enabled = true
                } );

                Console.WriteLine( "Recognize()" );

                RecognitionResult result = recognizer.Recognize( TimeSpan.FromSeconds( 3 ) );
                if ( result != null )
                {
                    Console.WriteLine( "Result => " + result.Text );
                }
                else
                {
                    Console.WriteLine( "Text is not on list" );
                }
            }
        }
    }

и я заметил, что если предложение (или слово) в моей речи не содержится в Списке в элементах грамматики, оно не будет применено к результату.

поэтому я искал об этой проблеме и, наконец, нашел этот код.

public Grammar GrammarWithDictation()
    {
        GrammarBuilder builder = new GrammarBuilder();
        builder.Append( "begin" );
        builder.AppendDictation( "spelling" );
        builder.Append( "end" );
        Grammar grammarWithDictation = new Grammar( builder );
        grammarWithDictation.Name = "Grammar with Dictation";

        return grammarWithDictation;
    }

Итак, я применил его к своему коду следующим образом.

public void Recognize()
    {
        using ( SpeechSynthesizer Synthesizer = new SpeechSynthesizer() )
        {
            // Text To Speech 
            Synthesizer.SetOutputToDefaultAudioDevice();
            //Synthesizer.Speak( "Test" );

            using ( SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine() )
            {
                recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>( OnSpeechRecognized );
                recognizer.LoadGrammarCompleted += new EventHandler<LoadGrammarCompletedEventArgs>( OnLoadGrammarCompleted );
                recognizer.SetInputToDefaultAudioDevice();

                //recognizer.LoadGrammar( new Grammar( "Resources/Grammar.xml" )
                //{
                //    Enabled = true
                //} );

                recognizer.LoadGrammarAsync( GrammarWithDictation() );

                Console.WriteLine( "Recognize()" );

                RecognitionResult result = recognizer.Recognize( TimeSpan.FromSeconds( 3 ) );
                if ( result != null )
                {
                    Console.WriteLine( "Result => " + result.Text );
                }
                else
                {
                    Console.WriteLine( "No Results." );
                }
            }
        }
    }

и это не работает.

Так вот в чем суть этой длинной статьи.

Как я могу получить целое предложение в своей речи с Microsoft.Speech?

это возможно? или мне нужно использовать другие вещи для этого?

...