Oefening: een toepassing voor continue herkenning van spraak naar tekst maken

Voltooid

In deze oefening maakt u een toepassing die gebruikmaakt van continue herkenning om het voorbeeldaudiobestand dat u in de vorige oefening hebt gedownload, te transcriberen.

De code voor uw tekst-naar-spraaktoepassing wijzigen

  1. Open in Cloud Shell aan de rechterkant het bestand Program.cs .

    code Program.cs
    
  2. Werk het try/catch-blok bij met de volgende code om de toepassing te wijzigen zodat continue herkenning wordt gebruikt in plaats van eenmalige herkenning:

    try
    {
        FileInfo fileInfo = new FileInfo(waveFile);
        if (fileInfo.Exists)
        {
            var speechConfig = SpeechConfig.FromSubscription(azureKey, azureLocation);
            using var audioConfig = AudioConfig.FromWavFileInput(fileInfo.FullName);
            using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
            var stopRecognition = new TaskCompletionSource<int>();
    
            FileStream fileStream = File.OpenWrite(textFile);
            StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.UTF8);
    
            speechRecognizer.Recognized += (s, e) =>
            {
                switch(e.Result.Reason)
                {
                    case ResultReason.RecognizedSpeech:
                        streamWriter.WriteLine(e.Result.Text);
                        break;
                    case ResultReason.NoMatch:
                        Console.WriteLine("Speech could not be recognized.");
                        break;
                }
            };
    
            speechRecognizer.Canceled += (s, e) =>
            {
                if (e.Reason != CancellationReason.EndOfStream)
                {
                    Console.WriteLine("Speech recognition canceled.");
                }
                stopRecognition.TrySetResult(0);
                streamWriter.Close();
            };
    
            speechRecognizer.SessionStopped += (s, e) =>
            {
                Console.WriteLine("Speech recognition stopped.");
                stopRecognition.TrySetResult(0);
                streamWriter.Close();
            };
    
            Console.WriteLine("Speech recognition started.");
            await speechRecognizer.StartContinuousRecognitionAsync();
            Task.WaitAny(new[] { stopRecognition.Task });
            await speechRecognizer.StopContinuousRecognitionAsync();
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    
  3. Wanneer u klaar bent met het wijzigen van de code, moet het bestand er ongeveer uitzien zoals in het volgende voorbeeld:

    using System.Text;
    using Microsoft.CognitiveServices.Speech;
    using Microsoft.CognitiveServices.Speech.Audio;
    
    string azureKey = "ENTER YOUR KEY FROM THE FIRST EXERCISE";
    string azureLocation = "ENTER YOUR LOCATION FROM THE FIRST EXERCISE";
    string textFile = "Shakespeare.txt";
    string waveFile = "Shakespeare.wav";
    
    try
    {
        FileInfo fileInfo = new FileInfo(waveFile);
        if (fileInfo.Exists)
        {
            var speechConfig = SpeechConfig.FromSubscription(azureKey, azureLocation);
            using var audioConfig = AudioConfig.FromWavFileInput(fileInfo.FullName);
            using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
            var stopRecognition = new TaskCompletionSource<int>();
    
            FileStream fileStream = File.OpenWrite(textFile);
            StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.UTF8);
    
            speechRecognizer.Recognized += (s, e) =>
            {
                switch(e.Result.Reason)
                {
                    case ResultReason.RecognizedSpeech:
                        streamWriter.WriteLine(e.Result.Text);
                        break;
                    case ResultReason.NoMatch:
                        Console.WriteLine("Speech could not be recognized.");
                        break;
                }
            };
    
            speechRecognizer.Canceled += (s, e) =>
            {
                if (e.Reason != CancellationReason.EndOfStream)
                {
                    Console.WriteLine("Speech recognition canceled.");
                }
                stopRecognition.TrySetResult(0);
                streamWriter.Close();
            };
    
            speechRecognizer.SessionStopped += (s, e) =>
            {
                Console.WriteLine("Speech recognition stopped.");
                stopRecognition.TrySetResult(0);
                streamWriter.Close();
            };
    
            Console.WriteLine("Speech recognition started.");
            await speechRecognizer.StartContinuousRecognitionAsync();
            Task.WaitAny(new[] { stopRecognition.Task });
            await speechRecognizer.StopContinuousRecognitionAsync();
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    

    Net als bij de vorige oefening moet u ervoor zorgen dat u de waarden voor de azureKey en azureLocation variabelen bijwerkt met uw sleutel en locatie uit de eerste oefening.

  4. Als u de wijzigingen wilt opslaan, drukt u op Ctrl+S om het bestand op te slaan en drukt u vervolgens op Ctrl+Q om de editor af te sluiten.

Uw toepassing uitvoeren

  1. Gebruik de volgende opdracht in Cloud Shell aan de rechterkant om uw toepassing uit te voeren:

    dotnet run
    
  2. Als er geen fouten worden weergegeven, is uw toepassing uitgevoerd en ziet u de volgende antwoorden:

    Speech recognition started.
    Speech recognition stopped.
    
  3. Voer de volgende opdracht uit om een lijst met bestanden op te halen in de map:

    ls -l
    

    Als het goed is, ziet u een antwoord zoals in het volgende voorbeeld en ziet u de Shakespeare.txt in de lijst met bestanden:

    drwxr-xr-x 3 user   user     4096 Oct  1 11:11 bin
    drwxr-xr-x 3 user   user     4096 Oct  1 11:11 obj
    -rw-r--r-- 1 user   user     2926 Oct  1 11:11 Program.cs
    -rw-r--r-- 1 user   user      412 Oct  1 11:11 Shakespeare.txt
    -rwxr-xr-x 1 user   user   978242 Oct  1 11:11 Shakespeare.wav
    -rw-r--r-- 1 user   user      348 Oct  1 11:11 speech to text.csproj
    

    U ziet dat het tekstbestand groter is dan het resultaat van de vorige oefening. Dit verschil in bestandsgrootte is omdat de continue spraakherkenning meer van het audiobestand heeft geconverteerd.

  4. Gebruik de volgende opdracht om de inhoud van het bestand Shakespeare.txt weer te geven:

    cat Shakespeare.txt
    

    Als het goed is, ziet u een antwoord zoals in het volgende voorbeeld:

    The following quotes are from Act 2, scene seven of William Shakespeare's play as you like it.
    Though CS we are not all alone unhappy.
    This wide and universal theater presents more woeful pageants than the scene wherein we play in.
    All the world's a stage and all the men and women merely players.
    They have their exits and their entrances, and one man in his time plays many parts, his act being seven ages.
    

    Als u naar het WAV-voorbeeldbestand hebt geluisterd, ziet u dat deze tekst nu de volledige audio bevat. Omdat we de methode van de StartContinuousRecognitionAsync()SpeechRecognizer, de spraak naar tekstherkenning voortgezet, zelfs wanneer de spreker onderbroken.

De herkenningsresultaten van uw toepassing verbeteren

In de vorige sectie ziet u dat de resultaten voor de tweede tekstregel niet perfect waren; deze fout in erkenning was te wijten aan de oude Engelse vocabulaire in William Shakespeares spel. Dit voorbeeld is vergelijkbaar met de gespecialiseerde vocabulaire die uw medische cliƫnten zullen gebruiken voor hun notities en dicteren.

Met Azure AI Speech kunt u uw herkenningsresultaten verbeteren door een lijst met woordgroepen op te geven die mogelijk onbekend zijn met de spraakherkenningsengine.

Als u een voorbeeld van dit type verbetering in actie wilt zien, gebruikt u de volgende stappen.

  1. Open in Cloud Shell aan de rechterkant het bestand Program.cs :

    code Program.cs
    
  2. Zoek de volgende twee regels code:

    FileStream fileStream = File.OpenWrite(textFile);
    StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.UTF8);
    
  3. Voeg de volgende regels code toe na deze twee regels:

    var phraseList = PhraseListGrammar.FromRecognizer(speechRecognizer);
    phraseList.AddPhrase("thou seest");
    

    Met deze regels kan de spraakherkenningsengine de oude Engelse woordgroep detecteren uit het spel van Shakespeare.

  4. Als u de wijzigingen wilt opslaan, drukt u op Ctrl+S om het bestand op te slaan en drukt u vervolgens op Ctrl+Q om de editor af te sluiten.

  5. Voer uw toepassing opnieuw uit met behulp van de volgende opdracht:

    dotnet run
    
  6. Wanneer uw toepassing is voltooid, gebruikt u de volgende opdracht om de inhoud van het Bestand Shakespeare.txt weer te geven:

    cat Shakespeare.txt
    

    Als het goed is, ziet u een antwoord zoals in het volgende voorbeeld:

    The following quotes are from Act 2, scene seven of William Shakespeare's play as you like it.
    Thou seest, we are not all alone unhappy.
    This wide and universal theater presents more woeful pageants than the scene wherein we play in.
    All the world's a stage and all the men and women merely players.
    They have their exits and their entrances, and one man in his time plays many parts, his act being seven ages.
    

    U ziet dat de herkenningsfout is opgelost in de resultaten.