我正在为大学项目开发一个原型演讲文本字幕应用程序.我将在我的项目中使用手势识别,所以我认为使用Kinect作为麦克风源是一个好主意,而不是使用额外的麦克风.我的应用的想法是识别自发的演讲,如长而复杂的句子(我明白,语音听写不会是完美的).我看过许多Kinect语音示例,它引用了Microsoft.Speech,但没有引用System.Speech.由于我需要训练语音引擎并将DictationGrammar加载到语音识别引擎中,因此Microsoft.Speech是我的唯一选择.
我已经设法使用Kinect作为直接麦克风音频源,但由于我正在加载Kinect进行视频预览和手势识别,我无法将其作为直接麦克风访问.
这是直接访问麦克风而无需加载Kinect硬件进行手势等的代码,并且工作正常:
private void InitializeSpeech()
{
var speechRecognitionEngine = new SpeechRecognitionEngine();
speechRecognitionEngine.SetInputToDefaultAudioDevice();
speechRecognitionEngine.LoadGrammar(new DictationGrammar());
speechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
speechRecognitionEngine.SpeechRecognized += (s, args) => MessageBox.Show(args.Result.Text);
}
Run Code Online (Sandbox Code Playgroud)
这是我需要在加载后通过Kinect访问访问源的地方,它根本没有做任何事情.我想这样做:
using (var audioSource = new KinectAudioSource())
{
audioSource.FeatureMode = true;
audioSource.AutomaticGainControl = false;
audioSource.SystemMode = SystemMode.OptibeamArrayOnly;
var recognizerInfo = GetKinectRecognizer();
var speechRecognitionEngine = new SpeechRecognitionEngine(recognizerInfo.Id);
speechRecognitionEngine.LoadGrammar(new DictationGrammar());
speechRecognitionEngine.SpeechRecognized += (s, args) => MessageBox.Show(args.Result.Text);
using (var s = audioSource.Start())
{
speechRecognitionEngine.SetInputToAudioStream(s, new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null));
speechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
}
}
Run Code Online (Sandbox Code Playgroud)
所以问题是,是否可以使用System.Speech而不是Microsoft.Speech与当前的Kinect SDK,以及我在第二个代码示例中做错了什么?
GetKinectRecognizer方法
private static …Run Code Online (Sandbox Code Playgroud) 我的布局有一个3列网格,每个网格的宽度都设置为Width="*".对于中间(第二)网格,我有另外3列网格,每个网格包含它自己的文本块,并且列网格宽度再次设置为Width="*".
调整窗口大小时,网格会按预期调整大小,但如果文本超出网格边界,则第3个文本块不会被修剪.我有文本框设置TextTrimming="WordEllipsis"和TextWrapping="Wrap",并且由于某种原因没有强制执行属性.
这是我的一些代码:
布局网格:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="150" MaxWidth="300" Width="1*" />
<ColumnDefinition Width="Auto"/>
<ColumnDefinition MinWidth="150" MaxWidth="500" Width="1*" />
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
</Grid>
Run Code Online (Sandbox Code Playgroud)
第二列代码:
<Grid Grid.Column="2" VerticalAlignment="Bottom" HorizontalAlignment="Left" Margin="5" Width="Auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Path=FeedItems.Count}" Foreground="White" FontSize="18" Width="Auto" FontWeight="SemiBold" />
<TextBlock Text=" items from " Foreground="White" FontSize="18" Width="Auto" Grid.Column="1" />
<TextBlock Text="{Binding Path=Name}" Foreground="White" FontSize="18" Grid.Column="2" TextTrimming="CharacterEllipsis" HorizontalAlignment="Left" Width="Auto" TextWrapping="NoWrap" ClipToBounds="True" /> …Run Code Online (Sandbox Code Playgroud)