以下代码来自:http://mmcheng.net/zh/imagespirit/

本人仅作提取:

SREngine语音识别引擎封装类:

#pragma once/************************************************************************/
/* Notice: this project is used to support speech recognition of my     */
/* ImageSpirit project. Please see the corresponding paper for more     */
/* details. The CORE part of ImageSpirit system will be made public     */
/* available soon. More resource: http://mmcheng.net/imagespirit/       */
/* ImageSpirit: Verbal Guided Image Parsing. M.-M. Cheng, S. Zheng,     */
/* W.-Y. Lin, V. Vineet, P. Sturgess, N. Crook, N. Mitra, P. Torr,      */
/* ACM TOG, 2014.                                                       */
/************************************************************************/#include <sphelper.h> // Microsoft Speech API
#pragma comment(lib,"SAPI.lib")class SREngine
{
public://speech variableCComPtr <ISpRecognizer> m_cpRecognizer;CComPtr <ISpRecoContext> m_cpRecoContext;CComPtr <ISpRecoGrammar> m_cpCmdGrammar;//audio variableCComPtr <ISpAudio> m_cpAudio;// Const valuesstatic const UINT WM_RECOEVENT = WM_USER+100;static const UINT MYGRAMMARID = 101;public:HRESULT SetRuleState(const WCHAR * pszRuleName = NULL, BOOL fActivate = SPRS_ACTIVE);HRESULT LoadCmdFromFile(const WCHAR * xmlFileName);HRESULT InitializeSapi(HWND hWnd, UINT Msg = WM_RECOEVENT, const WCHAR *xmlFileName = NULL);
};
#include "stdafx.h"
#include "SREngine.h"HRESULT SREngine::InitializeSapi(HWND hWnd, UINT Msg, const WCHAR *xmlFileName)
{HRESULT hr = S_OK;const ULONGLONG ullInterest = SPFEI(SPEI_SOUND_START) | SPFEI(SPEI_SOUND_END) | SPFEI(SPEI_PHRASE_START) | SPFEI(SPEI_RECOGNITION) | SPFEI(SPEI_FALSE_RECOGNITION) | SPFEI(SPEI_HYPOTHESIS) | SPFEI(SPEI_INTERFERENCE) | SPFEI(SPEI_RECO_OTHER_CONTEXT) | SPFEI(SPEI_REQUEST_UI) | SPFEI(SPEI_RECO_STATE_CHANGE) | SPFEI(SPEI_PROPERTY_NUM_CHANGE) | SPFEI(SPEI_PROPERTY_STRING_CHANGE);V_RETURN(m_cpRecognizer.CoCreateInstance( CLSID_SpInprocRecognizer));V_RETURN(SpCreateDefaultObjectFromCategoryId(SPCAT_AUDIOIN, &m_cpAudio));V_RETURN(m_cpRecognizer ->SetInput(m_cpAudio, TRUE));  V_RETURN(m_cpRecognizer->CreateRecoContext(&m_cpRecoContext));  V_RETURN(m_cpRecoContext->SetNotifyWindowMessage(hWnd, Msg, 0, 0));V_RETURN(m_cpRecoContext->SetInterest(ullInterest, ullInterest)); if (xmlFileName != NULL)return LoadCmdFromFile(xmlFileName);return hr;
}HRESULT SREngine::LoadCmdFromFile(const WCHAR *xmlFileName)
{HRESULT hr = S_OK;if (m_cpCmdGrammar != NULL)return hr;V_RETURN(m_cpRecoContext ->CreateGrammar(MYGRAMMARID, &m_cpCmdGrammar));  //Command and control---C&CV_RETURN(m_cpCmdGrammar->LoadCmdFromFile(xmlFileName, SPLO_DYNAMIC));return hr;
}HRESULT SREngine::SetRuleState(const WCHAR *pszRuleName, BOOL fActivate)
{return m_cpCmdGrammar ->SetRuleState(pszRuleName, NULL, fActivate ? SPRS_ACTIVE : SPRS_INACTIVE);
}

界面操作展示类:

