Microsoft Cognitive Servicesによる音声認証と識別


コグニティブサービスは、視覚、音声、テキスト情報を操作できるさまざまなクラウドサービスへのアクセスを提供します。 さらに、さまざまなBing検索機能を使用できます。

認知サービスを実際に試すには、Microsoftアカウントを持つ必要さえありません。 GitHubまたはLinkedInアカウントを使用して試用版キーを取得することもできます。 試用版サブスクリプションの期間は制限されていませんが、その期間に使用されるリソースの量には制限があります。 オンラインデモを表示するには、 Speaker Recognition APIにアクセスしてください。

以下は、Voice in Actionを使用してユーザー認証をテストする方法の説明です。 サービスもプレビュー状態ですが、それにもかかわらず、すでに非常に興味深いものです。
このサービスはさまざまなプラットフォームから使用できますが、C#/ XAML UWPアプリケーションの作成を検討します。

こちらから試用版キーを入手できます: Microsoft Cognitive Services-無料で始めましょう



[+]を押して、[ スピーカー認識-1か​​月あたり10,000トランザクション、1分あたり20のプレビュー]を選択します。

または、Azureアカウントからキーを取得できます(ただし、キーがない場合はどうなりますか)。 Cognitive Services APIを見つけて、Speaker Recognition APIタイプのアカウントを作成します。



この方法は、試用機能のみで停止する予定がない人に適しています。
ここでキーを見つけることができます:



続行する前に、タスクの一部として用語を定義しましょう。

検証 -スピーチが特定の人によって配信されたことの確認。 スピーカーの身元の確認。
識別 -私たちに知られている多くのユーザーのどれがフレーズを発声したかを決定します。
登録 -サービスがユーザーの音声を認識するようにトレーニングするプロセス。 サービスが一定数のフレーズの例を受信すると、ユーザープロファイルが登録され、認識に使用できるようになります。

音声認識の構成とプロセスの説明


ユーザープロファイルが作成されます
登録が作成されます。 同じフレーズの繰り返しが何度もサービスに送信されます。
現在サポートされている言語は、en-US(米国英語)およびzh-CN(中国語)のみです。

英語のフレーズは、次のリストから選択できます。
「私は彼を拒否できない申し出にしよう」
「ヒューストンに問題がありました」
「私の声は私のパスポートです」
「歯磨き粉の後にリンゴジュースがおかしい」
「パスワードなしで入ることができます」
「セキュリティシステムを今すぐアクティブ化できます」
「私の声はパスワードよりも強い」
「私のパスワードはあなたのビジネスではない」
「私の名前は知らない」
「他のすべての人がすでに服用されている」

最初に話されるフレーズは、プロファイルに関連付けられています。 ResetEnrollmentsAsyncで登録をリセットすることによってのみ、フレーズを変更できます。

ロシア語の一連のフレーズがどのように見えるか想像してみましょう。 まず始めに、コメントでオプションを提案します。
「これはアントン・セメノビッチ・シュパクのアパートですか?」
「穏やかで、マーシャ、私はドゥブロブスキーです!」
「私は頭が良く、ハンサムで、適度に栄養が豊富な男です。満開です」

UWPアプリケーションの作成


UWPアプリケーションを作成して、次のMicrosoft.ProjectOxford.SpeakerRecognition NuGetパッケージを追加しましょう
マニフェストの機能セクションにマイクを追加します。 インターネット(クライアント)はデフォルトで追加する必要があります。 設定が完了し、コードに進むことができます。 サービスを操作するために必要な名前空間のリスト:

using Microsoft.ProjectOxford.SpeakerRecognition; using Microsoft.ProjectOxford.SpeakerRecognition.Contract; using Microsoft.ProjectOxford.SpeakerRecognition.Contract.Verification; 

オーディオを操作するために必要な名前空間:

  using Windows.Media.Capture; using Windows.Media.MediaProperties; using Windows.Storage.Streams; 

サービスを使用するには、いくつかのオブジェクトを作成する必要があります。 サブスクリプションキーとクライアント検証を含む行。 クライアントはサービスと対話します

  private SpeakerVerificationServiceClient _serviceClient; private string _subscriptionKey; 

ページが初期化された後、これらの変数を初期化する必要があります。

  _subscriptionKey = "ec186af1f65d428137f9568ec8d896b5"; _serviceClient = new SpeakerVerificationServiceClient(_subscriptionKey); 

