Χρήση της υπηρεσίας φωνητικών εντολών Microsoft Azure για την εξαγωγή κειμένου από ένα αρχείο ήχου

Σελίδα ενημέρωση :
Ημερομηνία δημιουργίας σελίδας :

Περιβάλλον ελέγχου λειτουργίας

Microsoft Azure Voice Services
  • Έκδοση Ιουλίου 2022
Οπτικό Στούντιο
  • Visual Studio 2022
.ΝΕΤ
  • 6.0

Προϋπόθεση

Για να μπορέσετε να επαληθεύσετε ότι αυτές οι Συμβουλές έχουν αποτέλεσμα, πρέπει να κάνετε τα εξής:

Σχετικά με τα δείγματα υλικών

Δανειζόμαστε αρχεία ήχου από τον ακόλουθο ιστότοπο. Δεν περιλαμβάνεται στο δείγμα κώδικα.

Εξωτερικοί σύνδεσμοι

Αρχικά

Για παράδειγμα, προκειμένου να καταγραφούν τα περιεχόμενα της συνάντησης κ.λπ., καταγράφονται τα περιεχόμενα της συνομιλίας και αργότερα, προκειμένου να δημιουργηθούν τα πρακτικά της συνάντησης, ακούγεται ο ηχογραφημένος ήχος και μεταγράφεται σε κείμενο. Ωστόσο, είναι εύκολο να φανταστεί κανείς ότι είναι πολύ ενοχλητικό να γράψετε το περιεχόμενο της συνομιλίας σε μια πρόταση.

Δείτε πώς μπορείτε να χρησιμοποιήσετε την υπηρεσία ομιλίας Microsoft Azure για την αυτόματη εξαγωγή και εξαγωγή δεδομένων ομιλίας σε κείμενο. Στο προηγούμενο παράδειγμα, είναι μια εγγραφή της σύσκεψης, αλλά σε αυτές τις Συμβουλές, εξάγεται από το αρχείο ήχου, ώστε να μπορεί να εφαρμοστεί σε οτιδήποτε περιέχει περιεχόμενο συνομιλίας.

Επίσης, αυτή τη φορά μιλάμε για μεταγραφή σε κείμενο, Μπορείτε επίσης να χρησιμοποιήσετε την υπηρεσία φωνής Microsoft Azure για μετατροπή και μετάφραση κατά την εγγραφή.

Σχετικά με τις χρεώσεις

Αυτή τη φορά, θα χρησιμοποιήσουμε το δωρεάν πρόγραμμα, οπότε ακόμα κι αν προσπαθήσετε να λειτουργήσετε, δεν θα χρεωθείτε. Ωστόσο, το δωρεάν πρόγραμμα έχει όρια χρόνου και χαρακτήρα, οπότε αν χρειάζεστε περισσότερη μετατροπή μετά την πραγματική λειτουργία του, αλλάξτε σε ένα πρόγραμμα επί πληρωμή.

Ανατρέξτε στην ακόλουθη επίσημη σελίδα για τιμολόγηση. Δεδομένου ότι πρόκειται για υπηρεσία cloud, η χρέωση μπορεί να κυμαίνεται ανάλογα με την εποχή.

Πρόσβαση στην πύλη Microsoft Azure

Αποκτήστε πρόσβαση στην ακόλουθη διεύθυνση URL σε ένα πρόγραμμα περιήγησης web:

Εάν είστε ήδη συνδεδεμένοι, τελειώσατε. Εάν δεν είστε ήδη συνδεδεμένοι, θα εμφανιστεί η ακόλουθη οθόνη, επομένως συνδεθείτε.

Όταν συνδεθείτε, θα εμφανιστεί η ακόλουθη οθόνη. Ανάλογα με τη σχεδίαση που ρυθμίζετε, η οθόνη ενδέχεται να διαφέρει.

Δημιουργία φωνητικής υπηρεσίας στο Microsoft Azure

