打造Android的中文Siri语音助手(一)——小I机器人的接口

                              By 何明桂(http://blog.csdn.net/hmg25) 转载请注明出处

Iphone4SSiri让人眼前一亮,网上出现了无数调戏Siri的视频。真是让android用户们心痒不已。好在随后android阵营中的高手迅速反击,推出了Iris。悲剧的是Iris仅支持英文,让我们这些英语烂的无比的人调戏Iris不成,反被它给调戏了。真是郁闷的不行啊~_~

所以我打算使用android的资源自己打造一个中文版的Siri,让我们用中文随意的来调戏它。(我自己做了一个简单的,哈哈,放在优亿市场里,有兴趣的童鞋可以去体验下http://www.eoemarket.com/apps/61634)

   首先,我们来分析Siri的构成,应该大致可以分为3个组成部份:语音识别、自然语言处理、语音输出。对于语音识别,我们可以使用google的语音识别API进行语音的识别,讲语音转成文字。语音输出,其实就是使用TTS,讲文字进行语音合成播放出来,这个android也是有接口可以利用的。真正核心的是自然语言识别处理这个部分,Siri功能的好坏判断很大一部分是取决于此的,这需要很大一个数据库来维持运转,在本地是无法实现的,即使iphoneSiri也是讲语音识别的指令语音上传到Apple的服务器上去解析后返回。由于apple的接口不开放,所以我们无法使用他们的接口,好在世界上拥有这样服务器的不止苹果一家,android上的Iris利用的就是http://start.csail.mit.edu/(自然语音问答系统)这个网站提供的接口以及一个叫做cleverbot的一款智能聊天平台http://www.cleverbot.com/这个聊天网站是支持汉语的,不过,只是支持拼音输入——汗啊。

   所以我们的核心任务就是寻找一个支持中文汉字输入的问答系统。经过在网络上长时间的搜索,结果发现——很遗憾,没有找到(PS:如果有谁找到了比较好的网址,麻烦共享,告诉我一声),不过对于我们调戏Siri的这个需求,我找到了一个较好的替代品——聊天机器人.http://www.xiaoi.com/widget/1007/i智能聊天机器人。

   经过短时间的摸索,我实现了一个类来,初始化连接小i机器人的接口,发送数据以及接受反馈。用到的接口地址如下:

    private String Webbot_Path = "http://webbot.xiaoi.com/engine/widget1007/webbot.js?encoding=utf-8";private String Send_Path = "http://122.226.240.164/engine/widget1007/send.js?encoding=utf-8&";private String Recv_Path = "http://122.226.240.164/engine/widget1007/recv.js?encoding=utf-8&";

      http连接上边的Webbot_Path会反馈回来一些数据:

var L_IDS_SEND_MESSAGE_URL = "http://122.226.240.164/engine/widget1007/send.js?encoding=utf-8&";
var L_IDS_RECV_MESSAGE_URL = "http://122.226.240.164/engine/widget1007/recv.js?encoding=utf-8&";
var L_IDS_GET_RESOURCE_URL = "http://122.226.240.164/engine/widget1007/getres.do";
var __sessionId = "86491993134658194";
document.write("<script src='http://122.226.240.164/engine/widget1007/_core.js?encoding=utf-8&'><\/script>");
       反馈回来的数据包  括上 边的发送和接收地址,以及一个 sessionId,这个sessionId很重要,类似于一个key,用于后边的会话中。由于发送和接收地址是固定的,可以直接写死,但是sessionId是变动的,所以首先需要将它从反馈回来的茫茫数据中提取出来,我使用的是一个简单的正则表达式:
         String strResult = EntityUtils.toString(httpResponse.getEntity());Pattern p = Pattern.compile("sessionId = .(\\d+)"); //get sessionIdMatcher m = p.matcher(strResult);if (m.find())   mSessionId = m.group(1);
    

得到sessionId后,我们就可以进行初始化了,初始化的过程很简单,将sessionId将填入下边格式中,发送到服务器去就行了。

String   strSendJoin = Send_Path+ "SID="+ mSessionId+"&USR="+ mSessionId+ "&CMD=JOIN&r=";

初始化完成后,就可以使用下边的格式网址发送问题以及接收答案:

String strSend = Send_Path + "SID=" + mSessionId + "&USR=" + mSessionId + "&CMD=CHAT&SIG=You&MSG=" + msg +"&FTN=&FTS=&FTC=&r=";
String strRec = Recv_Path + "SID=" + mSessionId + "&USR=" +mSessionId + "&r=";xiaoi.sendMsg(mQuestion);
results = xiaoi.revMsg();

接收到的内容也是需要提取的,使用的是正则表达式:

    String  msgTmp = EntityUtils.toString(httpResponse.getEntity());Pattern p = Pattern.compile("\"MSG\":\"(.*?)\"");Matcher m = p.matcher(msgTmp);if (m.find()) {msg = m.group(1);}

    通过上述的小i聊天机器人的接口,你便可以实现一个简单的,可以自由聊天对话的Siri。小I机器人还是很智能的,聊天的对话也很有意思,但是仅仅只能聊天,这个和iphone Siri的差距太大了,所以稍后我们将给它添加另外一个智能的大脑。


本文完整代码如下:

public class XiaoI {private String Webbot_Path = "http://webbot.xiaoi.com/engine/widget1007/webbot.js?encoding=utf-8";private String Send_Path = "http://122.226.240.164/engine/widget1007/send.js?encoding=utf-8&";private String Recv_Path = "http://122.226.240.164/engine/widget1007/recv.js?encoding=utf-8&";private String mSessionId = null;private HttpClient httpClient = null;public boolean initialize() {boolean success=false;	HttpParams httpParams = new BasicHttpParams();HttpConnectionParams.setConnectionTimeout(httpParams, 30000);HttpConnectionParams.setSoTimeout(httpParams, 30000);httpClient = new DefaultHttpClient(httpParams);try {String strGetId = Webbot_Path;HttpGet httpRequest = new HttpGet(strGetId);HttpResponse httpResponse = httpClient.execute(httpRequest);if (httpResponse.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {String strResult = EntityUtils.toString(httpResponse.getEntity());Pattern p = Pattern.compile("sessionId = .(\\d+)"); //get sessionIdMatcher m = p.matcher(strResult);if (m.find()) {mSessionId = m.group(1);String strSendJoin = Send_Path + "SID=" + mSessionId+ "&USR=" + mSessionId + "&CMD=JOIN&r=";HttpGet httpRequest1 = new HttpGet(strSendJoin);httpResponse = httpClient.execute(httpRequest1);String strRevAsk = Recv_Path + "SID=" + mSessionId+ "&USR=" + mSessionId + "&r=";HttpGet httpRequest2 = new HttpGet(strRevAsk);httpResponse = httpClient.execute(httpRequest2);success=true;}}} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}finally{return success;}}public void sendMsg(String msg) {String strTalksend = Send_Path + "SID=" + mSessionId + "&USR="+ mSessionId + "&CMD=CHAT&SIG=You&MSG=" + msg+ "&FTN=&FTS=&FTC=&r=";HttpGet httpRequest = new HttpGet(strTalksend);try {httpClient.execute(httpRequest);} catch (ClientProtocolException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public String revMsg() {String strTalkRec = Recv_Path + "SID=" + mSessionId + "&USR="+ mSessionId + "&r=";HttpGet httpRequest = new HttpGet(strTalkRec);String msg = null;try {HttpResponse httpResponse = httpClient.execute(httpRequest);if (httpResponse.getStatusLine().getStatusCode() == 200) {String msgTmp = EntityUtils.toString(httpResponse.getEntity());Pattern p = Pattern.compile("\"MSG\":\"(.*?)\"");Matcher m = p.matcher(msgTmp);if (m.find()) {msg = m.group(1);}}} catch (ClientProtocolException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return msg;}
}

使用方法:XiaoI xiaoi = new XiaoI();
                xiaoi.initialize();
               xiaoi.sendMsg(mQuestion);
       results = xiaoi.revMsg();

由于发送接收耗时较多,最好放后台处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/19308.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1 分钟给 Siri 升个级!从智Z变身 ChatSiri!

原文链接&#xff1a;https://forum.laf.run/d/79/17 众所周知&#xff0c;Siri 是一个智 Z&#xff01;那么如果能接入大火的 chatGPT&#xff0c;是不是就会从智 Z 变成人工智能&#xff1f;&#xff01; 众所周知&#xff0c;Laf 是一个集函数、数据库、存储为一体的云开发…

iOS-Siri唤起银行类app (语音转账)

前言 最近公司App要实现下图这样一个功能&#xff0c;对iPhone手机喊 " 嘿&#xff0c;Siri&#xff0c;余额 ”或者 " 嘿&#xff0c;Siri&#xff0c;转账 ” 出现下面的列表&#xff0c;结果列表中展示我们的APP。 列表.png 百度了很久&#xff0c;没有找到这个是…

多种多样的语音连麦方式

前言 语音连麦&#xff0c;视频通话这种基础功能大家都已经非常熟悉了&#xff0c;应用场景也十分广泛&#xff0c;例如连麦直播、游戏开黑、在线合唱、视频相亲等。 anyRTC为了让开发者们可以最找到适合自己的开发系统&#xff0c;目前我们已经适配了iOS、Androd、Web、小程…

《人类简史》笔记三—— 历史从无正义

目录 一、尽管把人人生而平等喊得震天响&#xff0c;其实还是把人分成了上下等级 二、恶性循环 三、当男人究竟有什么好的&#xff1f; 一、尽管把人人生而平等喊得震天响&#xff0c;其实还是把人分成了上下等级 古时候&#xff1a; 上等人 平民和奴隶 现在&#xff1a;…

是什么让你意识到打工没出路的?

前两年有篇爆款文&#xff0c;叫《困在算法里的外卖骑手》——算法的最终目标&#xff0c;是将骑手的体力压榨到极限&#xff0c;将成本降低到极限。 很多人看完&#xff0c;都替外卖小哥叫惨。 但回头仔细一盘&#xff0c;发现自己也惨&#xff0c;那套残酷的资本主义算法&a…

男子与 AI 对话 6 周后,选择自杀!一时难分“魔鬼”还是“救星”?

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 伴随着 ChatGPT 的火热出圈&#xff0c;让 AI 在全球范围内掀起一股浪潮&#xff1a;“往赛道里挤&#xff01;” 当各大公司秉承着“冲就对了”的心态迎接 AI 带来的一切&#xff0c;却…

LangChain大型语言模型(LLM)应用开发(五):评估

LangChain是一个基于大语言模型&#xff08;如ChatGPT&#xff09;用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口&#xff0c;可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

你不知道的 async、await 魔鬼细节

点击上方 前端Q&#xff0c;关注公众号 回复加群&#xff0c;加入前端Q技术交流群 作者&#xff1a;Squirrel_ https://juejin.cn/post/7194744938276323384 0、前言 关于promise、async/await的使用相信很多小伙伴都比较熟悉了&#xff0c;但是提到事件循环机制输出结果类似的…

我与ChatGPT又聊了聊:什么是真正的云原生大数据平台

图片来源 | 文心一格 小智&#xff1a;传统大数据平台是什么样的&#xff1f;企业使用传统大数据平台有哪些弊端&#xff1f; 小智&#xff1a;云原生为什么这么火&#xff1f;企业如何借助云原生实现数据驱动&#xff1f; 小智&#xff1a;你听过在Kubernetes上部署的容器化云…

【云原生】我将ChatGPT变成Kubernetes 和Helm 终端

{kubectl get po&#xff0c;deploy&#xff0c;svc}{kubectl run --imagenginx nginx-app --port80 --env“DOMAINcluster”}{kubectl expose deployment nginx-app --port80 --namenginx-http}{kubectl get po&#xff0c;svc&#xff0c;deploy}{curl 10.100.67.94:80}{helm…

关于云原生,我问了 ChatGPT 几个问题......

2 个月用户破亿&#xff0c;一举超过 Tik Tok 成为史上增速最快的消费级应用程序&#xff0c;ChatGPT 的诞生给沉寂的科技圈丢下了一块巨大的石头。这场生成式 AI 掀起的浪潮&#xff0c;让人不禁重回到当年人类智慧的大溃败——AlphaGo 战胜李世石&#xff0c;震撼依旧但其背后…

教你接入GPT4,不用梯子也能玩

介绍 chatgpt最近十分火爆&#xff0c;但大多少开发接入的都是gpt3.5&#xff0c;今天教教大家如何快速接入gpt4 使用 接入很简单&#xff0c;需要去API文档获取你的token填入&#xff0c;每个账号都有白嫖次数&#xff0c;以下是node代码 const { data } await axios({url…

GPT:你知道这五年我怎么过的么?

时间轴 GPT 首先最初版的GPT&#xff0c;来源于论文Improving Language Understanding by Generative Pre-Training&#xff08;翻译过来就是&#xff1a;使用通用的预训练来提升语言的理解能力&#xff09;。GPT这个名字其实并没有在论文中提到过&#xff0c;后人将论文名最后…

【2023.5.3~2023.5.9】CTF刷题记录

目录 日期&#xff1a;2023.5.3 题目&#xff1a;[GWCTF 2019]pyre 日期&#xff1a;2023.5.4 题目&#xff1a;[ACTF新生赛2020]easyre 题目&#xff1a;DASCTF Apr.2023 X SU战队2023开局之战 【简单】easyRE 日期&#xff1a;2023.5.5 题目&#xff1a;findit 题目&…

浅尝Transformer和LLM

文章目录 TransformerTransformer的衍生BERTPre-trainingBERT与其他方法的关系怎么用BERT做生成式任务&#xff1f; GPTPre-trainingFine-Tuning Transformer工具开源库特点 LLM系列推理服务 大语言模型势不可挡啊。 哲学上来说&#xff0c;语言就是我们的一切&#xff0c;语言…

【stable diffusion原理解读通俗易懂,史诗级万字爆肝长文,喂到你嘴里】

文章目录 一、前言&#xff08;可跳过&#xff09;二、stable diffusion1.clip2.diffusion modelforward diffusion &#xff08;前向扩散&#xff09;逆向扩散&#xff08;reverse diffusion&#xff09;采样图阶段小结 3.Unet modeltimestep_embedding采用正余弦编码 三、sta…

旋转的base,你见过吗wp

一、题目 前几天在ctfshow的qq交流群里看到有个师傅在问一道名为“旋转的base&#xff0c;你见过吗”的题目&#xff08;但这道题不是ctfshow平台上的啦&#xff0c;后来听说好像是个比赛题&#xff09;&#xff0c;题目给出了一串编码过的字符串&#xff0c;但看题目名也能知…

OtterCTF—内存取证wp

目录 前言 一、工具说明 二、题目解析 1.What the password? 2.General Info 3.Play Time 4.Name Game 5.Name Game 2 6.Silly Rick 7.Hide And Seek 8.Path To Glory 9.Path To Glory 2 10.Bit 4 Bit 11.Graphics For The Weak 12.Recovery 13.Closure 总结 前言 前几天有幸…

电商打工人的饭碗,AIGC还端不走

文 | 螳螂观察 作者 | 鲸胖胖 以ChatGPT、Midjourney、文心一言等为代表的AIGC产品&#xff0c;已经在全球掀起新一轮的AI技术变革新浪潮&#xff0c;再度刷新了人们对AI的认知&#xff0c;多个行业的商业模式和生态必然在未来会被彻底重构。 前不久&#xff0c;36氪就测使用…

巴比特 | 元宇宙每日必读:用虹膜信息换基本收入?OpenAI创始人顶着质疑声为其Web3项目Worldcoin再寻1亿美元融资...

摘要&#xff1a;据元宇宙日爆报道&#xff0c;OpenAl的CEO要为他两年前创办的币圈项目worldcoin再寻1亿美元融资&#xff0c;该项目于5月8日面向全球推出加密钱包WorldApp&#xff0c;要给“无条件为全民空投代币”&#xff0c;此外&#xff0c;项目方还为这款钱包的推出发行了…