如何利用Kinect控制51单片机

wpf部分:
(1) 新建 visual c# --》 wpf工程,记得右键点击“引用”,添加相应驱动版本的microsoft.kinect.dll 和microsoft.speech动态库。app.xaml 文件及 app.xaml.cs文件无需改动。
(2)下面是mainwindow.xaml.cs文件的内容。
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.windows;
using system.windows.controls;
using system.windows.data;
using system.windows.documents;
using system.windows.input;
using system.windows.media;
using system.windows.media.imaging;
using system.windows.navigation;
using system.windows.shapes;
using microsoft.kinect;
using microsoft.speech.audioformat;
using microsoft.speech.recognition;
using system.io;
using system.io.ports; //跟串口相关,不能只是引用system.io
using system.threading; //跟串口相关,线程的引入
namespace voicecontrolled
{
///
/// interaction logic for mainwindow.xaml
///
public partial class mainwindow : window
{
kinectsensor mykinect;
///
/// 音控相关
///
recognizerinfo kinectrecognizerinfo;
speechrecognitionengine recognizer;
kinectaudiosource kinectsource;
stream audiostream;
///
/// 串口相关
///
///
delegate void handleinterfaceupdatedelagate(string text);//委托;此为重点
///
/// 实例化串口
///
serialport serialport1 = new serialport();
///
/// 串口初始化函数
///
private void serialport1_init()
{
serialport1.portname = “com1”; //串口号(参考串口调试助手)
serialport1.baudrate = 9600; //波特率
serialport1.parity = parity.none; //校验位
serialport1.databits = 8; //数据位
serialport1.stopbits = stopbits.one; //停止位
if (!serialport1.isopen)
{
serialport1.open();
}
else
messagebox.show(“port is open!”);
}
///
/// 发送字节数据函数
///
///
///
private int send_command(string command)
{
try
{
serialport1.write(command);
return (1);
}
catch (exception)
{
// comm error
return (0);
}
}
private recognizerinfo findkinectrecognizerinfo()
{
var recognizers = speechrecognitionengine.installedrecognizers();
foreach (recognizerinfo recinfo in recognizers)
{
// look at each recognizer info value to find the one that works for kinect
if (recinfo.additionalinfo.containskey(“kinect”))
{
string details = recinfo.additionalinfo[“kinect”];
if (details == “true” && recinfo.culture.name == “en-us”)
{
// if we get here we have found the info we want to use
return recinfo;
}
}
}
return null;
}
private void createspeechengine()
{
kinectrecognizerinfo = findkinectrecognizerinfo();
if (kinectrecognizerinfo == null)
{
messagebox.show(“kinect recognizer not found”, “kinect speech demo”);
application.current.shutdown();
return;
}
try
{
recognizer = new speechrecognitionengine(kinectrecognizerinfo);
}
catch
{
messagebox.show(“speech recognition engine could not be loaded”, “kinect speech demo”);
application.current.shutdown();
}
}
private void buildcommands()
{
choices commands = new choices();
commands.add(“one”);
commands.add(“two”);
commands.add(“three”);
commands.add(“four”);
commands.add(“five”);
commands.add(“six”);
commands.add(“seven”);
commands.add(“eight”);
grammarbuilder grammarbuilder = new grammarbuilder();
grammarbuilder.culture = kinectrecognizerinfo.culture;
grammarbuilder.append(commands);
grammar grammar = new grammar(grammarbuilder);
recognizer.loadgrammar(grammar);
}
private void setupaudio()
{
try
{
mykinect = kinectsensor.kinectsensors[0];
mykinect.start();
kinectsource = mykinect.audiosource;
kinectsource.beamanglemode = beamanglemode.automatic;
audiostream = kinectsource.start();
recognizer.setinputtoaudiostream(audiostream, new speechaudioformatinfo(
encodingformat.pcm, 16000, 16, 1,
32000, 2, null));
recognizer.recognizeasync(recognizemode.multiple);
}
catch
{
messagebox.show(“audio stream could not be connected”, “kinect speech demo”);
application.current.shutdown();
}
}
private void setupspeechrecognition()
{

从富士康看美帝制造业回流
如何使用STM32G031开发板实现双通道示波器
毫米级Delta机器人研制成功,能够完成制造和医药领域的一系列微操作任务
浅析Knuth高效洗牌算法
Atmosic Technologies与Energous实现业界首例互操作性能量收集,推动无线充电应用发展
如何利用Kinect控制51单片机
欧司朗推出RBG-LEDOsireE4633i
水力发电是如何产生的?
研究人员称,使用设置了LED灯具的渔网时可降低海鸟和海龟的无意捕获率
主轴控制器MAX17039的主要特性及典型应用
为什么单片机的晶振旁边要加电容呢?
火爆的区块链到底可以做一些什么
铁锂电池再受市场关注,安全性是最大优势
Redmi K30 5G网络实测 下载速度达949Mbps
过孔导电滑环安装方法
一种以三个芯片级联而成的窄脉冲小信号运算放大电路
车用显示竞技场:OLED、Mini/Micro 百花齐放
巴特沃斯滤波器优缺点分析
为什么泰克示波器应用非常广泛
高峰会专访|金龙广告李总:破旧立新,坚定前行