Εάν εισαγάγετε "φωνή" στο πεδίο εισαγωγής αναζήτησης πάνω από την πύλη, θα εμφανιστεί "φωνητική υπηρεσία", οπότε επιλέξτε την.

「Γνωστικές Υπηρεσίες | Όταν εμφανιστεί η οθόνη "Υπηρεσία φωνής", επιλέξτε "Δημιουργία".

Ανοίγει η οθόνη "Δημιουργία υπηρεσιών ομιλίας", οπότε εισαγάγετε τα απαραίτητα στοιχεία.

Βασικά

Παράδειγμα εισαγωγής
περιεχομένων στοιχείων
συνδρομή Επιλέξτε τις συνδρομές για τις οποίες θέλετε να πληρώσετε. Ακόμα κι αν είναι δωρεάν, πρέπει πάντα να το συνδέσετε με κάποιο είδος συνδρομής.
Ομάδες πόρων Καθορίζει σε ποια ομάδα πόρων θα συμπεριληφθεί η φωνητική υπηρεσία που θα δημιουργηθεί. Εάν δεν έχετε δημιουργήσει ακόμα ένα, δημιουργήστε ένα από το "Νέο" παρακάτω. Μπορείτε να θεωρήσετε τις ομάδες πόρων ως ομαδοποιήσεις όταν δημιουργείτε διάφορες υπηρεσίες.
Περιοχή Επιλέξτε κοντά σε ένα μέρος όπου μπορεί να το χρησιμοποιείτε πιο συχνά. Ωστόσο, λάβετε υπόψη ότι οι τιμές ενδέχεται να διαφέρουν ανάλογα με την περιοχή. Ανατολική Ιαπωνία
Όνομα Οποιοδήποτε όνομα για αυτήν τη φωνητική υπηρεσία. Εάν δημιουργείτε περισσότερες από μία φωνητικές υπηρεσίες, βεβαιωθείτε ότι το όνομα είναι περιγραφικό. Αυτό το όνομα είναι καθολικό και μοναδικό, επομένως δεν μπορείτε να χρησιμοποιήσετε ένα όνομα που χρησιμοποιείται αλλού. ΟμιλίαΣεκείμενο-Δοκιμή
Επίπεδο τιμολόγησης Εάν θέλετε να το χρησιμοποιήσετε δωρεάν, επιλέξτε "Δωρεάν F0". Εάν θέλετε να το χρησιμοποιήσετε έναντι αμοιβής, επιλέξτε άλλο πρόγραμμα. Φυσικά, υπάρχουν περιορισμοί εάν είναι δωρεάν. Δωρεάν F0

Μόλις εισαχθεί, επιλέξτε Επόμενο: > δικτύου παρακάτω.

δίκτυο

Παράδειγμα εισαγωγής
περιεχομένων στοιχείων
είδος Καθορίζει το εύρος από το οποίο είναι προσβάσιμη αυτή η φωνητική υπηρεσία. Εάν θέλετε να έχετε πρόσβαση σε αυτό από οπουδήποτε χωρίς λεπτομερείς ρυθμίσεις, επιλέξτε "Συμπεριλαμβανομένου του Διαδικτύου ...". "Μπορεί να προσεγγιστεί από οπουδήποτε" σημαίνει επίσης "οποιοσδήποτε μπορεί να έχει πρόσβαση σε αυτό", αλλά στην πραγματικότητα μόνο εκείνοι που έχουν το "κλειδί" που πρέπει να αποκτηθεί μετά από αυτό μπορούν να έχουν πρόσβαση σε αυτό, οπότε δεν είναι τόσο πρόβλημα όσον αφορά την ασφάλεια. Συμπεριλαμβανομένου του Διαδικτύου...

Αφού την εισαγάγετε, επιλέξτε Επόμενο: > ταυτότητας παρακάτω.

Ταυτότητα

