• 首先我们需要下载
  • sduo apt install libcurl3 libcurl4-openssl-dev
  • sudo apt install libjsoncpp0 libjsoncpp-dev
  • 然后到图灵的官网(http://www.tuling123.com/)申请一个帐号 ,申请完后,需要创建一个机器人,我这里的机器人叫”聊天机器人“,创建好后你会获得一个密匙,我们需要把密匙后的开关关掉,不然等下会出错

  • 在vioce_system 包中的src文件夹下创建一个tuling_nlu.cpp文件
  • 以下是tuling_nlu.cpp的内容(注意,需要把代码中的key改为自己创建机器人的key,把 curl_easy_setopt(pCurl, CURLOPT_URL, "http://openapi.tuling123.com/openapi/api"); 
    中的网址改为自己机器人的接口地址,这个地址可以在机器人的api文档中找到)
  • #include<ros/ros.h>
    #include<std_msgs/String.h>
    #include<iostream>
    #include<sstream>
    #include<jsoncpp/json/json.h>
    #include<curl/curl.h>
    #include<string>
    #include<exception>using namespace std;int flag = 0;
    string result;int writer(char *data, size_t size, size_t nmemb, string *writerData)
    {unsigned long sizes = size * nmemb;if (writerData == NULL)return -1;writerData->append(data, sizes);return sizes;
    }int parseJsonResonse(string input)
    {Json::Value root;Json::Reader reader;bool parsingSuccessful = reader.parse(input, root);if(!parsingSuccessful){std::cout<<"!!! Failed to parse the response data"<< std::endl;return -1;}const Json::Value code = root["code"];const Json::Value text = root["text"];result = text.asString();flag = 1;std::cout<< "response code:" << code << std::endl;std::cout<< "response text:" << result << std::endl;return 0;
    }int HttpPostRequest(string input)
    {string buffer;std::string strJson = "{";strJson += "\"key\" : \"093f05b003c643bbae919b353c3a12ff\","; //双引号前加/防转仪strJson += "\"info\" : ";strJson += "\"";strJson += input;strJson += "\"";strJson += "}";std::cout<<"post json string: " << strJson << std::endl;try{CURL *pCurl = NULL;CURLcode res;// In windows, this will init the winsock stuffcurl_global_init(CURL_GLOBAL_ALL);// get a curl handlepCurl = curl_easy_init();if (NULL != pCurl){// 设置超时时间为10秒curl_easy_setopt(pCurl, CURLOPT_TIMEOUT, 10);// First set the URL that is about to receive our POST.// This URL can just as well be a// https:// URL if that is what should receive the data.curl_easy_setopt(pCurl, CURLOPT_URL, "http://openapi.tuling123.com/openapi/api");//curl_easy_setopt(pCurl, CURLOPT_URL, "http://192.168.0.2/posttest.cgi");// 设置http发送的内容类型为JSONcurl_slist *plist = curl_slist_append(NULL,"Content-Type:application/json;charset=UTF-8");curl_easy_setopt(pCurl, CURLOPT_HTTPHEADER, plist);// 设置要POST的JSON数据curl_easy_setopt(pCurl, CURLOPT_POSTFIELDS, strJson.c_str());curl_easy_setopt(pCurl, CURLOPT_WRITEFUNCTION, writer);curl_easy_setopt(pCurl, CURLOPT_WRITEDATA, &buffer);// Perform the request, res will get the return coderes = curl_easy_perform(pCurl);// Check for errorsif (res != CURLE_OK){printf("curl_easy_perform() failed:%s\n", curl_easy_strerror(res));}// always cleanupcurl_easy_cleanup(pCurl);}curl_global_cleanup();}catch (std::exception &ex){printf("curl exception %s.\n", ex.what());}if(buffer.empty()){std::cout<< "!!! ERROR The Tuling sever response NULL" << std::endl;}else{parseJsonResonse(buffer);}return 0;}
    void arvCallBack(const std_msgs::String::ConstPtr &msg)
    {std::cout<<"your quesion is: " << msg->data << std::endl;HttpPostRequest(msg->data);
    }int main(int argc, char **argv)
    {ros::init(argc, argv,"tuling_nlu_node");ros::NodeHandle nd;ros::Subscriber sub = nd.subscribe("voice/tuling_nlu_topic", 10, arvCallBack);ros::Publisher pub = nd.advertise<std_msgs::String>("/voice/xf_tts_topic", 10);ros::Rate loop_rate(10);while(ros::ok()){if(flag){std_msgs::String msg;msg.data = result;pub.publish(msg);flag = 0;}ros::spinOnce();loop_rate.sleep();}}
    
  • 在CMakeList文件中加入
  • add_executable(tuling_nlu_node src/tuling_nlu.cpp)
    target_link_libraries(tuling_nlu_node   ${catkin_LIBRARIES} -lcurl -ljsoncpp)
  • 修改好的CMakeList如下
  • cmake_minimum_required(VERSION 2.8.3)
    project(voice_system)  find_package(catkin REQUIRED COMPONENTS  roscpp  rospy  std_msgs
    )  include_directories(  include  ${catkin_INCLUDE_DIRS}  )  add_executable(xf_tts_node src/xf_tts.cpp)
    target_link_libraries(xf_tts_node ${catkin_LIBRARIES}   -lmsc -lrt -ldl -lpthread)
    add_executable(tuling_nlu_node src/tuling_nlu.cpp)
    target_link_libraries(tuling_nlu_node   ${catkin_LIBRARIES} -lcurl -ljsoncpp)
  • 在catkin_ws编译一下
  • $ cd catkin_ws
  • $ catkin_make
  • 现在就可以和机器人对话了
  • 首先roscore一下,在catkin_ws下运行xf_tts_node节点和tuling_nlu_node节点
  • $ rosrun voice_system xf_tts_node
  • $ rosrun voice_system tuling_nlu_node
  • $ rostopic pub -1 /voice/tuling_nlu_topic std_msgs/String "明天东莞天气"
  • 在此,你便能听到图灵机器人的回复了

该文章主要是对自己学习的一些总结,方便以后学习,也对学习该方面的人提供一些帮助,如有问题请指出。

同时该文章也借鉴了ros小课堂的一些内容。

ros+科大迅飞语音包+图灵机器人(三)通过图灵进行语义理解相关推荐

  1. ros+科大迅飞语音包

    ros+科大迅飞语音包+图灵机器人(一)sdk下载及测试 2018年06月07日 21:43:47 阅读数:52 一.首先从科大迅飞开放平台(http://www.xfyun.cn/)注册一个账户 二 ...

  2. ros+科大迅飞语音包+图灵机器人(二)在ros上使用科大迅飞

    在工作空间catkin_ws下创建一个包 $ cd catkin_ws/src/ $ catkin_create_pkg voice_system std_msgs rospy roscpp 把科大迅 ...

  3. ros+科大迅飞语音包+图灵机器人(一)sdk下载及测试

    一.首先从科大迅飞开放平台(http://www.xfyun.cn/)注册一个账户 二.创建应用程序 我这里创建的应用名称为KF 三.下载SDK 只有创建好应用才能下载SDK 在ubuntu创建一个文 ...

  4. ros+科大迅飞语音包+图灵机器人(四)与机器人对话

    将以前下载的的语音包的 samples/iat_record/的iat_record.c speech_recognizer.c speech_recognizer.c 拷贝到工程src中, linu ...

  5. 探索使用科大迅飞语音包控制机器狗(五)--实现基础语音播报功能

    已经实现了的功能: 实时语音流控制机器狗的运动 预期实现的功能还有将机器狗的状态进行语音播报,先记录一下实现过程.我的设计思路是这样的,首先进行snowboy语音唤醒,然后唤醒后进入语音识别功能,之后 ...

  6. 科大迅飞语音听写(流式版)WebAPI,Web前端、H5调用 语音识别,语音搜索,语音听写

    前言 由于公司有个Web项目需要用到语音搜索功能,找了一些第三方库都不太理想,要么语音识别速度很慢,要么不能精确识别等等,最后选择了迅飞语音(迅飞语音听写(流式版)WebAPI).迅飞语音相对来说做得 ...

  7. 使用科大迅飞语音开发时的一系列问题及解决办法

    1.添加framework时,将demo中的iflymsc.framework直接拖到项目里,不要管什么lib文件夹下的那两个框架,然后 #import "iFlyMSC/IFlyRecog ...

  8. ROS使用科大迅飞SDK进行语音合成在编译出现alsa/asoundlib.h: No such file or directory

    ROS使用科大迅飞SDK进行语音合成在编译出现alsa/asoundlib.h: No such file or directory时 只要需要安装 sudo apt-get install liba ...

  9. 迅飞语音数字匹配阿拉伯数字或汉字

    1. 说明 最近项目需求中集成了迅飞语音听写功能,遇到一个问题:比如说:"一百个商品",返回的文字为大写汉字,而不是"100个商品",项目中需要的是阿拉伯数字, ...

最新文章

  1. 浅谈MySQL数据库中的锁与事务
  2. 计算机电路基础答案,计算机电路基础模拟试卷答案(B)
  3. go 链路追踪_使用opentracing,jaeger实现golang链路追踪
  4. 修改百度搜索结果的标题
  5. LeetCode(590)——N叉树的后序遍历(JavaScript)
  6. 知云文献翻译出现乱码的解决方式
  7. 单片机毕业设计 超声波雷达可视化系统
  8. VASP学习记录与总结
  9. JAVA中文件下载和文件批量下载方法
  10. C#显示和隐藏 Excel 工作表及工作表中的行与列
  11. 对路径“C:\inetpub\wwwroot\”的访问被拒绝
  12. python--中文分词与词云制作--入门笔记(附停用词库及Mac字体资源)
  13. hdu——4379 ——The More The Better
  14. 找单身狗版本2(有两个单身狗)
  15. 贷中存量客户的价值挖掘与分类实现,试试这一重要的场景模型
  16. 纯CSS 红砖背景墙
  17. 211工科计算机专业大学排名,这所211大学曾痛失985资格,工科专业实力强劲
  18. 解决SQL_Server2000“以前的某个程序安装已在安装计算机上创建挂起的文件操作。安装程序前必须重新启动计算机”
  19. 计算机图形学学习记录 系统及图形硬件
  20. HTML三个常用代码-空格,标签,回车

热门文章

  1. 中基鸿业最实用的10个理财小知识
  2. 使用DeepEarth加载在线Google地图(卫星、街道)
  3. shell计算100以内加法
  4. 在MTU为1500,不分片的条件下,ping包长最大为1472B的理解
  5. FPGA DDR2接口设计
  6. NIOS and DDR2
  7. NASM汇编语言与计算机系统13-段的定义vstart和align语法
  8. facebook是什么鬼_Facebook Messenger Lite是Facebook Messenger的绝佳替代品
  9. ubuntu20.04安装rxt3090驱动步骤和遇到的问题
  10. 电脑关机后自动重启开机,或过一段时间自动重启开机问题解决