Utiliser le service Microsoft Azure Speech pour extraire du texte d’un fichier audio

Page mise à jour :
Date de création de la page :

Environnement de vérification des opérations

Services vocaux Microsoft Azure
  • Édition de juillet 2022
Visual Studio
  • Visual Studio 2022
.NET
  • 6.0

condition préalable

Avant de pouvoir vérifier que ces conseils fonctionnent, vous devez :

À propos des échantillons de matériaux

Nous empruntons des fichiers audio sur le site suivant. Il n’est pas inclus dans l’exemple de code.

Liens externes

Au début

Par exemple, afin d’enregistrer le contenu de la réunion, etc., le contenu de la conversation est enregistré, et plus tard, afin de créer le procès-verbal de la réunion, l’audio enregistré est entendu et transcrit en texte. Cependant, il est facile d’imaginer qu’il est très gênant d’écrire le contenu de la conversation dans une phrase.

Voici comment utiliser le service Microsoft Azure Speech pour exporter et générer automatiquement des données vocales en texte. Dans l’exemple précédent, il s’agit d’un enregistrement de la réunion, mais dans ces conseils, il est extrait du fichier audio, de sorte qu’il peut être appliqué à tout ce qui contient du contenu de conversation.

Aussi, cette fois, nous parlons de transcrire en texte, Vous pouvez également utiliser le service vocal Microsoft Azure pour convertir et traduire pendant l’enregistrement.

À propos des frais

Cette fois, nous utiliserons le plan gratuit, donc même si vous essayez d’opérer, vous ne serez pas facturé. Cependant, le plan gratuit a des limites de temps et de caractères, donc si vous avez besoin de plus de conversion après l’avoir réellement exploité, veuillez passer à un plan payant.

Veuillez vous référer à la page officielle suivante pour les prix. Comme il s’agit d’un service cloud, les frais peuvent fluctuer en fonction de la saison.

Accéder au portail Microsoft Azure

Accédez à l’URL suivante dans un navigateur Web :

Si vous êtes déjà connecté, vous avez terminé. Si vous n’êtes pas déjà connecté, l’écran suivant s’affiche, veuillez donc vous connecter.

Lorsque vous vous connectez, l’écran suivant s’affiche. Selon la conception que vous définissez, l’affichage peut être différent.

Créer un service vocal dans Microsoft Azure

Si vous entrez « voix » dans le champ de saisie de recherche au-dessus du portail, « service vocal » sortira, alors sélectionnez-le.

「Services cognitifs | Lorsque l’écran « Service vocal » s’affiche, sélectionnez « Créer ».

L’écran « Créer des services vocaux » s’ouvre, alors entrez les éléments nécessaires.

Notions de base

Exemple de
contenu d’entrée d’éléments
abonnement Sélectionnez les abonnements pour lesquels vous souhaitez payer. Même si c’est gratuit, vous devez toujours le lier à une sorte d’abonnement.
Groupes de ressources Spécifie dans quel groupe de ressources le service vocal à créer doit être inclus. Si vous n’en avez pas encore créé un, veuillez en créer un à partir de « Nouveau » ci-dessous. Vous pouvez considérer les groupes de ressources comme des regroupements lorsque vous créez divers services.
Région Choisissez près d’un endroit où vous l’utilisez le plus souvent. Cependant, veuillez noter que les prix peuvent varier selon la région. Japon Est
nom N’importe quel nom pour ce service vocal. Si vous créez plusieurs services vocaux, assurez-vous que le nom est descriptif. Ce nom est global et unique, vous ne pouvez donc pas utiliser un nom utilisé ailleurs. SpeechToText-Test
Niveau de tarification Si vous souhaitez l’utiliser gratuitement, choisissez « Free F0 ». Si vous souhaitez l’utiliser moyennant des frais, veuillez choisir un autre plan. Bien sûr, il y a des restrictions si c’est gratuit. F0 gratuit

Une fois entré, sélectionnez Suivant : réseau > ci-dessous.

réseau

Exemple de
contenu d’entrée d’éléments
gentil Spécifie la plage à partir de laquelle ce service vocal est accessible. Si vous voulez pouvoir y accéder de n’importe où sans aucun paramètre détaillé, sélectionnez « Y compris Internet... ». « Accessible de n’importe où » signifie également « tout le monde peut y accéder », mais en fait seuls ceux qui ont la « clé » à acquérir après cela peuvent y accéder, donc ce n’est pas tellement un problème en termes de sécurité. Y compris Internet...

Une fois que vous l’avez entré, sélectionnez Suivant : Identité > ci-dessous.

Identité

Exemple de
contenu d’entrée d’éléments
ID managé attribué au système Cette fois, j’utilise le service vocal seul, il est donc bon de l’éteindre. de
ID managé attribué par l’utilisateur Je n’ai pas besoin de l’ajouter car je ne crée pas d’utilisateur cette fois-ci. sans

Une fois que vous l’avez entré, sélectionnez Suivant: Tag > ci-dessous.

étiquette

Comme la balise n’est pas utilisée cette fois-ci, elle n’est pas définie.

Une fois entré, sélectionnez Suivant : Vérifier et créer > ci-dessous.

Réviser et créer

S’il n’y a aucun problème avec le contenu d’entrée, « Validation réussie » s’affiche. En cas de problème, un message d’erreur s’affiche, alors revenez en arrière et réglez-le à nouveau.

S’il n’y a pas de problème avec le contenu d’entrée, cliquez sur le bouton « Créer ». Ensuite, le déploiement commencera.