Παράδειγμα εισαγωγής
περιεχομένων στοιχείων
Διαχειριζόμενο αναγνωριστικό που έχει εκχωρηθεί από το σύστημα Αυτή τη φορά χρησιμοποιώ μόνο την υπηρεσία φωνής, οπότε είναι καλό να την απενεργοποιήσω. από
Διαχειριζόμενο αναγνωριστικό που έχει εκχωρηθεί από το χρήστη Δεν χρειάζεται να το προσθέσω γιατί δεν δημιουργώ έναν χρήστη αυτή τη φορά. χωρίς

Αφού την εισαγάγετε, επιλέξτε Επόμενο: Προσθήκη ετικέτας > παρακάτω.

ετικέτα

Δεδομένου ότι η ετικέτα δεν χρησιμοποιείται αυτή τη φορά, δεν έχει ρυθμιστεί.

Αφού εισαχθείτε, επιλέξτε Επόμενο: Έλεγχος και δημιουργήστε > παρακάτω.

Ελέγξτε και δημιουργήστε

Εάν δεν υπάρχουν προβλήματα με τα περιεχόμενα εισαγωγής, εμφανίζεται η ένδειξη "Η επικύρωση ολοκληρώθηκε με επιτυχία". Εάν υπάρχει κάποιο πρόβλημα, θα εμφανιστεί ένα μήνυμα σφάλματος, οπότε επιστρέψτε και ρυθμίστε το ξανά.

Εάν δεν υπάρχει πρόβλημα με τα περιεχόμενα εισόδου, κάντε κλικ στο κουμπί "Δημιουργία". Στη συνέχεια, θα ξεκινήσει η ανάπτυξη.

Μετά από λίγο, η ανάπτυξη ολοκληρώνεται και εμφανίζεται η ακόλουθη οθόνη. Το όνομα ανάπτυξης είναι μεγάλο, αλλά δεν χρειάζεται να ανησυχείτε για αυτό, επειδή είναι προσωρινό στην ανάπτυξη.

Μπορείτε να κάνετε κλικ στο κουμπί Μετάβαση σε πόρο για να επαληθεύσετε ότι έχει δημιουργηθεί η φωνητική υπηρεσία.

Δημιουργία και ανάκτηση κλειδιών

Απαιτείται κλειδί ελέγχου ταυτότητας για πρόσβαση σε αυτήν τη φωνητική υπηρεσία από τον υπολογιστή-πελάτη. Δεδομένου ότι είναι προσβάσιμο μόνο από το πρόγραμμα που διαθέτει αυτό το κλειδί, είναι απαραίτητο να αποφευχθεί η κλοπή αυτού του κλειδιού από τρίτο μέρος.

Ο όρος "πελάτης" εδώ αναφέρεται σε όλα τα προγράμματα που χρησιμοποιούν το Microsoft Azure, όπως εφαρμογές επιφάνειας εργασίας, εφαρμογές smartphone και εφαρμογές web.

Για να λάβετε το κλειδί, μεταβείτε στην υπηρεσία φωνής που δημιουργήσατε. Μπορείτε να αποκτήσετε πρόσβαση από πίνακες εργαλείων, ομάδες πόρων και ούτω καθεξής.

Όταν ανοίξει η σελίδα Φωνητικές υπηρεσίες, επιλέξτε Πλήκτρα και τελικά σημεία από το μενού στα αριστερά.

Στη συνέχεια, θα ανοίξει η σελίδα "Κλειδί και τελικό σημείο" και θα εμφανιστούν τα στοιχεία "Κλειδί 1", "Κλειδί 2", "Τοποθεσία / Περιοχή" και "Τελικό σημείο".

Και τα δύο στοιχεία είναι απαραίτητα, αλλά το "Κλειδί 2" είναι ένα εφεδρικό πλαίσιο, επομένως δεν χρησιμοποιείται στις περισσότερες περιπτώσεις.

Σημειώστε κάθε τιμή. Όπως αναφέρεται στην περιγραφή, μην μοιράζεστε το κλειδί με τα μέρη ανάπτυξης απροσδόκητα.

