Упражнение. Создание речи распознавания с одним снимком в текстовом приложении

Завершено

В этом упражнении вы создадите приложение, использующее однозастрелочное распознавание для транскрибирования примера аудиофайла, который будет скачан.

Создание речи в текстовом приложении

  1. В Cloud Shell справа создайте каталог для приложения, а затем перейдите в новый каталог:

    mkdir speech-to-text
    cd speech-to-text
    
  2. Создайте новое приложение .NET Core:

    dotnet new console
    

    Эта команда должна занять несколько секунд.

  3. После создания приложения .NET Core добавьте пакет пакета SDK службы "Речь" в приложение:

    dotnet add package Microsoft.CognitiveServices.Speech
    

    Эта команда должна занять несколько секунд.

Скачивание ФАЙЛА WAVE для распознавания

В Cloud Shell справа выполните следующую команду, чтобы скачать пример WAV-файла, который содержит ряд цитат из пьесы Уильяма Шекспира "Как вам нравится".

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

Этот WAV-файл будет использоваться для приложения в этом упражнении и приложения в следующем упражнении.

Добавление кода для текста в приложение речи

  1. В Cloud Shell справа откройте файл Program.cs :

    code Program.cs
    
  2. Удалите весь существующий код и добавьте следующие using инструкции, которые позволяют API службы "Речь Azure" для приложения:

    using System.Text;
    using Microsoft.CognitiveServices.Speech;
    using Microsoft.CognitiveServices.Speech.Audio;
    
  3. Добавьте следующий код, который использует API службы "Речь ИИ Azure" для преобразования содержимого файла WAV, созданного ранее для создания текстового файла с транскрибированным речью. Замените azureKey значения и azureLocation значения, скопированные в последнем упражнении.

    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);
    }
    

    Этот код использует ключ и расположение для инициализации подключения к службе "Речь ИИ Azure". Затем он считывает содержимое скачанного WAV-файла, а затем использует RecognizeOnceAsync() метод SpeechRecognizer преобразования звука в текст, а затем использует модуль записи потоков для сохранения результатов в текстовый файл.

  4. После завершения добавления всего кода файл должен выглядеть следующим образом:

    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);
    }
    

    Убедитесь, что вы обновляете значения для azureKey azureLocation переменных с помощью ключа и расположения из предыдущего упражнения.

  5. Чтобы сохранить изменения в файле, нажмите CTRL + S, а затем CTRL + Q, чтобы закрыть редактор.

Запуск приложения

  1. Чтобы запустить приложение, используйте следующую команду в Cloud Shell справа:

    dotnet run
    
  2. Если вы не видите никаких ошибок, приложение успешно запущено, и вы увидите следующие ответы:

    Speech recognition started.
    Speech recognition stopped.
    
  3. Выполните следующую команду, чтобы получить список файлов в каталоге:

    ls -l
    

    Вы должны увидеть ответ, как в следующем примере, и вы увидите Шекспир.txt в списке файлов:

    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
    

    Вы заметите, что размер текстового файла мал; в этом примере это всего 98 байт.

  4. Чтобы просмотреть содержимое файла Шекспира.txt , используйте следующую команду:

    cat Shakespeare.txt
    

    Вы увидите ответ, как показано в следующем примере:

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

    Если вы прослушивали образец WAV-файла, вы заметите, что этот текст составляет только первые несколько секунд звука. Так как мы использовали RecognizeOnceAsync() метод, SpeechRecognizerречь к распознаванию текста остановлена при приостановке говорящего.

В следующем упражнении вы узнаете, как продолжить распознавание текста для всего звукового файла.