如何在腾讯云上搭建一个PPT自动播放的服务器

作者:宋秋萌

先描述一下我们产品的效果,你可以借助任何一个远程终端来讲解你的 PPT (一个手机、麦克风等),我们的系统会根据你讲解的内容帮助你自动播放 PPT ,解决播放 PPT 的麻烦。

一.服务端代码实现

先放上我们的系统架构图

我们的服务器分成了两层来实现这项功能。

第一层是数据处理层

具体模块:

1.持久化模块(数据库)

我们选择的是用 mongoDB 数据库进行持久化操作。这个模块的主要功能是对每个 PPT 的信息进行记录,比如用户预先输入的每一页 PPT 的翻页提示语。每一个 PPT 都被是一个 document ,同意放置在 userinfo collection 里面(命名比较随意。)。其中, document 的前面几条分别记录了用户的 ID,PPT 的信息等,后面则是记录每一页用户的翻页提示。即用户在当前页面说道这句话的时候,系统会下达翻页指令。

2.语义识别模块

这个模块是用来将用户发来的 string 类型进行识别,转化成 PC 客户端可以理解的 PPT 指令。

由于在网上关于语义匹配的多是整个文章的语义匹配,或文章与一句话的匹配程度,而我们这个工程需要的是两个较短的句子的匹配,且比赛时间有限,所以我们只能自己在已有的较复杂的算法模型上自行改进,创造出了了一个简化版矩阵相乘的算法。具体实现思路如下:

首先,拿到用户演讲内容的字符串和用户设置的翻页关键句字符串,例如,用户演讲内容为:“接下来我们介绍屈原的文学成就”;用户设置的关键句为:“屈原的文学成就”。

然后分词模块开始工作,讲两句分别分词放在不同的Vector中:

V1:{"接下来","我们","介绍","屈原","的","文学","成就"}

V2:{"屈原","的","文学","成就"}

而且我们会调用开源 API 得到每个词的词性,匹配时根据词性设置权重。

对于 V1 中每个词,分别去匹配 V2 中的词,若是名词且匹配住,则 V1 中那个词的的位置设置为1,动词匹配成功会将权重设置为0.9。若匹配不成功则为名词为0.1,动词为0.15。其他词性的词也这样处理但权重不同,具体权重按具体情况分析,这样就可以得到一个矩阵。{0.4,0.1,0.15,1,0.8,1,1},这样就可以算出来一个相似度约为0.635,设置一个阈值,具体情况根据实际而定,若相似度大于阈值,则匹配成功,返回翻页指令。

对于轻微口音导致语音识别不准确,我们会和转成拼音的相似度进行综合。

3.PPT 指令调度模块

这个模块用来综合调度语意模块识别出来的 PPT 指令。这个模块实现的核心是一个 map 集合,它以用户的 ID 为 key,指令集合为 value ,来储存用户已经发送而未被 PPT 客户端执行的 PPT 指令,并且通过一个接口提供指令的 CURD 操作。

考虑到网络的原因,用户发出的指令可能无法及时被客户端获取,所以我们在这里使用了一个 queue 来储存用户的指令。当网络拥堵或者用户发送的指令过多的时候指令会被临时储存,并等待PPT客户端周期性的访问取出。

第二层是服务接口层

1.PPT 客户端

考虑到 Java 平台的广泛性,我们的 PPT 客户端也选择采用 Java swing 来实现。所以,服务端使用 Java 平台的 rmi 框架来为PPT客户端提供服务接口。具体结构包括获取 PPT 指令、注册服务、绑定 PPT 翻页提示语等,具体的实现细节则会交由第一层模块。

2.语音录入端(智能手机)

当时因为设备的限制,我们决定采用智能手机作为语音的录入设备。

考虑到 iOS 系统不支持 Java 语言,我们没有使用 rmi 框架来提供服务,而是提供了更为适用的 tcp 接口。

这个接口会不断接收客户端识别并发来的 string 类型的用户语音,并交由语义识别模块来进行语意识别,并将结果交给 PPT 指令调度模块。

这样,一个调度 PPT 自动播放的服务端就可以搭建完毕了。

二.服务器部署

这里我们采用了腾讯云服务器作为服务器的运行平台(腾讯云推出的1元学生服务器,简单易用)。

首先在镜像市场上购买带有 Java 开发环境的 Linus 系统(牛人可以自己配置),再将写好的系统打包成 jar 文件(记得添加程序入口)。

将程序上传后通过 ssh 客户端启动程序就 OK 了(最好能设置能一个服务,并设置成自启动,方法请百度)。

三.客户端实现简介

PPT 客户端我们主要使用的 robot 相关类来控制 PPT 的播放,并通过 shell 脚本来实现视屏播放等功能。

语音识别端则是通过讯飞语音系统来识别用户说出的话,并上传到服务端进行处理。

这样,一个远程自动播放 PPT 的系统就搭建完毕了,大家在演讲分享的时候就再也不同站在电脑前来播放 PPT 啦。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏何俊林

仿百篮应用市场(已开源)

点评:本项目来自guzhigang同学的练手项目,仿的是百蓝应用市场,使用的是Retorfit2+Rxjava2+Mvp+Dagger2架构开发多层封装,高度解...

2085
来自专栏顶级程序员

12 款 JavaScript 代码测试必备工具

每天都会产生新的代码、用户测试工具和框架。下面的列表列出了可以完成各种测试需求的代码工具。你应该调查研究一下,看这些工具是否适用于你的技术栈和技术需求。 01...

34510
来自专栏何俊林

推荐一个Flutter项目(已开源)

2913
来自专栏Python中文社区

用Python玩转微信的正确姿势!

0. itchat 最近研究了一些微信的玩法,我们可以通过网页版的微信微信网页版,扫码登录后去抓包爬取信息,还可以post去发送信息。 然后发现了itchat这...

4358
来自专栏算法+

pytorch 移动端框架 thnets 附c示例代码

前年年前做一个手机移动端图像识别项目的时候, 先后尝试了mxnet,thnets,caffe,tensorflow. 当时的情况是,mxnet内存管理奇差,内存...

4137
来自专栏嵌入式程序猿

你的代码敢上Polyspace跑吗?

嵌入式代码动态验证 在嵌入式开发中,代码静态分析工具相信大家应该都熟悉,都用过像PClint,understand C等,但对于动态验证,运行时错误验证工具还是...

3076
来自专栏一“技”之长

iOS7使用原生API进行二维码和条形码的扫描

IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是ZBarSDK,IOS7之后,系统的AVMetadataObject类中,为我们提供了解析二维码...

853
来自专栏西安-晁州

SPA应用部署时首屏启动慢问题解决方案

使用vuejs开发的单页应用,打包部署上线后,发现首屏启动时间达到了惊人的10s左右,于是开始优化,目前使用到的总结如下:

1043
来自专栏互联网杂技

列表设计的一些思路

列表算是一个非常基础的设计元素,无非是一排一排的数据内容,加上一些基本的操作。最近连续设计了一个礼拜的列表后,最直观的感受是:再简单的东西,也有很多的细节需要思...

3409
来自专栏python小白到大牛

Python终级教程!语音识别!大四学生实现语音识别技能!吊的不行

语音识别源于 20 世纪 50 年代早期在贝尔实验室所做的研究。早期语音识别系统仅能识别单个讲话者以及只有约十几个单词的词汇量。现代语音识别系统已经取得了很大进...

2152

扫码关注云+社区