Εάν το κλειδί διαρρεύσει, κάντε κλικ στην επιλογή "Αναγέννηση κλειδιού 1" παραπάνω για να εκδώσετε ένα νέο κλειδί. Φυσικά, πρέπει να γνωρίζετε ότι σε αυτή την περίπτωση, το προηγούμενο κλειδί δεν θα μπορεί πλέον να χρησιμοποιηθεί.

Χρήση υπηρεσίας φωνητικών εντολών από πρόγραμμα για εξαγωγή κειμένου από ομιλία

Από τώρα και στο εξής, η χρήση της φωνητικής υπηρεσίας θα αλλάξει ανάλογα με το πρόγραμμα που χρησιμοποιείται. Αυτή τη φορά, θα έχω πρόσβαση σε αυτό από μια εφαρμογή επιφάνειας εργασίας .NET, αλλά αν χρησιμοποιείτε άλλο πλαίσιο, δοκιμάστε να το χρησιμοποιήσετε στο Internet. Ο επίσημος ιστότοπος έχει επίσης οδηγίες για το πώς να το χρησιμοποιήσετε σε πολλές γλώσσες.

Αυτή τη φορά, δημιουργούμε μια εφαρμογή υπολογιστή WPF στο Visual Studio 2022. Στην περίπτωση του Visual Studio Code, είναι λίγο ενοχλητικό επειδή δεν υπάρχει σχεδιαστής, αλλά εάν εξαγάγετε μόνο το τμήμα του προγράμματος, είναι δυνατό να το χρησιμοποιήσετε σε μια εφαρμογή κονσόλας ή σε μια εφαρμογή ιστού.

Δημιουργία έργου

Ξεκινήστε το Visual Studio 2022.

Επιλέξτε Δημιουργία νέου έργου.

Επιλέξτε Εφαρμογή WPF.

Το όνομα και η τοποθεσία του έργου είναι αυθαίρετα. Αφού εισαχθεί, επιλέξτε Επόμενο.

Η έκδοση ονομάζεται «. ΝΕΤ 6,0". Μόλις ορίσετε, κάντε κλικ στο κουμπί "Δημιουργία".

Ρυθμίσεις NuGet

Μπορείτε να δημιουργήσετε πρόσβαση στο Microsoft Azure API από την αρχή, αλλά είναι πιο εύκολο να το χρησιμοποιήσετε επειδή έχετε ήδη μια επίσημη βιβλιοθήκη.

Κάντε δεξί κλικ στην επιλογή Εξαρτήσεις για τη λύση και επιλέξτε Διαχείριση πακέτων NuGet.

Επιλέξτε την καρτέλα "Αναζήτηση", πληκτρολογήστε "Microsoft.CognitiveServices.Speech" στο πεδίο εισαγωγής αναζήτησης και θα εμφανιστεί μια λίστα, οπότε επιλέξτε "Microsoft.CognitiveServices.Speech" και κάντε κλικ στο κουμπί Εγκατάσταση.

Κάντε κλικ στο Εντάξει κουμπί.

Επιλέξτε Συμφωνώ.

Όταν τελειώσετε, θα προστεθεί στο πακέτο.

Δημιουργία του περιβάλλοντος εργασίας χρήστη

Αυτή τη φορά, θα καθορίσουμε ένα αρχείο WAV που περιέχει ήχο και θα εξαγάγουμε τα περιεχόμενα της συνομιλίας σε κείμενο με το Speech API και θα το εμφανίσουμε. Προς το παρόν, αφήστε το περιβάλλον εξαρτημένο από το πεδίο εισαγωγής, ώστε να μπορείτε να χρησιμοποιήσετε τον κώδικα με αντιγραφή και επικόλληση.

Η οθόνη θα πρέπει να μοιάζει κάπως έτσι: Δεδομένου ότι περιλαμβάνεται μόνο το ελάχιστο ποσό, εάν θέλετε να προσθέσετε ένα κουμπί αναφοράς αρχείου για παράδειγμα, εφαρμόστε το μόνοι σας.

