如何在腾讯云上搭建一个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 条评论
登录 后参与评论

相关文章

来自专栏利炳根的专栏

学习笔记TF063:TensorFlow Debugger

TensorFlow Debugger(tfdbg),TensorFlow专用调试器。用断点、计算机图形化展现实时数据流,可视化运行TensorFlow图形内部...

4350
来自专栏互联网开发者交流社区

SEO-关键词密度与友情链接交换技巧

863
来自专栏全球人工智能的专栏

TensorFlow 的 c ++ 实践及各种坑!

本文重点介绍 tensorflow C++ 服务化过程中实现方式及遇到的各种问题。

2.2K1
来自专栏FreeBuf

看我如何基于Python;Facepp打造智能监控系统

由于种种原因,最近想亲自做一个基于python&facepp打造的智能监控系统。 0x00:萌芽 1:暑假在家很无聊 想出去玩,找不到人。玩个lol(已卸载),...

3785
来自专栏吉浦迅科技

DAY73:阅读Programming Guidelines

我们正带领大家开始阅读英文的《CUDA C Programming Guide》,今天是第73天,我们正在讲解CUDA 动态并行,希望在接下来的27天里,您可以...

663
来自专栏CSDN技术头条

面向机器智能的TensorFlow实践:产品环境中模型的部署

在了解如何利用TesnsorFlow构建和训练各种模型——从基本的机器学习模型到复杂的深度学习网络后,我们就要考虑如何将训练好的模型投入于产品,以使其能够为其他...

3526
来自专栏大数据文摘

想入门深度学习不会搭建环境?手把手教你在Amazon EC2上安装Keras

2232
来自专栏机器之心

教程 | 如何使用Docker、TensorFlow目标检测API和OpenCV实现实时目标检测和视频处理

选自TowardsDataScience 作者:Léo Beaucourt 机器之心编译 参与:李诗萌、路雪 本文展示了如何使用 Docker 容器中的 Ten...

3456
来自专栏CreateAMind

carla 学习笔记

Carla是一个用于自主驾驶研究的开源模拟器。与Torcs的关系,都属于模拟器,但是Torcs并非为自动驾驶研究而生,在仿真程度上,Carla可以说远胜Torc...

1002
来自专栏Golang语言社区

从零到 Go:Google感恩节火鸡涂鸦开发纪实

文是 Google 搜索团队软件工程师 Reinaldo Aguiar 发表在 Go 语言博客的客座文章,他分享了在一天之内完成首款 Go 程序的开发并发布给数...

3178

扫码关注云+社区