基于MOOC视频的增强交互性的研究与实现

2018年02月01日 05:54来源于:科技创新与应用

基于移动互联网的MOOC平台研究架构 实现与优化

张成林+路宏

摘 要:为解决MOOC在线学习课程缺乏交互性的问题,文章设计并搭建了一套基于HLS协议的增强交互性的流媒体服务器,采用基于OpenCV的SIFT和ORB算法对教学视频的图像内容进行识别和处理,生成与学习内容相关的信息数据,再使用Python、HTML5和JavaScript语言将信息数据嵌入到视频及网页中,形成具有交互性的学习内容,实现增强教学内容的交互视频。

关键词:树莓派;交互视频;OpenCV;Python

中图分类号:G434 文献标志码:A 文章编号:2095-2945(2018)03-0157-03

Abstract: In order to cope with the lack of interactive MOOC online learning course, this paper designs and builds a set of enhanced interactive streaming media server based on HLS protocol. The image content of teaching video is recognized and processed by SIFT and ORB algorithm based on OpenCV, and the information data related to learning content are generated. Then using Python, HTML5 and JavaScript language, the information data were embedded into the video and web pages, forming interactive learning content, so as to enhance the teaching content of interactive video.

Keywords: raspberry pie; interactive video: OpenCV; Python

引言

目前,在線学习已经成了一种新兴的学习方式,并吸引着广大的学习爱好者,其中最有影响力的当属MOOC(Massive Open Online Courses)。然而由于网络课程和实体课程在授课形式上的不同,就导致MOOC这种在线学习课程和实体课程相比有一个很大的不足——交互性的缺失,这也是在线课程虽然广泛流行,却没有显著地提高学习效率的主要原因。

为解决这一问题,本文将设计并搭建一套基于HLS协议的增强交互性的流媒体服务器,实现增强教学内容的在线交互视频。

1 系统的总体设计

本文搭建了一套基于HLS协议的增强视频交互性的流媒体服务器,系统整体框架如图1所示。该系统以树莓派(Raspberry Pi开发板),搭载Raspbian操作系统,作为基本的视频服务器,采用基于HLS协议的Nginx、FFmpeg和MySQL的视频服务器构建方案。

在服务器后台,使用Python语言进行程序设计,自动生成嵌入交互元素和教学内容的动态网页,处理流程如图2所示。首先,采用基于OpenCV的SIFT和ORB图像匹配算法,并结合教学视频的内容和特点,对教学视频进行预处理,提取出关键图像的基本内容和信息;之后,对视频进行预处理得到的基本数据,结合交互形式以及原始网页的信息自动生成动态网页。

在Web前端,对服务器后台自动生成的动态网页,基于在线视频的动态网页设计方法采用HTML5、JavaScript语言来嵌入交互元素,实现具有多种交互方式和内容的动态网页,以使用户在网络课程的学习中,能够提高学习效果与效率。

2 硬件系统组成

2.1 硬件设备

2.1.1 树莓派。Raspberry Pi是为学习计算机编程教育而设计,只有信用卡大小的微型电脑,其系统基于Linux,具有视频及音频功能。

2.1.2 SD卡。树莓派中没有像台式机硬盘一样的硬件设备,取而代之的是SD卡,它的作用类似于固态硬盘,树莓派从SD卡中启动。

2.1.3 电源适配器。树莓派的电源采用5V micro-USB输入,同一般手机或平板的电源一致。实际上,一般手机的充电器均可为树莓派供电。

2.2 树莓派的基本配置

本文中,树莓派充当了HLS流媒体服务器的功能。其基本搭建如下:首先,从树莓派官网下载Raspbian镜像,并采用win32diskimager软件将获得的镜像文件写入SD卡,这里采用的是最新版Raspbian Stretch With Desktop镜像。然后,将SD卡插入树莓派并连接好其他外部设备,接通电源即可工作。

3 软件搭建及设计

3.1 流媒体服务器的搭建

采用基于HLS协议的Nginx、FFmpeg、MySQL方案搭建流媒体服务器。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强。Nginx最大的特点是可以进行多模块的整合,它可以整合其他的开发模块实现更加复杂的功能。例如,Ngx_cache_purge缓存模块,gnosek_nginx_upstream传输的转换模块,echo-nginx-module回应模块,zlib压缩模块,不过,编译的时候需设置很多模块才能正常使用,否则相应的配置项无法使用。

Nginx配合FFmpeg搭建流媒体服务器的原理是: Nginx通过RTMP模块提供RTMP服务,FFmpeg推送一个RTMP流到Nginx, 然后客户端通过访问Nginx来收看实时视频流.。HLS也是差不多的原理,只是最终客户端是通过HTTP协议来访问的,但是FFmpeg推送流仍然是RTMP的。endprint

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

3.2 服务器后台设计开发

3.2.1 教学视频的预处理。在服务器后台使用Python语言进行程序设计,采用OpenCV的SIFT和ORB图像匹配算法,并结合教学视频的内容和特点,对教学视频进行预处理,提取出关键图像的基本数据。

