Övning – Skapa en tal-till-text-applikation för engångsigenkänning

Slutförd

I den här övningen skapar du ett program som använder enkel igenkänning för att transkribera en ljudfil som du laddar ned.

Skapa ditt tal till text-program

  1. I Cloud Shell till höger skapar du en katalog för ditt program och ändrar sedan till din nya katalog:

    mkdir speech-to-text
    cd speech-to-text
    
  2. Skapa ett nytt .NET Core-program:

    dotnet new console
    

    Det bör ta några sekunder att slutföra det här kommandot.

  3. När .NET Core-programmet har skapats lägger du till Speech SDK-paketet i ditt program:

    dotnet add package Microsoft.CognitiveServices.Speech
    

    Det bör ta några sekunder att slutföra det här kommandot.

Ladda ned en WAVE-fil för igenkänning

I Cloud Shell till höger kör du följande kommando för att ladda ned en WAV-exempelfil som innehåller en serie citattecken från William Shakespeares pjäs "As You Like It".

curl -L https://aka.ms/ShakespeareWAV -o Shakespeare.wav

Du använder den här WAV-filen för programmet i den här övningen och programmet i nästa övning.

Lägg till koden för din app för text till tal

  1. Öppna filen Program.cs i Cloud Shell till höger:

    code Program.cs
    
  2. Ta bort all befintlig kod och lägg till följande using-instruktioner, som aktiverar Azure AI Speech API:er för ditt program:

    using System.Text;
    using Microsoft.CognitiveServices.Speech;
    using Microsoft.CognitiveServices.Speech.Audio;
    
  3. Lägg till följande kod, som använder Azure AI Speech API:er för att konvertera innehållet i WAV-filen som du skapade tidigare för att skapa en textfil med det transkriberade talet. Ersätt värdena azureKey och azureLocation med de värden som du kopierade i den senaste övningen.

    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)
        {
            Console.WriteLine("Speech recognition started.");
            var speechConfig = SpeechConfig.FromSubscription(azureKey, azureLocation);
            using var audioConfig = AudioConfig.FromWavFileInput(fileInfo.FullName);
            using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
            var result = await speechRecognizer.RecognizeOnceAsync();
    
            FileStream fileStream = File.OpenWrite(textFile);
            StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.UTF8);
            streamWriter.WriteLine(result.Text);
            streamWriter.Close();
            Console.WriteLine("Speech recognition stopped.");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    

    Den här koden använder din nyckel och plats för att initiera en anslutning till Azure AI Speech. Den läser sedan innehållet i WAV-filen som du laddade ned och använder sedan RecognizeOnceAsync()-metoden för SpeechRecognizer för att konvertera ljudet till text och använder sedan en strömskrivare för att spara resultatet i en textfil.

  4. När du har lagt till all kod bör filen likna följande exempel:

    using System.Text;
    using System.Threading.Tasks;
    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)
        {
            Console.WriteLine("Speech recognition started.");
            var speechConfig = SpeechConfig.FromSubscription(azureKey, azureLocation);
            using var audioConfig = AudioConfig.FromWavFileInput(fileInfo.FullName);
            using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
            var result = await speechRecognizer.RecognizeOnceAsync();
    
            FileStream fileStream = File.OpenWrite(textFile);
            StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.UTF8);
            streamWriter.WriteLine(result.Text);
            streamWriter.Close();
            Console.WriteLine("Speech recognition stopped.");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    

    Se till att du uppdaterar värdena för variablerna azureKey och azureLocation med din nyckel och plats från föregående övning.

  5. Spara ändringarna genom att trycka på Ctrl+ S för att spara filen och sedan trycka på Ctrl + Q för att avsluta redigeraren.

Kör ditt program

  1. Om du vill köra ditt program använder du följande kommando i Cloud Shell till höger:

    dotnet run
    
  2. Om du inte ser några fel har programmet körts och du bör se följande svar:

    Speech recognition started.
    Speech recognition stopped.
    
  3. Kör följande kommando för att hämta en lista över filer i katalogen:

    ls -l
    

    Du bör se ett svar som i följande exempel och du bör se Shakespeare.txt i listan med filer:

    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     1476 Oct  1 11:11 Program.cs
    -rw-r--r-- 1 user   user       98 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
    

    Du kommer att märka att storleken på textfilen är liten. I det här exemplet är det bara 98 byte.

  4. Om du vill visa innehållet i Shakespeare.txt-filen använder du följande kommando:

    cat Shakespeare.txt
    

    Du bör se ett svar som i följande exempel:

    The following quotes are from Act 2, scene seven of William Shakespeare's play as you like it.
    

    Om du lyssnade på WAV-exempelfilen skulle du märka att den här texten bara är de första sekunderna av ljudet. Eftersom vi använde metoden RecognizeOnceAsync() i SpeechRecognizerstoppades tal-till-textigenkänningen när talaren tog en paus.

I nästa övning får du lära dig hur du fortsätter tal-till-text-igenkänningen för hela ljudfilen.