1、Kinect for Windows SDK开发入门十三语音识别 下译Kinect for Windows SDK开发入门(十三):语音识别 下上一篇文章介绍了Kinect中语音识别的基本概念,以及一些语音处理方面的术语。在此基础上使用Kinect麦克风阵列来进行音频录制的例子说明了Kinect中音频处理的核心对象及其配置。本文将继续介绍Kinect中的语音识别,并以两个小例子来展示语音识别中的方向识别和语音命令识别。1. 使用定向麦克风进行波速追踪(Beam Tracking for a Directional Microphone) 可以使用这4个麦克风来模拟定向麦克风产生的效果,这个过程
2、称之为波束追踪(beam tracking),为此我们新建一个WPF项目,过程如下:1. 创建一个名为KinectFindAudioDirection的WPF项目。2. 添加对Microsoft.Kinect.dll和Microsoft.Speech.dll的引用。3. 将主窗体的名称改为“Find Audio Direction”4. 在主窗体中绘制一个垂直的细长矩形。 界面上的细长矩形用来指示某一时刻探测到的说话者的语音方向。矩形有一个旋转变换,在垂直轴上左右摆动,以表示声音的不同来源方向。前端页面代码: 上图是程序的UI界面。后台逻辑代码和之前的例子大部分都是相同的。首先实例化一个Kin
3、ectAudioSource对象,然后将主窗体的DataContext赋值给本身。将BeamAngleMode设置为Adaptive,使得能够自动追踪说话者的声音。我们需要编写KinectAudioSource对象的BeamChanged事件对应的处理方法。当用户的说话时,位置发生变化时就会触发该事件。我们需要创建一个名为BeamAngle的属性,使得矩形的RotateTransform可以绑定这个属性。public partial class MainWindow : Window, INotifyPropertyChanged public MainWindow() InitializeC
4、omponent(); this.DataContext = this; this.Loaded += delegate ListenForBeamChanges(); ; private KinectAudioSource CreateAudioSource() var source = KinectSensor.KinectSensors0.AudioSource; source.NoiseSuppression = true; source.AutomaticGainControlEnabled = true; source.BeamAngleMode = BeamAngleMode.A
5、daptive; return source; private void ListenForBeamChanges() KinectSensor.KinectSensors0.Start(); var audioSource = CreateAudioSource(); audioSource.BeamAngleChanged += audioSource_BeamAngleChanged; audioSource.Start(); public event PropertyChangedEventHandler PropertyChanged; private void OnProperty
6、Changed(string propName) if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propName); private double _beamAngle; public double BeamAngle get return _beamAngle; set _beamAngle = value; OnPropertyChanged(BeamAngle); 以上代码中,还需要对BeamChanged事件编写对应的处理方法。每次当波束的方向发生改变时,就更改BeamAn
7、gle的属性。SDK中使用弧度表示角度。所以在事件处理方法中我们需要将弧度换成度。为了能达到说话者移到左边,矩形条也能够向左边移动的效果,我们需要将角度乘以一个-1。代码如下:void audioSource_BeamAngleChanged(object sender, BeamAngleChangedEventArgs e) BeamAngle = -1 * e.Angle; 运行程序,然后在房间里不同地方走动,可以看到矩形条会根据你的位置左右摆动。2. 语音命令识别 在这一部分,我们将会结合KinectAudioSource和SpeechRecognitionEngine来演示语音命令识
8、别的强大功能。为了展示语音命令能够和骨骼追踪高效结合,我们会使用语音命令向窗体上绘制图形,并使用命令移动这些图形到光标的位置。命令类似如下:Create a yellow circle, there.Create a cyan triangle, there.Put a magenta square, there.Create a blue diamond, there.Move that . there.Put that . there.Move that . below that.Move that . west of the diamond.Put a large green circl
9、e . there.程序界面大致如下:和之前的应用程序一样,首先创建一下项目的基本结构:1. 创建一个名为KinectPutThatThere的WPF项目。2. 添加对Microsoft.Kinect.dll和Microsoft.Speech.dll的引用。3. 将主窗体的名称改为“Put That There”4. 添加一个名为CrossHairs.xaml的用户自定义控件。 CrossHair用户控件简单的以十字光标形式显示当前用户右手的位置。下面的代码显示了这个自定义控件的XAML文件。注意到对象于容器有一定的偏移使得十字光标的中心能够处于Grid的零点。 在应用程序的主窗体中,将根节点
10、从grid对象改为canvas对象。Canvas对象使得将十字光标使用动画滑动到手的位置比较容易。在主窗体上添加一个CrossHairs自定义控件。在下面的代码中,我们可以看到将Canvas对象嵌套在了一个Viewbox控件中。这是一个比较老的处理不同屏幕分辨率的技巧。ViewBox控件会自动的将内容进行缩放以适应实际屏幕的大小。设置MainWindows的背景色,并将Canvas的颜色设置为黑色。然后在Canvas的底部添加两个标签。一个标签用来显示SpeechRecognitionEngine将要处理的语音指令,另一个标签显示匹配正确的置信度。CrossHair自定义控件绑定了HandTop和HandLeft属性。两个标签分别绑定了HypothesizedText和Confidence属性。代码如下: 在后台逻辑代码中,让MainWindows对象实现INofityPropertyChanged事件并添加OnPropertyChanged帮助方法。我们将创建4个属性用来为前台UI界面进行绑定。public partial class MainWindow : Window, INotifyPr
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1