(1)SIFT图像匹配算法。SIFT(Scale-Invariant Feature Transform)算法是一种著名的尺度不变特征检测算法。SIFT特征正如其名称一样是缩放不变的。SIFT在一点处检测主要梯度方向,根据这个方向记录局部梯度直方图结果,所以SIFT也是旋转不变的。SIFT特征包括兴趣点检测器和描述子。SIFT描述子具有非常强的稳健性。该算法检测特征时,采用图像空间和尺度空间的局部最大值,通过求一幅图中的兴趣点(Interest Points or Corner Points)及其有关尺度和方向的描述子得到特征并进行图像特征点匹配,具有良好效果。

Python中调用方法如下:

sift = cv2.xfeatures2d.SIFT_create()

kp, des = sift.detectAndCompute(img, None)

(2)ORB图像匹配算法。ORB(Oriented FAST and Rotated BRIEF)算法是对非免费的SIFT和SURF算法的一种替代算法。ORB代表定向FAST和旋转BRIEF。这个缩写的第一层意思表示关键点检测,第二层意思表示ORB算法提供的描述子。

ORB首先创建一个图像金字塔。它由一批图层组成,每个图层都是用固定的缩放因子对前一个图层下采样得到(典型情况是用8个尺度,缩放因子为1.2,这些参数可在cv2.ORB_create()函数中设置)。在具有关键点评分的位置,接受N个强度最大的关键点。其中关键点评分用的是Harris角点强度衡量方法(这个方法的作者发现Harris评分是更可靠的衡量方法)。

ORB检测器的原理基于一个现象,即每个被检测的兴趣点总是关联了一個方向。这个信息可用于校准不同图像中检测到的关键点描述子。ORB算法建议使用关键点周围的圆形邻域的重心的方向。因为根据定义,FAST关键点肯定有一个偏离中心点的重心,中心点与重心的连线的角度总是非常明确的。

Python中调用方法如下:

orb = cv2.ORB_create()

kp = orb.detect(img, None)

kp, des = orb.compute(img, kp)

3.2.2 动态网页的生成

在服务器后台使用Python语言进行程序设计,将对视频进行预处理后得到的基本数据,结合原始网页与交互形式自动生成动态网页。

所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着HTML代码的生成,页面的内容和显示效果就基本上不会发生变化。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。

具体在操作的时候,我们可以使用Python下的爬虫程序,如scrap、bs4、requests等,但我们初期只是解析一些简单的视频网页,所以用不上scrap这样的重型武器,只需requests这种简单轻便的即可。

Requests模块不包含在标准库中,需要安装,Windows和Linux下都可以使用pip安装:

$ pip install requests

在HTTP相关处理中,Requests模块更能简约的支持完整的简单用例:

import requests

req = requests.get('https://api.github.com/user',auth=('user', 'password'))

print req.status_code

print req.headers['content-type']

print req.encoding

print req.content

print req.json()['login']

3.3 Web前端设计开发

基于在线视频的动态网页设计采用HTML5、JavaScript语言来嵌入交互元素(鼠标悬停、键盘交互以及摄像头等),实现具有多种交互方式和内容的交互式视频。

所谓交互式视频,即通过各种技术手段,将交互体验融入到线性的视频的新型视频。

在前端视频网页的设计上,我们使用最基本的HTML语言来播放视频,CSS用作排版和美化,但这两个都只是作为最基本的静态网页框架的搭建,本网页前端的设计中,真正开发最多的还是JavaScript。

JavaScript作为世界上最流行的脚本语言,它是属于web的语言,广泛适用于 PC、笔记本电脑、平板电脑和移动电话,所以在此被用来向HTML页面增加交互性。许多 HTML 开发者都不是程序员,因为JavaScript拥有非常简单的语法,几乎每个人都有能力将小的JavaScript片段添加到网页中。

在网页交互的设计上,我们实现的鼠标隐藏与识别、悬停事件的发生,以及浮动画布的显示等,就是用JavaScript调用函数来实现的。

参考文献:

[1]Gary Bradski,Adrian Kaehler.学习OpenCV[M].于仕琪,刘瑞祯,译.北京:清华大学出版社,2009:355-356.

[2]Jan Erik Solem.Python计算机视觉编程[M].朱文涛,袁勇,译.北京:人民邮电出版社,2014:39-40.

[3]Robert Lagannier.OpenCV.计算机视觉编程攻略[M].相银初,译.北京:人民邮电出版社,2015:185-186,189-189.

[4]Alexander Mordvintsev,Abid K.OpenCV-Python Tutorials Documentation Release 1[EB/OL].https://docs.opencv.org/3.3.0/d6/d00/tutorial_py_root.html.endprint

 
免责声明:

     本文仅代表作者/企业观点,与【名品家电网】无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,仅供读者参考,并自行核实相关内容。

     【名品家电网】刊载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

      如因作品内容、版权和其它问题需要同本网联系的,请在30日内进行;新闻纠错: lwl#youngchina.cn

关键词: 文章 大仓库 路宏