Kinect for Windows SDK开发入门十三语音识别 下.docx

上传人:b****5 文档编号:2861338 上传时间:2022-11-16 格式:DOCX 页数:16 大小:125.61KB
下载 相关 举报
Kinect for Windows SDK开发入门十三语音识别 下.docx_第1页
第1页 / 共16页
Kinect for Windows SDK开发入门十三语音识别 下.docx_第2页
第2页 / 共16页
Kinect for Windows SDK开发入门十三语音识别 下.docx_第3页
第3页 / 共16页
Kinect for Windows SDK开发入门十三语音识别 下.docx_第4页
第4页 / 共16页
Kinect for Windows SDK开发入门十三语音识别 下.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

Kinect for Windows SDK开发入门十三语音识别 下.docx

《Kinect for Windows SDK开发入门十三语音识别 下.docx》由会员分享,可在线阅读,更多相关《Kinect for Windows SDK开发入门十三语音识别 下.docx(16页珍藏版)》请在冰豆网上搜索。

Kinect for Windows SDK开发入门十三语音识别 下.docx

KinectforWindowsSDK开发入门十三语音识别下

[译]KinectforWindowsSDK开发入门(十三):

语音识别下

    上一篇文章介绍了Kinect中语音识别的基本概念,以及一些语音处理方面的术语。

在此基础上使用Kinect麦克风阵列来进行音频录制的例子说明了Kinect中音频处理的核心对象及其配置。

本文将继续介绍Kinect中的语音识别,并以两个小例子来展示语音识别中的方向识别和语音命令识别。

1.使用定向麦克风进行波速追踪(BeamTrackingforaDirectionalMicrophone)

    可以使用这4个麦克风来模拟定向麦克风产生的效果,这个过程称之为波束追踪(beamtracking),为此我们新建一个WPF项目,过程如下:

1.创建一个名为KinectFindAudioDirection的WPF项目。

2.添加对Microsoft.Kinect.dll和Microsoft.Speech.dll的引用。

3.将主窗体的名称改为“FindAudioDirection”

4.在主窗体中绘制一个垂直的细长矩形。

   界面上的细长矩形用来指示某一时刻探测到的说话者的语音方向。

矩形有一个旋转变换,在垂直轴上左右摆动,以表示声音的不同来源方向。

前端页面代码:

     上图是程序的UI界面。

后台逻辑代码和之前的例子大部分都是相同的。

首先实例化一个KinectAudioSource对象,然后将主窗体的DataContext赋值给本身。

将BeamAngleMode设置为Adaptive,使得能够自动追踪说话者的声音。

我们需要编写KinectAudioSource对象的BeamChanged事件对应的处理方法。

当用户的说话时,位置发生变化时就会触发该事件。

我们需要创建一个名为BeamAngle的属性,使得矩形的RotateTransform可以绑定这个属性。

publicpartialclassMainWindow:

Window,INotifyPropertyChanged

{

publicMainWindow()

{

InitializeComponent();

this.DataContext=this;

this.Loaded+=delegate{ListenForBeamChanges();};

}

privateKinectAudioSourceCreateAudioSource()

{

varsource=KinectSensor.KinectSensors[0].AudioSource;

source.NoiseSuppression=true;

source.AutomaticGainControlEnabled=true;

source.BeamAngleMode=BeamAngleMode.Adaptive;

returnsource;

}

privatevoidListenForBeamChanges()

{

KinectSensor.KinectSensors[0].Start();

varaudioSource=CreateAudioSource();

audioSource.BeamAngleChanged+=audioSource_BeamAngleChanged;

audioSource.Start();

}

publiceventPropertyChangedEventHandlerPropertyChanged;

privatevoidOnPropertyChanged(stringpropName)

{

if(PropertyChanged!

=null)

PropertyChanged(this,newPropertyChangedEventArgs(propName));

}

privatedouble_beamAngle;

publicdoubleBeamAngle

{

get{return_beamAngle;}

set

{

_beamAngle=value;

OnPropertyChanged("BeamAngle");

}

}

}

   以上代码中,还需要对BeamChanged事件编写对应的处理方法。

每次当波束的方向发生改变时,就更改BeamAngle的属性。

SDK中使用弧度表示角度。

所以在事件处理方法中我们需要将弧度换成度。

为了能达到说话者移到左边,矩形条也能够向左边移动的效果,我们需要将角度乘以一个-1。

代码如下:

voidaudioSource_BeamAngleChanged(objectsender,BeamAngleChangedEventArgse)

{

BeamAngle=-1*e.Angle;

}

   运行程序,然后在房间里不同地方走动,可以看到矩形条会根据你的位置左右摆动。

2.语音命令识别

   在这一部分,我们将会结合KinectAudioSource和SpeechRecognitionEngine来演示语音命令识别的强大功能。

为了展示语音命令能够和骨骼追踪高效结合,我们会使用语音命令向窗体上绘制图形,并使用命令移动这些图形到光标的位置。

命令类似如下:

Createayellowcircle,there.

Createacyantriangle,there.

Putamagentasquare,there.

Createabluediamond,there.

Movethat...there.

Putthat...there.

Movethat...belowthat.

Movethat...westofthediamond.

Putalargegreencircle...there.

 

程序界面大致如下:

和之前的应用程序一样,首先创建一下项目的基本结构:

1.创建一个名为KinectPutThatThere的WPF项目。

2.添加对Microsoft.Kinect.dll和Microsoft.Speech.dll的引用。

3.将主窗体的名称改为“PutThatThere”

4.添加一个名为CrossHairs.xaml的用户自定义控件。

   CrossHair用户控件简单的以十字光标形式显示当前用户右手的位置。

下面的代码显示了这个自定义控件的XAML文件。

注意到对象于容器有一定的偏移使得十字光标的中心能够处于Grid的零点。

    在应用程序的主窗体中,将根节点从grid对象改为canvas对象。

Canvas对象使得将十字光标使用动画滑动到手的位置比较容易。

在主窗体上添加一个CrossHairs自定义控件。

在下面的代码中,我们可以看到将Canvas对象嵌套在了一个Viewbox控件中。

这是一个比较老的处理不同屏幕分辨率的技巧。

ViewBox控件会自动的将内容进行缩放以适应实际屏幕的大小。

设置MainWindows的背景色,并将Canvas的颜色设置为黑色。

然后在Canvas的底部添加两个标签。

一个标签用来显示SpeechRecognitionEngine将要处理的语音指令,另一个标签显示匹配正确的置信度。

CrossHair自定义控件绑定了HandTop和HandLeft属性。

两个标签分别绑定了HypothesizedText和Confidence属性。

代码如下:

Class="KinectPutThatThere.MainWindow"

xmlns="

xmlns:

x="

xmlns:

local="clr-namespace:

KinectPutThatThere"

Title="PutThatThere"Background="Black">

Name="MainStage"Height="1080"Width="1920"Background="Black"VerticalAlignment="Bottom">

CrossHairsCanvas.Top="{BindingHandTop}"Canvas.Left="{BindingHandLeft}"/>

  在后台逻辑代码中,让MainWindows对象实现INofityPropertyChanged事件并添加OnPropertyChanged帮助方法。

我们将创建4个属性用来为前台UI界面进行绑定。

publicpartialclassMainWindow:

Window,INotifyPr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1