Firefly开源社区

打印 上一主题 下一主题

[Linux] 如何整合百度的技能?

23

积分

0

威望

0

贡献

技术小白

积分
23

如何整合百度的技能?

发表于 2019-8-22 11:36:49      浏览:3823 | 回复:1        打印      只看该作者   [复制链接] 楼主
现在可以正常用百度交互,并且申请了一个百度的开发者账号,以及得到了一个 profile
现在怎么把它整合进去?

有什么文档可以参考?
回复

使用道具 举报

23

积分

0

威望

0

贡献

技术小白

积分
23
发表于 2019-8-22 15:06:23        只看该作者  沙发
里面的文件都过了一遍,看到了它的说明文档了,
真是服了! 为什么不把这些文件放出来给大家呢?!!! 直接贴出来可以省很多时间

# 基于Linux版DCS SDK构建智能语音应用

## DCS协议

DCS协议是DuerOS服务端与设备端之间的通讯协议,是一套把DuerOS的智能语音交互能力向所有设备开放的API。智能硬件通过这套API与服务端进行通讯,实现DCS协议客户端逻辑,接入DuerOS服务,就能够让设备具有DuerOS的所有交互能力,了解详情请看[DCS协议文档](http://developer.dueros.baidu.co ... troduction_markdown)。

## 摘要

Linux版DCS SDK基于DCS协议,提供给开发者一个在智能设备与DuerOS之间进行智能语音交互实现的开发包,旨在降低设备接入DuerOS的开发成本。开发包包括构建智能应用与DuerOS交互时所需要的相关的头文件、SO库、开发文档、一个完整的Sample Application代码,以及相关编译脚本,开发者可通过在编译脚本中配置自己对应的编译器环境,一键编译出适配自己平台的智能应用,并在相应目标平台中体验DuerOS的交互流程。

## 1、前置条件

### 1)在DuerOS开发者平台完成百度账号注册、开发者认证和产品创建流程(选择Linux平台),并保存对应产品的client_id

![图片](http://bos.nj.bpc.baidu.com/v1/a ... 2db165dc7b2d4fc1e46)

具体参考[控制台接入流程](http://developer.dueros.baidu.co ... sole-guide_markdown)。

### 2)打开工程文件resources/config.json中,并替换clientId为对应产品client id(需要配合小度之家SDK进行帐号的授权操作)

![图片](http://bos.nj.bpc.baidu.com/v1/a ... e4f62af809d7645fc49)

### 3)开发环境需求
  - Ubuntu 16.04或以上64位版本
  - 编译工具链需支持C++11(建议使用GNU GCC 4.9.4以上版本)
  - Cmake 3.6.3或以上版本

### 4)第三方开源库依赖
Linux DCS SDK依赖如下开源库:
  - openssl: 1.0.2g
  - zlib: 1.2.8
  - nghttp2: 1.24.0
  - libcurl: 7.54.1
  - sqlite3: 3200100
  - iconv: 1.14

基于Linux DCS SDK实现的Sample Application依赖如下开源库:
  - portaudio: 190600——20161030
  - ffmpeg: 3.2.7
## 2、工程介绍
![图片](http://bos.nj.bpc.baidu.com/v1/a ... a26867f34be259710fe)  
| 目录&&文件                         | 说明               |  
| ------------------------------ | ---------------- |  
| appresources                   | SampleApp资源目录    |  
| build                          | 相关交叉编译工具链配置      |  
| build.sh                       | 编译脚本             |  
| DCSApp                         | SampleApp源代码目录   |  
| resources                      | DCS SDK资源目录      |  
| common.res                     | 唤醒资源文件           |  
| config.json                    | DCS SDK配置文件      |  
| xiaoduxiaodu_all_10022017.umdl | 唤醒模型文件           |  
| sdk                            | DCS SDK相关头文件和so库 |  
| third                          | DCS SDK第三方依赖库    |  


## 3、Sample Application程序说明

### 1)找到SampleApp程序入口文件main.cpp

    //创建一个DCSApplication实例
    auto dcsApplication = duerOSDcsApp::application::DCSApplication::create();
   
    //通过调用run函数让DCSApplication能持续运行直到退出
    dcsApplication->run();


### 2)DCSApplication中进行DCS SDK的初始化和调用
在initialize()函数中进行DCS SDK的初始化和调用。

创建相关的播放器实例:

    //读取SampleApp配置文件
    Configuration::getInstance()->readConfig()
        
    //创建语音播报播放器实例,传入参数为音频设备节点
    auto speakMediaPlayer = mediaPlayer::TtsPlayerProxy::create(configuration->getTtsPlaybackDevice());
        
    //创建音乐播放播放器实例,传入参数为音频设备节点
    auto audioMediaPlayer = mediaPlayer::MediaPlayerProxy::create(configuration->getMusicPlaybackDevice());
        
    //创建闹钟闹铃播放器实例,传入参数为音频设备节点
    auto alertsMediaPlayer = mediaPlayer::AlertsPlayerProxy::create(configuration->getAlertPlaybackDevice());
        
    //创建提示音播放器实例,传入参数为音频设备节点
    auto localMediaPlayer = mediaPlayer::LocalPlayerProxy::create(configuration->getInfoPlaybackDevice());
        
    //创建本地语音合成播放器节点,用于将文字离线转换为语音播报,传入参数为音频设备节点
    auto localTtsPlayer = mediaPlayer::LocalTtsProxy::create(configuration->getNattsPlaybackDevice());
        
    //创建蓝牙播放器,如果硬件设备支持并需要蓝牙播放功能可以创建此实例
    auto blueToothPlayer = mediaPlayer::BlueToothPlayerProxy::create();

初始化DCS SDK:

    //ApplicationManager实现了DCS SDK的相关接口(包括DialogUXStateObserverInterface、ConnectionStatusObserverInterface、ApplicationImplementation)
     auto applicationManager = std::make_shared<ApplicationManager>();
            
    /// SDK初始化所需要的参数
    duerOSDcsSDK::sdkInterfaces::DcsSdkParameters parameters;
    /// SDK配置文件所在的目录
    parameters.setPathToConfig(PATH_TO_CONFIG);
    /// SDK运行时动态写入的配置文件路径(启动程序时文件可不存在,但路径必须有效可写)
    parameters.setPathToRuntimeConfig(PATH_TO_RUNTIME_CONFIG);
    /// 设备的唯一编号
    parameters.setDeviceId();
    /// TTS的播放器实例
    parameters.setSpeakMediaPlayer(speakMediaPlayer);
    /// 音频播放器实例
    parameters.setAudioMediaPlayer(audioMediaPlayer);
    /// 闹钟播放器实例
    parameters.setAlertsMediaPlayer(alertsMediaPlayer);
    /// 本地提示音播放器
    parameters.setLocalAlarmMediaPlayer(localMediaPlayer);
    /// 会话状态观察类实例
    parameters.setDialogStateObservers({applicationManager});
    /// 连接状态观察类实例
    parameters.setConnectionObservers(applicationManager);
    /// 一些设备相关操作的接口实现类实例
    parameters.setApplicationImplementation(applicationManager);
    /// 蓝牙资源播放器实例
    parameters.setLocalMediaPlayer(blueToothPlayer);
    /// 是否使用SDK内置的唤醒库
    parameters.setEnableSdkWakeup(true);
   
    auto voiceAndTouchWakeUpObserver = std::make_shared<VoiceAndTouchWakeUpObserver>();
    parameters.setKeyWordObserverInterface(voiceAndTouchWakeUpObserver);   
    #ifdef LOCALTTS
    parameters.setLocalTtsMediaPlayer(localTtsPlayer);
    #endif
    m_dcsSdk = duerOSDcsSDK::sdkInterfaces::DcsSdk::create(parameters);
        
    if (!m_dcsSdk) {
        bduer::Logger::log_error("Failed to create default SDK handler!");
        return false;
    }

初始化PortAudio录音工具:

    //创建PortAudio录音包装器实例
    std::shared_ptr<PortAudioMicrophoneWrapper> micWrapper = PortAudioMicrophoneWrapper::create(m_dcsSdk);

启用DuerLink相关功能:

    //初始化DuerLink相关实例
    DuerLinkWrapper::getInstance()->initDuerLink();
    //启用配网相关功能
    DuerLinkWrapper::getInstance()->startNetworkRecovery();
    //启用设备发现和DLP(需要配合小度之家SDK进行使用)相关功能
    DuerLinkWrapper::getInstance()->startDiscoverAndBound(m_dcsSdk->getClientId());


## 4、Sample Application使用说明

### 1)编译
  
在工程下运行  
  
$sh build.sh build/build.conf  
  
可以在工程下生成xxx_buildout目录  

### 2)运行
  
进入到xxx_buildout/output目录下,运行  
  
$LD_LIBRARY_PATH=./lib ./duer_linux  
  
## 5、唤醒

说“小度小度”,成功唤醒后进入语音识别状态,此时就可以进行相关的语音交互。

## 6、和小度对话

请尝试多种Query,与小度交互

- 北京天气怎么样
- 播放刘若英的歌
- 播放鬼吹灯
- 播放长春广播
- 中国最高的山
- 500乘以500加30等于多少

## 7、FAQ
##### Linux版DCS SDK对智能语音设备的最低硬件配置需求是怎样的?
    单核CPU 1GHz及以上
    运行Flash 128M及以上
    运行内存 64M及以上
    编译链支持C++11(建议GNU GCC 4.9.4以上版本)

##### 如果不使用默认的PortAudio库采集音频,使用其他方式采集音频,该如何实现?
    参照PortAudioMicrophoneWrapper的实现,在采集到音频数据时,通过调用DcsSdk的writeAudioData函数,向DuerOS传送音频数据。

##### 如何不通过语音唤醒的方式与DuerOS交互?
    首先在调用DcsSdk的create函数时,禁用SDK自有唤醒功能:parametrs.setEnableSdkWakeup(false);
    其次在触发与DuerOS的每一次交互前,调用DcsSdk的notifyOfTapToTalk函数通知DuerOS开始语音识别。

##### Linux版DCS SDK目前支持哪些Skill?
    目前Linux版本DCS SDK支持语音唤醒、语音识别、闹钟功能、有声资源播放、音乐资源播放、设备音量控制、播放控制、TTS播放等功能,开发者可在Sample Application中结合智能应用运行状态、DuerOS状态实现自定义的特色功能。

##### 智能设备如何使用自己定制的bot能力?
    开发者在DuerOS开放平台注册自定义的指令集合后,可通过在DcsSdk的create函数中传递自定义的指令集集合,在向DuerOS发出特定的语音Query后,ApplicationImplementation会接收到Query对应的自定义指令,开发者在informCustomizeDirective中解析DuerOS返回的自定义指令,并对应到自己的端能力,即可实现个性化bot能力。

##### 账号登录失败,日志中出现Peer certificate cannot be authenticated with given CA certificates错误信息,该如何解决?
    Linux版DCS SDK通过HTTPS访问DuerOS服务,并需要对应的证书信息,默认证书信息在/etc/ssl/certs/目录下,用户也可以通过在resources/config.json中修改curloptCapath配置指定证书目录,另外设备也需要有同步最新时间的能力,否则证书验证也会失败。

##### 闹钟功能不能用?
    需要使用百度账号登录,在小度之家配置后才能使用。

##### Sample Application调用哪个接口进入配网模式?
    DuerLinkWrapper->startNetworkConfig()  

##### Sample Application代码太多,如何快速上手?
    Sample Application通过调用Linux版DCS SDK提供的API,并实现对应的DuerOS播放器接口、观察类接口、设备操控接口来实现智能设备的个性化应用,可以分解为如下模块来熟悉代码:
    - DcsSdk API接口模块
    - 媒体播放器观察类接口以及对应应用层实现模块(包括音乐播放器、TTS播放器、蓝牙播放器、闹钟提示音播放器等)
    - 应用层接口模块(包括设备信息获取、设备操控等功能)
    - 配网,账号登录模块
    - 录音,唤醒模块
    - 自定义定制的bot指令调用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表