#ifndef SPRECOUI_H
#define SPRECOUI_H//#include "ui_SpRecoUI.h"
#include "ui_ImageSpirit.h"class SpRecoUI : public QMainWindow
{Q_OBJECTpublic:SpRecoUI(QWidget *parent = 0, Qt::WindowFlags flags = 0);~SpRecoUI();LRESULT OnRecoEvent();bool nativeEvent(const QByteArray &eventType, void *message, long *result);private slots:void onVoiceStart();void onVoiceStop();private:Ui::SpRecoUIClass ui;// For speech recognitionbool m_bSoundEnd, m_bSoundStart;SREngine m_SREngine;void Recognized(CSpEvent &spEvent);
};#endif // SPRECOUI_H
#include "stdafx.h"
#include "SpRecoUI.h"#include <QtWidgets/QMessageBox>SpRecoUI::SpRecoUI(QWidget *parent, Qt::WindowFlags flags): QMainWindow(parent, flags)
{ui.setupUi(this);connect(ui.pbVoiceInput, SIGNAL(pressed()), this, SLOT(onVoiceStart()));connect(ui.pbVoiceInput, SIGNAL(released()), this, SLOT(onVoiceStop()));  //SAPI initm_bSoundStart = false;m_bSoundEnd = false; if(FAILED(m_SREngine.InitializeSapi((HWND)this->winId(), SREngine::WM_RECOEVENT, L"./SpeechGrammar.xml")))QMessageBox::information(NULL, "Error", "Initialize speech engine failed!", MB_OK);
}SpRecoUI::~SpRecoUI()
{}void SpRecoUI::onVoiceStart()
{VERIFY_RES(m_SREngine.SetRuleState(NULL, TRUE));setWindowTitle("Sound started");
}void SpRecoUI::onVoiceStop()
{VERIFY_RES(m_SREngine.SetRuleState(NULL, FALSE));setWindowTitle("Sound stopped");
}bool SpRecoUI::nativeEvent(const QByteArray &eventType, void *message, long *result)
{MSG* pMsg = (MSG*) message;setWindowTitle("Control - Debug: winEvent");if(pMsg->message == SREngine::WM_RECOEVENT)*result = this->OnRecoEvent();return false;
}// Speech Recognition Event Process
LRESULT SpRecoUI::OnRecoEvent()
{if (m_SREngine.m_cpRecoContext == NULL)return FALSE;CSpEvent spEvent;HRESULT hr = S_OK;while(spEvent.GetFrom(m_SREngine.m_cpRecoContext) == S_OK) {setWindowTitle("Control - Debug");switch(spEvent.eEventId){case SPEI_SOUND_START: m_bSoundStart = true; break;case SPEI_SOUND_END: m_bSoundEnd = true; break;case SPEI_RECOGNITION: if (m_bSoundStart && m_bSoundEnd) Recognized(spEvent); break;}}return TRUE;
}void SpRecoUI::Recognized(CSpEvent &spEvent)
{USES_CONVERSION;CComPtr<ISpRecoResult> cpResult = spEvent.RecoResult();CSpDynamicString dstrText;cpResult->GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE, TRUE, &dstrText, NULL);QString strResult = dstrText.CopyToChar(); //  W2T(dstrText);SPPHRASE* pPhrase = NULL;if (SUCCEEDED(cpResult->GetPhrase(&pPhrase))){strResult += tr(" RuleName:") + QString::fromStdWString(pPhrase->Rule.pszName);strResult += tr(" PropName:") + QString::fromStdWString(pPhrase->pProperties->pszName);       if (pPhrase->pProperties->pNextSibling)strResult += tr(" Sibling:") + QString::fromStdWString(pPhrase->pProperties->pNextSibling->pszName);if (pPhrase->pProperties->pFirstChild)strResult += tr(" Child:") + QString::fromStdWString(pPhrase->pProperties->pFirstChild->pszName);}if (pPhrase)::CoTaskMemFree(pPhrase);    ui.textEdit->insertPlainText(strResult+"\n");
}

SpeechGrammar XML语音命令字配置:

<?xml version="1.0"?>
<!-- Refer to `Grammar XML Schema' for details about how to generate this file.  -->
<GRAMMAR LANGID="409"><DEFINE><ID NAME="Activate" VAL="1010"/><ID NAME="MkDeform" VAL="1011"/><ID NAME="ChangeMatCmd" VAL="1012"/><ID NAME="ChangeClrCmd" VAL="1013"/><ID NAME="MoveCmd" VAL="1014"/></DEFINE><RULE NAME="Activate" ID="Activate" TOPLEVEL="ACTIVE"><P>+Activate -the</P><RULEREF NAME="ObjectAndDescription" PROPNAME="ObjDes"/></RULE><RULE NAME="MkDeform" ID="MkDeform" TOPLEVEL="ACTIVE"><P>+Make -the</P><RULEREF NAME="ObjectAndDescription" PROPNAME="ObjDes"/><RULEREF NAME="DeformType" PROPNAME="DType"/></RULE><RULE NAME="ChangeClrCmd" ID="ChangeClrCmd" TOPLEVEL="ACTIVE"><P>+Change -the</P><RULEREF NAME="ObjectAndDescription" PROPNAME="ObjDes"/><OPT>-from</OPT><RULEREF NAME="ColorAtri" PROPNAME="Color1"/><P>-to</P><RULEREF NAME="ColorAtri" PROPNAME="Color2"/></RULE><RULE NAME="ChangeMatCmd" ID="ChangeMatCmd" TOPLEVEL="ACTIVE"><P>+Change -the</P><RULEREF NAME="ObjectAndDescription" PROPNAME="ObjDes"/><OPT>-from</OPT><RULEREF NAME="MaterialAtri" PROPNAME="Material1"/><P>-to</P><RULEREF NAME="MaterialAtri" PROPNAME="Material2"/></RULE><RULE NAME="MoveCmd" ID="MoveCmd" TOPLEVEL="ACTIVE"><L><P>Move</P><P>Repeat</P></L><P>-the</P><RULEREF NAME="ObjectAndDescription" PROPNAME="ObjDes"/><RULEREF NAME="MoveDirection" PROPNAME="MvDir"/><OPT><P>along -the</P><RULEREF NAME="ObjectAndDescription" PROPNAME="ObjDes2"/></OPT></RULE><RULE NAME="ObjectAndDescription"><RULEREF NAME="ColorAtri" PROPNAME="ClrAtri"/><RULEREF NAME="MaterialAtri" PROPNAME="MaterAtri"/><RULEREF NAME="ObjectName" PROPNAME="ObjName"/><RULEREF NAME="PositionAtri" PROPNAME="PosAtri"/></RULE><RULE NAME="ObjectName" DYNAMIC="TRUE"><L><P PROPNAME="NUMBER" VAL="0">wall</P><P PROPNAME="NUMBER" VAL="1">floor</P><P PROPNAME="NUMBER" VAL="2">picture</P><P PROPNAME="NUMBER" VAL="3">cabinet</P><P PROPNAME="NUMBER" VAL="4">chair</P><P PROPNAME="NUMBER" VAL="5">table</P><P PROPNAME="NUMBER" VAL="6">window</P><P PROPNAME="NUMBER" VAL="7">door</P><P PROPNAME="NUMBER" VAL="8">ceiling</P><P PROPNAME="NUMBER" VAL="9">lamp</P><P PROPNAME="NUMBER" VAL="10">bed</P><P PROPNAME="NUMBER" VAL="11">desk</P><P PROPNAME="NUMBER" VAL="12">monitor</P><P PROPNAME="NUMBER" VAL="13">car</P><P PROPNAME="NUMBER" VAL="14">blinds</P><P PROPNAME="NUMBER" VAL="15">television</P><P PROPNAME="NUMBER" VAL="16">sofa</P><P PROPNAME="NUMBER" VAL="17">counter</P></L></RULE><RULE NAME="ColorAtri"><OPT><L><P PROPNAME="NUMBER" VAL="0">black</P><P PROPNAME="NUMBER" VAL="1">blue</P><P PROPNAME="NUMBER" VAL="2">brown</P><P PROPNAME="NUMBER" VAL="3">gray</P><P PROPNAME="NUMBER" VAL="4">green</P><P PROPNAME="NUMBER" VAL="5">orange</P><P PROPNAME="NUMBER" VAL="6">pink</P><P PROPNAME="NUMBER" VAL="7">purple</P><P PROPNAME="NUMBER" VAL="8">red</P><P PROPNAME="NUMBER" VAL="9">white</P><P PROPNAME="NUMBER" VAL="10">yellow</P></L></OPT></RULE><RULE NAME="PositionAtri"><OPT><P>-in</P><L><P PROPNAME="NUMBER" VAL="0">top-left</P><P PROPNAME="NUMBER" VAL="1">top-middle</P><P PROPNAME="NUMBER" VAL="2">top-right</P><P PROPNAME="NUMBER" VAL="3">center-left</P><P PROPNAME="NUMBER" VAL="4">center-middle</P><P PROPNAME="NUMBER" VAL="5">center-right</P><P PROPNAME="NUMBER" VAL="6">bottom-left</P><P PROPNAME="NUMBER" VAL="7">bottom-middle</P><P PROPNAME="NUMBER" VAL="8">bottom-right</P></L></OPT></RULE><RULE NAME="MaterialAtri"><OPT><L><P PROPNAME="NUMBER" VAL="0">wood</P><P PROPNAME="NUMBER" VAL="1">painted</P><P PROPNAME="NUMBER" VAL="2">cotton</P><P PROPNAME="NUMBER" VAL="3">paper</P><P PROPNAME="NUMBER" VAL="4">glass</P><P PROPNAME="NUMBER" VAL="5">brick</P><P PROPNAME="NUMBER" VAL="6">metal</P><P PROPNAME="NUMBER" VAL="7">leather</P><P PROPNAME="NUMBER" VAL="8">plastic</P></L></OPT></RULE><RULE NAME="MoveDirection"><L><P>up</P><P>down</P><P>left</P><P>right</P></L></RULE><RULE NAME="DeformType"><L><P>lowwer</P><P>taller</P><P>smaller</P><P>larger</P></L></RULE>
</GRAMMAR>

使用微软的语音识别引擎Microsoft Speech API进行语音控制相关推荐

  1. speech开源框架_微软SAPI(The Microsoft Speech API):让你的软件能说会道

    "没声音,再好的戏也出不来."这虽然是一句广告,但是也说出了一个道理,我们所开发的软件,特别是一些多媒体软件,要是能够发出声音,能说会道,将为我们的软件增添不少光彩.同时,我们面临 ...

  2. 使用Web Speech API制作语音控制的音频播放器

    /* For hiding / showing the extra block */ .sp_hiddenblock {margin: 2px;border: 1px solid rgb(250, 1 ...

  3. 使用谷歌Cloud Speech API将语音转换为文字

    CSDN广告邮件太多了,邮箱已经屏蔽了CSDN,留言请转SegmentFault:https://segmentfault.com/a/1190000013591768 Google Cloud Sp ...

  4. Microsoft Speech API SDK

    在MSDN看见的一篇文章. 水平有限,翻译的不好请见谅! 原文地址: http://blogs.msdn.com/chuckop/archive/2006/11/24/microsoft-speech ...

  5. 使用Web Speech API实现语音文本互转

    本教程中,我们将尝试使用Web Speech API,这是一个非常强大的浏览器接口,可以用来记录语音并将其转换为文本,同样的,也可以用来朗读字符串. 接下来进入正题,这个App应当具有以下几个功能: ...

  6. 通过百度语音api实现语音控制五子棋——基于flask

    目录 思路 成果 步骤 录音代码 语音识别代码 思路 使用python的pyaudio库来进行语音录入,将语音存放在本地文件,然后再通过百度api进行语音识别,通过识别内容判断下一步棋落在哪. 成果 ...

  7. 微软语音识别引擎Speech

    最近有一个语音识别的功能,C#项目又是内网没法联各大厂商的云API,因此打算使用微软的语音识别引擎Speech To Text:但是最终发现它在实现设置好关键词的前提下识别率倒还行,真正做语音识别几乎 ...

  8. 语音识别引擎_linux 语音识别引擎_中文实时语音识别引擎 - 云+社区 - 腾讯云

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 腾讯云语音识别服务开放实时语音识别.一句话识别和录音文件识别三种服务形式,满足不同 ...

  9. 【VBA】Speech.Speak 指定语音库

    VBA Speech.Speak 指定语音库 Microsoft Speech API : https://docs.microsoft.com/zh-cn/previous-versions/win ...

最新文章

  1. html 怎么让tr的css覆盖td的_html表格标签
  2. ubuntu连接有线局域网后无法使用无线网卡上网
  3. gsettings-desktop-schemas : 破坏: mutter (< 3.31.4) 但是 3.28.4-0ubuntu18.04.2 正要被安装解决方案
  4. leetcode976. 三角形的最大周长(又是你得不到的简单题)
  5. SQL中基于代价的优化
  6. 哥哥对弟弟说的s9t9太空堡垒
  7. 【HTML5】媒体元素标签audio video
  8. 容器入门(5)- 在Registry之间复制镜像
  9. 读取kaf卡数据_墨菊居然能秒开机秒读数据!Lexar雷克沙1667x UHS-II存储卡体验
  10. Sentinel系统规则_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0044
  11. Django简单介绍-基础1
  12. Chisel:一款基于HTTP的快速稳定TCPUDP隧道工具
  13. TheFatRat免杀
  14. 全球最大的同性交友网站,竟然还有这些骚操作
  15. 英特尔至强处理器排行_英特尔赛扬Vs之间的比较。 至强处理器
  16. 什么是安全性测试(security testing)?
  17. 选拨管理者的一个必要条件
  18. 机器学习从入门到创业手记-1.3 必备的工具与框架
  19. Java面试题之ServletJSP篇
  20. 如何通过百度搜索的下拉词和相关搜索找长尾关键词?

热门文章

  1. MacOS系统下 adb 调试电视相关(homebrew安装 adb)
  2. usb转vga转换器
  3. BUUCTF misc 二维码1解题思路
  4. Don't let me think 笔记
  5. 万年历设计单片机c语言,数字万年历设计(80c51单片机、时钟芯片ds1320).pdf
  6. 解决usr/bin/ld: cannot find -lxxx问题
  7. grub2下常见系统初始化错误的分析和解决
  8. 学习之初 、约定、 认识Linux、安装虚拟机 、安装centos7
  9. 台式u盘显示计算机未响应怎么办,u盘插上去电脑没反应怎么办_u盘插上后无任何反应的解决教程-系统城...
  10. 解决uni-app uniCloud小程序预览没有数据