_subscriptionKeyを使用して、サブスクリプションキーを指定します。 論理的に、ユーザープロファイルを作成する必要があります。

  CreateProfileResponse response = await _serviceClient.CreateProfileAsync("en-us"); 

サービスの応答から、プロファイル識別子を取得できます。

  String _profileId=response.ProfileId; 

次のステップは、音声認識の「トレーニング」です。 オーディオストリームの作成方法を見てみましょう。 最も簡単な方法は、ディスクからファイルを読み取ることです。

  Windows.Storage.Pickers.FileOpenPicker picker = new Windows.Storage.Pickers.FileOpenPicker(); picker.FileTypeFilter.Add(".wav"); Windows.Storage.StorageFile fl = await picker.PickSingleFileAsync(); string _selectedFile = fl.Name; AudioStream = await fl.OpenAsync(Windows.Storage.FileAccessMode.Read); 

フレーズは、16 kHzの周波数でモノラルで録音する必要があります。

2番目のオプションは、マイクからの音声を録音することです。 音声録音を開始します。

  MediaCapture CaptureMedia = new MediaCapture(); var captureInitSettings = new MediaCaptureInitializationSettings(); captureInitSettings.StreamingCaptureMode = StreamingCaptureMode.Audio; await CaptureMedia.InitializeAsync(captureInitSettings); MediaEncodingProfile encodingProfile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.High); encodingProfile.Audio.ChannelCount = 1; encodingProfile.Audio.SampleRate = 16000; IRandomAccessStream AudioStream = new InMemoryRandomAccessStream(); CaptureMedia.RecordLimitationExceeded += MediaCaptureOnRecordLimitationExceeded; CaptureMedia.Failed += MediaCaptureOnFailed; await CaptureMedia.StartRecordToStreamAsync(encodingProfile, AudioStream); 

以下のパラメーターが必要です。

  encodingProfile.Audio.ChannelCount = 1; encodingProfile.Audio.SampleRate = 16000; 

一定時間後に録音を停止します。

  await CaptureMedia.StopRecordAsync(); Stream str = AudioStream.AsStream(); str.Seek(0, SeekOrigin.Begin); 

そして、登録のためにサービスにストリームを送信します。

  Guid _speakerId = Guid.Parse(_profileId); Enrollment response = await _serviceClient.EnrollAsync(str, _speakerId); 

応答から、次のデータを取得できます。
response.Phrase-話し言葉
response.RemainingEnrollments-フレーズの残りの繰り返しの数

認識は、VerifyAsyncメソッドが使用されるという点でのみ登録と異なります。

  Guid _speakerId = Guid.Parse(_profileId); Verification response = await _serviceClient.VerifyAsync(str, _speakerId); 

結果のアプリケーションのソースコードはGitHubで入手できます。

以下の出来事のスクリーンショット:



保護する唯一の方法として、音声認証はおそらく最も信頼できるオプションではありません。 しかし、今では、多要素認証の要素の1つとして、非常にうまく使用できます。

繰り返しますが、識別の可能性は興味深いものです。コードは似ていますが、いくつかの変更があります。

記録を行う期間は長くなる可能性があるため、操作を完了するためのサービス時間を与えるために、チェックはサイクルで開始されます。 登録操作の例:

  _speakerId = Guid.Parse((lbProfiles.SelectedItem as ListBoxItem).Content.ToString()); OperationLocation processPollingLocation; processPollingLocation = await _serviceClient.EnrollAsync(str, _speakerId); EnrollmentOperation enrollmentResult = null; int numOfRetries = 10; TimeSpan timeBetweenRetries = TimeSpan.FromSeconds(5.0); while (numOfRetries > 0) { await Task.Delay(timeBetweenRetries); enrollmentResult = await _serviceClient.CheckEnrollmentStatusAsync(processPollingLocation); if (enrollmentResult.Status == Status.Succeeded) { break; } else if (enrollmentResult.Status == Status.Failed) { txtInfo.Text = enrollmentResult.Message; return; } numOfRetries--; } 

識別には、同じNuGetパッケージが使用されます。
識別アプリケーションのソースコードもGitHubに投稿されています

GitHubでのWPFプロジェクトの公式例は、次の場合にも役立ちます。
Microsoft Speaker Recognition API:Windowsクライアントライブラリとサンプル
Pythonの例: Microsoft Speaker Recognition API:Python Sample

Microsoft Speaker Recognition APIのAndroid SDKは GitHubにもあります。

Source: https://habr.com/ru/post/J323312/


All Articles