4 Speech Recognition in Apps
4.1 Understanding In-App Speech Recognition
4.1.1 Speech Privacy Statement
User must accept the Privacy Statement
catch (Exception exception)
{
const uint HResultPrivacyStatementDeclined=0x80045509;
if ((uint)exception.HResult == HResultPrivacyStatementDeclined)
{
var messageDialog=new Windows.UI.Popups.MessageDialog("You must accept the speech privacy policy to continue.", "Speecg Exception");
messageDialog.ShowAsync().GetResults();
this.recoEnabled=false;
this.btnContinousRecognition.Content= "Start speech recognition";
}
else
{
txtResult.Text=exception.Message;
}
}
4.1.2 Speech Recognition Constraints
Pre-defined grammars
Custom Grammars (can work offline)
PhraseList
4.1.3 In Application Basic Speech Recognition
//windows phone store app
private async Task<SpeechRecognitionResult> RecognizeSpeech()
{
SpeechRecognizer recognizer=new SpeechRecognizer();
// one of three constraints types available
SpeechRecognitionTopicConstraint topicConstraint =new SpeechRecognitionTopicConstraint(SpeechRecognitionScenario.WebSearch,"MSDN");
recongnizer.Constraints.Add(topicConstraint);
await recognizer.ComplieConstarintAsync();// required
//put up UI and recognize user's utterance
SpeechRecognitionResult result= await recognizer.RecognizeWithUIAsync();
return result;
}
//calling code uses result.RecognitionResult.Text or result.RecognitionResult.SemanticInterpretation
create the constraint (type, constraint name)
add it to the recognizer
compile the constraint
private async void RecognizeWithDictationGrammar_Click(object sender, RoutedEventArgs e)
{
// Create an instance of SpeechRecognizer.
var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();
// Compile the dictation grammar that is loaded by default.
await speechRecognizer.CompileConstraintsAsync();
this.heardYouSayTextBlock.Visibility = this.resultTextBlock.Visibility = Visibility.Collapsed;
// Start recognition.
try
{
Windows.Media.SpeechRecognition.SpeechRecognitionResult speechRecognitionResult = await speechRecognizer.RecognizeWithUIAsync();
// If successful, display the recognition result.
if (speechRecognitionResult.Status == Windows.Media.SpeechRecognition.SpeechRecognitionResultStatus.Success)
{
this.heardYouSayTextBlock.Visibility = this.resultTextBlock.Visibility = Visibility.Visible;
this.resultTextBlock.Text = speechRecognitionResult.Text;
}
}
catch (Exception exception)
{
if ((uint)exception.HResult == App.HResultPrivacyStatementDeclined)
{
this.resultTextBlock.Visibility = Visibility.Visible;
this.resultTextBlock.Text = "The privacy statement was declined.";
}
else
{
var messageDialog = new Windows.UI.Popups.MessageDialog(exception.Message, "Exception");
messageDialog.ShowAsync().GetResults();
}
}
}
private async void Footer_Click(object sender, RoutedEventArgs e)
{
await Windows.System.Launcher.LaunchUriAsync(new Uri(((HyperlinkButton)sender).Tag.ToString()));
}
}
}
4.2 Programmatic List Grammars
Also as phrase list grammars
Deal with recognition confidence
4.3 Custom SRGS Grammars
SRGS (Speech Recognition Grammar Specification)
W3C stanrdar that allows you to create grammars for speech recognition scenarios ranging from basic to complex
- http://www.w3.org/TR/speech-grammar
Ideal for advanced speech recognition scenarios
Allow for complex combos across several rules
4.4 Optimizing Speech Recognition
Using multiple grammars
Tuning Timeouts
Managing Audio Input Issues : RecognitionQualityDegrade