Kinect for Windows SDK v2.0 开发笔记 (八)语音识别(下)

本文档详细介绍了如何使用Kinect for Windows SDK v2.0进行语音识别开发,包括初始化Kinect、设置语音识别参数、处理识别事件及评估置信度。示例代码展示了如何响应识别的短语并解析识别结果。此外,还提及了SDK中的面部识别和可视化手势功能,但由于缺乏C++官方文档和示例,这部分功能的使用存在障碍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(转载请注明出处)

使用SDK: Kinect for Windows SDK v2.0 public preview

紧接上节,这次要怎么初始化Kinect呢,很简单:

// 初始化Kinect
HRESULT ThisApp::init_kinect(){
    IAudioSource* pAudioSource = nullptr;
    IAudioBeamList* pAudioBeamList = nullptr;
    // 查找当前默认Kinect
    HRESULT hr = ::GetDefaultKinectSensor(&m_pKinect);
    // 绅士地打开Kinect
    if (SUCCEEDED(hr)){
        hr = m_pKinect->Open();
    }
    // 获取音频源
    if (SUCCEEDED(hr)){
        hr = m_pKinect->get_AudioSource(&pAudioSource);
    }
    // 获取音频链表
    if (SUCCEEDED(hr)){
        hr = pAudioSource->get_AudioBeams(&pAudioBeamList);
    }
    // 获取音频
    if (SUCCEEDED(hr)){
        hr = pAudioBeamList->OpenAudioBeam(0, &m_pAudioBeam);
    }
    // 获取输入音频流
    if (SUCCEEDED(hr)){
        IStream* pStream = nullptr;
        hr = m_pAudioBeam->OpenInputStream(&pStream);
        // 利用傀儡生成包装对象
        m_p16BitPCMAudioStream = new KinectAudioStreamWrapper(pStream);
        SafeRelease(pStream);
    }
    SafeRelease(pAudioBeamList);
    SafeRelease(pAudioSource);
    return hr;
}
剩下就是初始化语音识别引擎,因为非常定式化,建议大家直接复制即可:

// 初始化语音识别
HRESULT ThisApp::init_speech_recognizer(){
    HRESULT hr = S_OK;
    // 创建语音输入流
    if (SUCCEEDED(hr)){
        hr = CoCreateInstance(CLSID_SpStream, nullptr, CLSCTX_INPROC_SERVER, __uuidof(ISpStream), (void**)&m_pSpeechStream);;
    }
    // 与我们的Kinect语音输入相连接
    if (SUCCEEDED(hr)){
        WAVEFORMATEX wft = {
            WAVE_FORMAT_PCM, // PCM编码
            1, // 单声道
            16000,  // 采样率为16KHz
            32000, // 每分钟数据流 = 采样率 * 对齐
            2, // 对齐 : 单声道 * 样本深度 = 2byte
            16, // 样本深度 16BIT
            0 // 额外数据
        };
        // 设置状态
        hr = m_pSpeechStream->SetBaseStream(m_p16BitPCMAudioStream, SPDFID_WaveFormatEx, &wft);
    }
    // 创建语音识别对象
    if (SUCCEEDED(hr)){
        ISpObjectToken *pEngineToken = nullptr;
        // 创建语言识别器
        hr = CoCreateInstance(CLSID_SpInprocRecognizer, nullptr, CLSCTX_INPROC_SERVER, __uuidof(ISpRecognizer), (void**)&m_pSpeechRecognizer);
        if (SUCCEEDED(hr)) {
            // 连接我们创建的语音输入流对象
            m_pSpeechRecognizer->SetInput(m_pSpeechStream, TRUE);
            // 创建待识别语言 这里选择大陆汉语(zh-cn) 
            // 目前没有Kinect的汉语语音识别包 有的话可以设置"language=804;Kinect=Ture"
            hr = SpFindBestToken(SPCAT_RECOGNIZERS, L"Language=804", nullptr, &pEngineToken);
            if (SUCCEEDED(hr)) {
                // 设置待识别语言
                m_pSpeechRecognizer->SetRecognizer(pEngineToken);
                // 创建语音识别上下文
                hr = m_pSpeechRecognizer->CreateRecoContext(&m_pSpeechContext);
                
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值