MainWindow.xaml έχει ως εξής:

<Window x:Class="MicrosoftAzureSpeechToText.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MicrosoftAzureSpeechToText"
        mc:Ignorable="d"
        Title="Microsoft Azure の音声サービスを使用したテキスト抽出" Height="450" Width="800">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="20*"/>
      <ColumnDefinition Width="80*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Label Content="キー" Margin="4"/>
    <TextBox x:Name="KeyTextBox" Grid.Column="1" HorizontalAlignment="Stretch" Margin="4" Text="" />
    <Label Content="場所/地域" Margin="4" Grid.Row="1"/>
    <TextBox x:Name="RegionTextBox" Grid.Column="1" HorizontalAlignment="Stretch" Margin="4" Text="japaneast" Grid.Row="1"/>
    <Label Content="言語" Margin="4" Grid.Row="2"/>
    <TextBox x:Name="LanguageTextBox" Grid.Column="1" HorizontalAlignment="Stretch" Margin="4" Text="ja-JP" Grid.Row="2"/>
    <Label Content="WAV ファイルパス" Margin="4" Grid.Row="3"/>
    <TextBox x:Name="WavFilePathTextBox" Grid.Column="1" HorizontalAlignment="Stretch" Margin="4" Text="" Grid.Row="3"/>
    <Button x:Name="ExecuteButton" Content="実行" Margin="4" Grid.Row="4" Grid.ColumnSpan="2" FontSize="24" Click="ExecuteButton_Click"/>
    <Label Content="結果" Margin="4,2,4,2" Grid.Row="5"/>
    <TextBox x:Name="ResultTextBox" Margin="8" TextWrapping="Wrap" Text="" Grid.Row="6" Grid.ColumnSpan="2" VerticalScrollBarVisibility="Visible" />
  </Grid>
</Window>

Δημιουργία διαδικασίας

Το ExecuteButton_Click πρόγραμμα είναι όλο τυλιγμένο σε μεθόδους. Εάν θέλετε να το χρησιμοποιήσετε σε άλλα πλαίσια, ξαναγράψτε αυτόν τον κώδικα ως βάση.

MainWindow.xaml.cs

using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
using System;
using System.Media;
using System.Threading.Tasks;
using System.Windows;

namespace MicrosoftAzureSpeechToText
{
  /// <summary>
  /// MainWindow.xamlのインタラクションロジック
  /// </summary>
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();
    }

    private void AppendLineLog(string log)
    {
      // 非同期処理から書き込むので Dispatcher.Invoke を使用
      Dispatcher.Invoke(()=>ResultTextBox.AppendText(log + Environment.NewLine));
    }

    private async void ExecuteButton_Click(object sender, RoutedEventArgs e)
    {
      // 入力内容をテキストボックスから取得
      var key = KeyTextBox.Text;
      var region = RegionTextBox.Text;
      var lang = LanguageTextBox.Text;
      var wavFilePath = WavFilePathTextBox.Text;

      try
      {
        // 音声ファイルが指定されているか確認するため再生する
        var wavPlayer = new SoundPlayer(wavFilePath);
        wavPlayer.Play();

        var stopRecognition = new TaskCompletionSource<int>();

        // 音声サービスを構成する
        var speechConfig = SpeechConfig.FromSubscription(key, region);
        AppendLineLog($"{speechConfig.Region} で音声サービスを使用する準備ができました。");

        // 音声認識言語の指定
        // 使用できる値一覧:https://docs.microsoft.com/ja-jp/azure/cognitive-services/speech-service/language-support?tabs=speechtotext#speech-to-text
        speechConfig.SpeechRecognitionLanguage = lang;

        // 入力を WAV ファイルとして設定
        using var audioConfig = AudioConfig.FromWavFileInput(wavFilePath);
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        // 解析結果が受信されたことを通知します。
        // このイベントは抽出が完了したものから随時発生します。
        speechRecognizer.Recognized += (s, e) =>
        {
          if (e.Result.Reason == ResultReason.RecognizedSpeech)
          {
            // 音声結果に認識されたテキストが含まれていることを示します。
            var time = TimeSpan.FromSeconds(e.Result.OffsetInTicks / 10000000).ToString(@"hh\:mm\:ss");
            var text = $"{time} {e.Result.Text}";
            AppendLineLog(text);
          }
          else if (e.Result.Reason == ResultReason.NoMatch)
          {
            // 音声を認識できなかったことを示します。
            AppendLineLog("音声を認識できませんでした。");
          }
        };

        // 音声認識が中断されたことを通知します。
        speechRecognizer.Canceled += (s, e) =>
        {
          AppendLineLog($"処理が終了しました。(Reason={e.Reason})");

          if (e.Reason == CancellationReason.Error)
          {
            AppendLineLog($"ErrorCode={e.ErrorCode}\r\n");
            AppendLineLog($"ErrorDetails={e.ErrorDetails}\r\n");
          }

          stopRecognition.TrySetResult(0);
        };

        // 継続的な処理を開始します。 StopContinuousRecognitionAsync を使用して処理を停止します。
        await speechRecognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);

        // 完了するのを待ちます。Task.WaitAny を使用して、タスクをルート化してください。
        Task.WaitAny(new[] { stopRecognition.Task });

        // 処理を停止します。
        await speechRecognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
      }
      catch (Exception ex)
      {
        // 何らかの例外が発生した場合はエラー内容を出力
        AppendLineLog(ex.Message);
      }

      MessageBox.Show("処理が終了しました。");
    }
  }
}

