Цель работы: освоить методы работы с системой распознавания и синтеза речи, освоить концепцию создания фотоприложений
Возможности платформы Windows Phone 8 по распознаванию и синтезу речи можно использовать для организации взаимодействия приложения с пользователем. Так, пользователь может отдавать приложению голосовые команды, которые приложение может воспринять благодаря подсистеме распознавания речи. Приложение, в свою очередь, используя функцию синтеза речи, преобразования текста в речь – информировать пользователя о каких-либо событиях.
Здесь мы рассмотрим учебное приложение, которое позволяет пользователю выполнять голосовые команды и выдаёт сообщения пользователю, используя функцию преобразования текста в речь. Этот пример основан на примере "Speech for Windows Phone: Speech recognition and text-to-speech" ("Речевые возможности Windows Phone: распознавание речи и преобразование текста в речь"), http://code.msdn.microsoft.com/Speech-recognition-and-debe5858/.
Приложение, рис. 49.1, обладает следующими функциями.
(рис 49.1) Проект приложения, реализующего возможности распознавания и синтеза речи
На главной странице расположен прямоугольник со скруглёнными краями, цвет заливки которого можно менять, используя голосовые команды. После нажатия на кнопку Запустить распознавание речи приложение переходит в режим непрерывного распознавания речи. В приложении подготовлен словарь, содержащий названия цветов, которые сопоставляются с кистями, имеющими соответствующий цвет. Когда пользователь называет цвет, приложение пытается распознать команду. Если команда распознана, используется синтезатор речи для оповещения о том, что цвет будет изменен и цвет фигуры меняется. Если команда не распознана, выводится сообщение с сообщением об этом и просьбой повторить еще раз, то же самое сообщение проговаривается с использованием синтезатора речи. Синтезатор речи достаточно гибок, например, он воспринимает не только русскоязычные слова, даже при условии настройки системы на русский язык, но и слова, введенные на латинице.
В Листинге 49.1 вы можете видеть код файла MainPage.xaml.cs, где реализован функционал приложения.
using Microsoft.Phone.Controls;
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Media;
using Windows.Foundation;
using Windows.Phone.Speech.Recognition;
using Windows.Phone.Speech.Synthesis;
//Перед запуском приложения в эмуляторе, удостоверьтесь в правильной работе микрофона и звуковой подсистемы.
//Вы можете проверить эти возможности, выполнив длительное нажатие на кнопку Пуск в эмулятор,
//приняв заявление о конфиденциальности и испытав работу системы, сказав, например "Запустить Internet Explorer"
// Для успешной работы данного приложения требуется включение следующих возможностей в WMAppManifest.xml
// ID_CAP_SPEECH_RECOGNITION
// ID_CAP_MICROPHONE
// ID_CAP_NETWORKING
namespace P17_1
{
public partial class MainPage : PhoneApplicationPage
{
SpeechSynthesizer _synthesizer;
// Объект для синтеза речи (text-to-speech, TTS)
SpeechRecognizer _recognizer;
// Объект для распознавания голосовых команд
IAsyncOperation<SpeechRecognitionResult> _recoOperation;
// Используется для отметы текущей асинхронной операции распознавани речи
bool _recoEnabled = false;
// Если это свойство установлено в true, будет происходить распознавание речи
Dictionary<string, SolidColorBrush> _colorBrushes;
// Словарь названий цветов, которые распознаёт программа и соответствующих кистей
// Конструктор
public MainPage()
{
InitializeComponent();
}
//Пользователь перешел на страницу. Если необходимо, выполняем инициализацию
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
//Настраиваем словарь объектов цветовых кистей SolidColorBrush .
if (_colorBrushes == null)
{
_colorBrushes = new Dictionary<string, SolidColorBrush>();
_colorBrushes.Add("красный", new SolidColorBrush(Colors.Red));
_colorBrushes.Add("голубой", new SolidColorBrush(Colors.Cyan));
_colorBrushes.Add("синий", new SolidColorBrush(Colors.Blue));
_colorBrushes.Add("жёлтый", new SolidColorBrush(Colors.Yellow));
_colorBrushes.Add("оранжевый", new SolidColorBrush(Colors.Orange));
_colorBrushes.Add("пурпурный", new SolidColorBrush(Colors.Magenta));
_colorBrushes.Add("фиолетовый", new SolidColorBrush(Colors.Purple));
_colorBrushes.Add("черный", new SolidColorBrush(Colors.Black));
_colorBrushes.Add("глубокий черный", new SolidColorBrush(Colors.Black));
_colorBrushes.Add("зелёный", new SolidColorBrush(Colors.Green));
_colorBrushes.Add("белый", new SolidColorBrush(Colors.White));
_colorBrushes.Add("темно-серый", new SolidColorBrush(Colors.DarkGray));
_colorBrushes.Add("коричневый", new SolidColorBrush(Colors.Brown));
_colorBrushes.Add("серый", new SolidColorBrush(Colors.Gray));
}
try
{
// Создаем объекты для распознавания и синтеза речиs.
if (_synthesizer == null)
{
_synthesizer = new SpeechSynthesizer();
}
if (_recognizer == null)
{
_recognizer = new SpeechRecognizer();
// Задаем список цветов, который будет распознавать программа.
_recognizer.Grammars.AddGrammarFromList("Colors", _colorBrushes.Keys);
}
}
catch (Exception err)
{
txtResult.Text = err.ToString();
}
base.OnNavigatedTo(e);
}
//Кнопка btnContinuousRecognition работает как переключатель.
//При нажатии на неё запускается непрерывное распознавание речи.
//При повторном нажатии распознавание речи останавливается.
private async void btnContinuousRecognition_Click(object sender, RoutedEventArgs e)
{
// Изменение текста на кнопке.
if (this._recoEnabled)
{
// Приведение состояния интерфейса к исходному
_recoEnabled = false;
btnContinuousRecognition.Content = "Запустить распознавание речи";
txtResult.Text = String.Empty;
txtInstructions.Visibility = System.Windows.Visibility.Collapsed;
// Отмена невыполненной операции распознавания, если таковая существует
if (_recoOperation != null _recoOperation.Status == AsyncStatus.Started)
{
_recoOperation.Cancel();
}
return;
}
else
{
// Установка флага, указывающего на то, что мы находимся в режиме распознавания речи
_recoEnabled = true;
// Обновление интерфейса
btnContinuousRecognition.Content = "Слушаю.... Прекратить?";
txtInstructions.Visibility = System.Windows.Visibility.Visible;
}
// Непрерывное распознавание речи до тех пор, пока пользователь это не отменит
while (this._recoEnabled)
{
try
{
// Выполняем распознавание речи.
_recoOperation = _recognizer.RecognizeAsync();
var recoResult = await this._recoOperation;
// Проверяем уровень достоверности при попытке распознавания речи.
if (recoResult.TextConfidence < SpeechRecognitionConfidence.Medium)
{
// Если уровень достоверности в данной попытке распознавания низок,
// предлагаем пользователю попробовать снова.
txtResult.Text = "Не могу понять вашу команду, пожалуйста, попробуйте еще раз.";
await _synthesizer.SpeakTextAsync("Не могу понять вашу команду,
пожалуйста, попробуйте еще раз.");
}
else
{
// Сообщаем об изменении цвета фигуры, обновляя текст в элементе управления
// TextBox и синтезируя соответствующую фразу.
txtResult.Text = "Изменение цвета на: " + recoResult.Text;
await _synthesizer.SpeakTextAsync("Изменение цвета на " + recoResult.Text);
// Устанавливаем цвет заливки фигуры на распознанный.
rectangleResult.Background = TryGetBrush(recoResult.Text.ToLower());
}
}
catch (System.Threading.Tasks.TaskCanceledException)
{
// Игнорируем исключение, связанное с отменой распознавания recoOperation
// Когда вызывается recoOperation.Cancel() для отмены
асинхронной операции распознавания речи
// из RecognizeAsync(), выдаётся исключение TaskCanceledException для
указания на ранний выход из операции.
}
catch (Exception err)
{
// Обработка ошибки, связанной с политикой конфиденциальности.
const int privacyPolicyHResult = unchecked((int)0x80045509);
if (err.HResult == privacyPolicyHResult)
{
MessageBox.Show("Для того, чтобы запустить этот пример,
нужно принять заявление о конфиденциальности. Для того, чтобы это сделать,
перейдите в раздел Настройки > Голосовые функции и установите флаг
'Включить службу распознавания речи' ");
_recoEnabled = false;
btnContinuousRecognition.Content = "Запустить распознавание речи";
}
else
{
txtResult.Text = "Error: " + err.Message;
}
}
}
}
/// <summary>
/// Возвращает объект SolidColorBrush который соответствует распознанному названию цвета.
/// </summary>
/// <param name="reco">Строка с распознанным названием цвета.</param>
/// <returns>При обнаружении совпадения возврат кисти SolidColorBrush соответствующего цвета;
в противном случае - белый цвет.</returns>
private SolidColorBrush TryGetBrush(string recognizedColor)
{
if (_colorBrushes.ContainsKey(recognizedColor))
return _colorBrushes[recognizedColor];
return _colorBrushes["белый"];
}
}
}
Обратите внимание на то, что для успешной работы приложения в манифесте нужно объявить возможности ID_CAP_SPEECH_RECOGNITION, ID_CAP_MICROPHONE и ID_CAP_NETWORKING. Кроме того, перед тем, как пользователь сможет работать с системой распознавания речи, ему нужно включить соответствующий параметр в настройках телефона. Это справедливо и для эмулятора. Для отладки приложения в эмуляторе компьютер должен быть оснащён микрофоном.
Для распознавания речи здесь используются возможности объекта SpeechRecognizer из пространства имен Windows.Phone.Speech.Recognition (http://msdn.microsoft.com/en-us/library/windowsphone/develop/windows.phone.speech.recognition%28v=vs.105%29.aspx). В приложении формируется словарь, содержащий названия цветов и соответствующие названиям кисти. Этот словарь указывается в коллекции объектов грамматик объекта, используемого для распознавания речи. При работе с этим объектом можно использовать и грамматику по умолчанию, в данном случае мы пользуемся собственным словарём.
Когда нажата кнопка запуска распознавания речи, программа переходит в режим непрерывного распознавания. Она ожидает голосовую команду, после чего пытается её распознать. Если распознавание выполнено успешно, в данном случае это означает, что уровень достоверности, описывающий точность сопоставления произнесенной фразы в активной грамматике не ниже среднего, приложение сообщает об изменении цвета и вызывает метод, который находит в словаре кистей, по ключу, соответствующему распознанной команде (названию цвета) подходящую кисть, эта кисть и применяется к заливке фигуры.
Для синтеза речи используется объект SpeechSynthesizer из пространства имен Windows.Phone.Speech.Synthesis (http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj207489%28v=vs.105%29.aspx). Приложение, выводя сведения о распознанной (или нераспознанной) команде после попытки распознавания, проговаривает соответствующие сообщения.
Подробности о функциях работы с речью на платформе Windows Phone 8 и дополнительные примеры вы можете найти на странице "Speech recognition for Windows Phone 8" ("Распознавание речи для Windows Phone 8"), http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj207021%28v=vs.105%29.aspx. Микрофон, встроенный в устройства, работающие под управлением Windows Phone, можно использовать и для записи речи. Пример такого использования микрофона можно найти на странице "Microphone sample" ("Работа с микрофоном"), http://code.msdn.microsoft.com/wpapps/Microphone-Sample-b2ebe8b6
Фотоприложения (lens app) – это новая возможность Windows Phone 8. Эти приложения доступны как для самостоятельного запуска, так и для запуска из интерфейса камеры. В интерфейсе камеры, имеется кнопка Фотоприложения (Lenses), нажатие на которую вызывает список таких приложений. Англоязычное название таких приложений, "lens" недвусмысленно указывает на то, что их можно сравнить со сменными объективами к фотоаппарату. Меняем объектив – получаем новые возможности.
Фотоприложение может напрямую работать с камерой, то есть получать данные с камеры в режиме реального времени, настраивать камеру, выполнять фокусировку, получать снимки, тут же обрабатывать их. Такие приложения используют API Microsoft.Devices.PhotoCamera (http://msdn.microsoft.com/en-us/library/windowsphone/develop/microsoft.devices.photocamera%28v=vs.105%29.aspx) и Windows.Phone.Media.Capture.PhotoCaptureDevice (http://msdn.microsoft.com/en-us/library/windowsphone/develop/windows.phone.media.capture.photocapturedevice%28v=vs.105%29.aspx).
Для того, чтобы приложение можно было вызвать из интерфейса камеры телефона, его нужно зарегистрировать в качестве фотоприложения, добавив в манифест (WMAppManifest.xml), после элемента Tokens, описание расширения, которое реализует приложение:
<Extension ExtensionName="Camera_Capture_App"
ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5631}"
TaskID="_default" />
Обратите внимание на то, что графический редактор манифеста не поддерживает добавление сведений о расширении, поэтому данное описание нужно добавлять , используя редактор кода, который можно вызывать, щёлкнув по файлу манифеста правой кнопкой мыши и выбрав в появившемся окне команду Перейти к коду, рис. 49.2.
(рис 49.2) Объявление расширения фотоприложения в манифесте
Здесь открыт пример Basic Lens sample (Базовое фотоприложение), который можно скачать по адресу http://code.msdn.microsoft.com/Basic-Lens-sample-359fda1b.
Для того чтобы получить дополнительные сведения по работе с камерой и фотоснимками, обратитесь к разделу документации "Camera and photos for Windows Phone" ("Камера и фотоснимки для Windows Phone"), http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202973%28v=vs.105%29.aspx.
Кроме того, если ваше приложение подразумевает работу с камерой, обратите внимание на пример "Преобразование потока камеры в байты", http://code.msdn.microsoft.com/CSWP8CameraFeedByteConverte-979b13f0.
В этой лабораторной работе мы рассмотрели работу с системой распознавания и синтеза речи в Windows Phone. Эта система позволяет расширить возможности приложений по взаимодействию с пользователем. Кроме того, мы ознакомились с концепцией фотоприложений.
Рассмотрите возможность интеграции в приложение, которое вы разрабатываете, функций распознавания и синтеза речи, проанализируйте сценарии работы с приложением, в которых эти возможности наиболее полезны. Если вы разрабатываете приложение для работы с фотографиями, рассмотрите его реализацию с использованием функциональности фотоприложения. Подготовьте отчёт.
К данной лекции подготовлено видеоприложение и демонстрационный программный проект.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.