Ćwiczenie — tworzenie mowy rozpoznawania pojedynczego strzału w aplikacji tekstowej
W tym ćwiczeniu utworzysz aplikację, która używa rozpoznawania pojedynczego strzału do transkrypcji przykładowego pliku audio, który zostanie pobrany.
Tworzenie aplikacji zamiany mowy na tekst
W usłudze Cloud Shell po prawej stronie utwórz katalog dla aplikacji, a następnie przejdź do nowego katalogu:
mkdir speech-to-text cd speech-to-text
Utwórz nową aplikację platformy .NET Core:
dotnet new console
Wykonanie tego polecenia powinno potrwać kilka sekund.
Po utworzeniu aplikacji platformy .NET Core dodaj pakiet zestawu Speech SDK do aplikacji:
dotnet add package Microsoft.CognitiveServices.Speech
Wykonanie tego polecenia powinno potrwać kilka sekund.
Pobieranie pliku WAVE na potrzeby rozpoznawania
W usłudze Cloud Shell po prawej stronie uruchom następujące polecenie, aby pobrać przykładowy plik WAV zawierający serię cytatów z sztuki Williama Szekspira "As You Like It".
curl -L https://aka.ms/ShakespeareWAV -o Shakespeare.wav
Użyjesz tego pliku WAV dla aplikacji w tym ćwiczeniu i aplikacji w następnym ćwiczeniu.
Dodawanie kodu tekstu do aplikacji mowy
W usłudze Cloud Shell po prawej stronie otwórz plik Program.cs :
code Program.cs
Usuń cały istniejący kod i dodaj następujące
using
instrukcje, które umożliwiają interfejsy API rozpoznawania mowy usługi Azure AI dla aplikacji:using System.Text; using Microsoft.CognitiveServices.Speech; using Microsoft.CognitiveServices.Speech.Audio;
Dodaj następujący kod, który używa interfejsów API rozpoznawania mowy usługi Azure AI w celu przekonwertowania zawartości utworzonego wcześniej pliku WAV w celu utworzenia pliku tekstowego z transkrypcją mowy.
azureKey
Zastąp wartości iazureLocation
wartościami skopiowanymi w ostatnim ćwiczeniu.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); }
Ten kod używa klucza i lokalizacji do inicjowania połączenia z usługą Azure AI Speech. Następnie odczytuje zawartość pobranego pliku WAV, a następnie używa metody
SpeechRecognizer
, aby przekonwertować dźwięk na tekst, a następnie używaRecognizeOnceAsync()
modułu zapisywania strumienia do zapisania wyników w pliku tekstowym.Po zakończeniu dodawania całego kodu plik powinien przypominać następujący przykład:
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); }
Upewnij się, że wartości zmiennych
azureKey
iazureLocation
są aktualizowane przy użyciu klucza i lokalizacji z poprzedniego ćwiczenia.W celu zapisania zmian naciśnij klawisze Ctrl+S, aby zapisać plik, a następnie naciśnij klawisze Ctrl+Q, aby zakończyć działanie edytora.
Uruchamianie aplikacji
Aby uruchomić aplikację, użyj następującego polecenia w usłudze Cloud Shell po prawej stronie:
dotnet run
Jeśli nie widzisz żadnych błędów, aplikacja została pomyślnie uruchomiona i powinna zostać wyświetlona następująca odpowiedź:
Speech recognition started. Speech recognition stopped.
Uruchom następujące polecenie, aby uzyskać listę plików w katalogu:
ls -l
Powinna zostać wyświetlona odpowiedź podobna do poniższego przykładu. Powinien zostać wyświetlony plik Shakespeare.txt na liście plików:
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
Zauważysz, że rozmiar pliku tekstowego jest mały; w tym przykładzie jest to tylko 98 bajtów.
Aby wyświetlić zawartość pliku Shakespeare.txt , użyj następującego polecenia:
cat Shakespeare.txt
Powinna zostać wyświetlona odpowiedź podobna do poniższego przykładu:
The following quotes are from Act 2, scene seven of William Shakespeare's play as you like it.
Jeśli nasłuchujesz przykładowego pliku WAV, zauważysz, że ten tekst to tylko kilka pierwszych sekund dźwięku. Ponieważ użyliśmy
RecognizeOnceAsync()
metodySpeechRecognizer
, rozpoznawanie mowy do tekstu zostało zatrzymane po wstrzymaniu osoby mówiącej.
W następnym ćwiczeniu dowiesz się, jak kontynuować rozpoznawanie mowy na tekst dla całego pliku audio.