Δεδομένου ότι η εξήγηση είναι σχεδόν γραμμένη στον κώδικα, δεν θα εξηγήσω λεπτομερώς, αλλά αν θέσετε το σημαντικό μέρος, θα είναι ως εξής.

  • SpeechConfig Ρύθμιση παραμέτρων των υπηρεσιών φωνής στο
  • AudioConfig Ρύθμιση φωνητικών δεδομένων σε
  • SpeechRecognizer Δημιουργία κλάσης επεξεργασίας στο
  • Τα δεδομένα ομιλίας αναλύονται ένα προς ένα και το ολοκληρωμένο κείμενο SpeechRecognizer.Recognized περνάει στο συμβάν από καιρό σε καιρό.
  • Εάν η επεξεργασία ολοκληρωθεί για κάποιο λόγο, SpeechRecognizer.Canceled ένα συμβάν ονομάζεται
  • Η έναρξη της επεξεργασίας SpeechRecognizer.StartContinuousRecognitionAsync ονομάζεται μέθοδος και η ολοκλήρωση της επεξεργασίας SpeechRecognizer.StopContinuousRecognitionAsync ονομάζεται μέθοδος.

Έλεγχος λειτουργίας

Αφού δημιουργήσετε το πρόγραμμα, εκτελέστε το, εισαγάγετε τα απαραίτητα στοιχεία και πατήστε το κουμπί εκτέλεσης. Εάν έχετε καθορίσει το σωστό αρχείο ήχου, ο ήχος θα πρέπει να αναπαράγεται και το κείμενο θα πρέπει να εξάγεται ένα προς ένα χρησιμοποιώντας την υπηρεσία φωνής Microsoft Azure στο παρασκήνιο.

Το σύστημα εξαγωγής δεν είναι τέλειο επειδή εξαρτάται από την υπηρεσία φωνής Microsoft Azure, Εάν η φωνή είναι ήσυχη και μιλάει καθαρά, νομίζω ότι θα εξαχθεί με σημαντική ακρίβεια. Δεδομένου ότι είναι μια υπηρεσία cloud, ακόμη και αν η ακρίβεια δεν είναι τόσο υψηλή τώρα, μπορεί να βελτιώνεται πριν το καταλάβετε, οπότε είναι εύκολο να μην κάνετε τίποτα σε αυτόν τον τομέα.