Аутентификация И Идентификация По Голосу С Помощью Когнитивных Служб Microsoft



Аутентификация и идентификация по голосу с помощью когнитивных служб Microsoft

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

Кроме того, доступны различные функции поиска Bing. Вам даже не нужна учетная запись Microsoft, чтобы опробовать когнитивные сервисы в действии.

Вы также можете получить пробный ключ, используя свою учетную запись GitHub или LinkedIn. Пробная подписка не ограничена по времени, но ограничена по количеству используемых ресурсов за период. Посмотреть онлайн-демонстрацию можно по адресу: API распознавания говорящего Ниже приводится описание того, как попробовать аутентификацию пользователя с помощью голоса.

Хотя сервис пока находится в состоянии предварительной версии, несмотря на это, он уже достаточно интересен.

Эту службу можно использовать на различных платформах, но я рассмотрю возможность создания приложения UWP на C#/XAML. Зайти и получить пробный ключ можно по ссылке: Microsoft Cognitive Services — начните работу бесплатно

Аутентификация и идентификация по голосу с помощью когнитивных служб Microsoft

Нажмите + и выберите Распознавание докладчика — предварительный просмотр 10 000 транзакций в месяц, 20 в минуту .

Альтернативно, вы можете получить ключ из своей учетной записи Azure (но что бы вы делали без него).

Найдите API Cognitive Services и создайте учетную запись с типом API распознавания речи.



Аутентификация и идентификация по голосу с помощью когнитивных служб Microsoft

Этот способ подойдет тем, кто не планирует останавливаться только на пробных функциях.

Ключ вы можете найти здесь:

Аутентификация и идентификация по голосу с помощью когнитивных служб Microsoft

Прежде чем продолжить, давайте определимся с терминологией внутри задачи: Проверка – подтверждение того, что речь произнесло определенное лицо.

Подтверждение личности говорящего.

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

Регистрация – процесс, в ходе которого сервис обучается распознаванию голоса пользователя.

После того как сервис получит определенное количество фраз-примеров, профиль пользователя регистрируется и может быть использован для распознавания.



Описание настройки и процесса распознавания голоса

Профиль пользователя создан.

Изготовлено по регистрации.

Повторы одной и той же фразы отправляются в сервис несколько раз.

На данный момент поддерживаются только следующие языки: en-US (английский, США) и zh-CN (китайский мандарин).

Вы можете выбрать фразу на английском языке из следующего списка: «Я сделаю ему предложение, от которого он не сможет отказаться» "Хьюстон у нас проблема" «мой голос — мой паспорт, проверь меня» «Яблочный сок после зубной пасты имеет странный вкус» "вы можете войти без пароля" «вы можете активировать систему безопасности сейчас» «Мой голос сильнее паролей» «мой пароль не твое дело» «мое имя тебе неизвестно» "будь собой, все остальные роли уже заняты" Первая произнесенная фраза привязана к профилю.

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

Я начну, а вы предложите варианты в комментариях: «Это квартира Антона Семеновича ШпакаЭ» «Успокойся, Маша, я Дубровский!» «Я умный, красивый, в меру упитанный мужчина, ну в полном цвету»

Создание приложения UWP

Давайте создадим приложение UWP и добавим следующий пакет NuGet. Microsoft.ProjectOxford.SpeakerRecognition Добавьте микрофон в раздел «Возможности» манифеста.

Интернет (клиент) должен быть добавлен по умолчанию.

Настройка завершена и можно переходить к коду.

Список необходимых пространств имен для работы с сервисом:

  
  
  
  
  
  
  
  
  
  
  
  
   

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 кГц.

Второй вариант — записать свой голос с микрофона.

Начать запись голоса:

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

От ответ мы сможем получить следующие данные: ответ.Фраза - разговорная фраза ответ.RemainingEnrollments – количество оставшихся повторений фразы Распознавание отличается от регистрации только тем, что используется метод VerifyAsync:

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

Исходный код полученного приложения доступен по адресу GitHub Скриншот того, что произошло, ниже:

Аутентификация и идентификация по голосу с помощью когнитивных служб Microsoft

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

Опять же интересна функция идентификации, код которой аналогичен, но с некоторыми изменениями.

Поскольку период времени, в течение которого производится запись, может быть большим, чтобы дать сервису время на завершение операции, проверка выполняется в цикле.

Пример операции регистрации:

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

Официальный пример проекта WPF на GitHub, который также может быть полезен: API распознавания говорящих Microsoft: клиентская библиотека Windows и образец Пример на Python: API распознавания говорящих Microsoft: пример Python На GitHub вы также можете найти Android SDK для API распознавания динамиков Microsoft Теги: #cognitive Services #azure #uwp #project #oxford #voice #recognition #voices #identification #speaker #voice #voice #recognition #Разработка мобильных приложений #Разработка для Windows Phone #Microsoft Azure #Разработка для Windows

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.