Après un certain temps, le déploiement est terminé et l’écran suivant s’affiche. Le nom du déploiement est long, mais vous n’avez pas à vous en soucier car il est temporaire en cours de déploiement.

Vous pouvez cliquer sur le bouton Accéder à la ressource pour vérifier que le service vocal a été créé.

Génération et récupération de clés

Une clé d’authentification est requise pour accéder à ce service vocal à partir du client. Comme elle n’est accessible que par le programme qui possède cette clé, il est nécessaire d’empêcher que cette clé ne soit volée par un tiers.

« Client » fait ici référence à tous les programmes qui utilisent Microsoft Azure, tels que les applications de bureau, les applications pour smartphone et les applications web.

Pour obtenir la clé, accédez au service vocal que vous avez créé. Il est accessible à partir de tableaux de bord, de groupes de ressources, etc.

Lorsque la page Services vocaux s’ouvre, sélectionnez Clés et points de terminaison dans le menu de gauche.

Ensuite, la page « Clé et point de terminaison » s’ouvrira et les éléments « Clé 1 », « Clé 2 », « Emplacement / Région » et « Point de terminaison » seront affichés.

Les deux éléments sont nécessaires, mais « Key 2 » est un cadre de rechange, il n’est donc pas utilisé dans la plupart des cas.

Notez chaque valeur. Comme mentionné dans la description, veuillez ne pas partager la clé avec les parties au développement de manière inattendue.

Si la clé est divulguée, cliquez sur « Régénérer la clé 1 » ci-dessus pour émettre une nouvelle clé. Bien sûr, sachez que dans ce cas, la clé précédente ne sera plus utilisable.

Utiliser un service vocal à partir d’un programme pour extraire du texte de la parole

Désormais, l’utilisation du service vocal changera en fonction du programme utilisé. Cette fois, je vais y accéder à partir d’une application de bureau .NET, mais si vous utilisez une autre infrastructure, essayez de l’utiliser sur Internet. Le site officiel a également des instructions sur la façon de l’utiliser dans plusieurs langues.

Cette fois, nous créons une application de bureau WPF dans Visual Studio 2022. Dans le cas de Visual Studio Code, c’est un peu gênant car il n’y a pas de concepteur, mais si vous extrayez uniquement la partie programme, il est possible de l’utiliser dans une application console ou une application web.

Créer un projet

Démarrez Visual Studio 2022.

Sélectionnez Créer un nouveau projet.

Sélectionnez Application WPF.

Le nom et l’emplacement du projet sont arbitraires. Une fois entré, sélectionnez Suivant.

La version s’appelle « . NET 6.0 ». Une fois défini, cliquez sur le bouton « Créer ».

Paramètres NuGet

Vous pouvez créer un accès à l’API Microsoft Azure à partir de zéro, mais il est plus facile de l’utiliser car vous disposez déjà d’une bibliothèque officielle.

Cliquez avec le bouton droit sur Dépendances de la solution et sélectionnez Gérer les packages NuGet.

Sélectionnez l’onglet « Parcourir », entrez « Microsoft.CognitiveServices.Speech » dans le champ de saisie de recherche, et une liste s’affichera, alors sélectionnez « Microsoft.CognitiveServices.Speech » et cliquez sur le bouton Installer.

Cliquez sur le bouton OK.

Sélectionnez J’accepte.

Lorsque vous avez terminé, il sera ajouté au package.

Création de l’interface utilisateur

Cette fois, nous allons spécifier un fichier WAV contenant de l’audio et extraire le contenu de la conversation en texte avec l’API Speech et l’afficher. Pour le moment, laissez l’environnement dépendant du champ de saisie afin de pouvoir utiliser le code par copier-coller.

L’écran doit ressembler à ceci : Étant donné que seul le montant minimum est inclus, si vous souhaitez ajouter un bouton de référence de fichier par exemple, veuillez l’implémenter vous-même.

MainWindow.xaml est la suivante :

<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>

Création d’un processus

Le ExecuteButton_Click programme est enveloppé dans des méthodes. Si vous souhaitez l’utiliser dans d’autres frameworks, réécrivez ce code comme base.

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("処理が終了しました。");
    }
  }
}

Puisque l’explication est presque écrite dans le code, je n’expliquerai pas en détail, mais si vous soulevez la partie importante, ce sera comme suit.

  • SpeechConfig Configuration des services vocaux dans
  • AudioConfig Configuration des données vocales dans
  • SpeechRecognizer Générer une classe de traitement dans
  • Les données vocales sont analysées une par une et le texte SpeechRecognizer.Recognized terminé est transmis de temps en temps.
  • Si le traitement est terminé pour une raison quelconque, SpeechRecognizer.Canceled un événement est appelé
  • Le début du traitement est SpeechRecognizer.StartContinuousRecognitionAsync appelé la méthode et l’achèvement du traitement est SpeechRecognizer.StopContinuousRecognitionAsync appelé la méthode.

Vérification du fonctionnement

Après avoir créé le programme, exécutez-le, entrez les éléments nécessaires et appuyez sur le bouton d’exécution. Si vous avez spécifié le fichier audio correct, l’audio doit être lu et le texte doit être extrait un par un à l’aide du service vocal Microsoft Azure en arrière-plan.

Le système d’extraction n’est pas parfait car il dépend du service vocal Microsoft Azure, Si la voix est calme et parle clairement, je pense qu’elle sera extraite avec une précision considérable. Comme il s’agit d’un service cloud, même si la précision n’est pas si élevée maintenant, il se peut qu’il s’améliore avant que vous ne le sachiez, il est donc facile de ne rien faire dans ce domaine.