基于知识细粒度查询设计方案(使用手册)


作者:谢昊

班级:计算机应用技术

1. 使用说明

本系统涉及的环境有点多,本设计将从爬虫获取,知识点提取,知识点展示来说明。

2. 爬虫获取

项目爬虫功能是一个代码开源的软件来完成对应的功能

软件设计清晰 且帮助文档完善

下载网址为:https://www.xuewuzhi.cn/downloader

3. 知识点提取

这个是整个项目的难点和重点

知识点提取 是基于mooc视频中的视频提取

举个例子 在 python程序语言设计中RGB色彩体系这个课中,存在下列两个小的知识点。但是视频并没有对其进行区分。(没有划分出知识点的起始结束时间)

对于该功能的讲解 打算分成三个部分来说明

3.1 项目介绍

项目的文件夹三个 为pic text video 分别存取 图片 文字 视频的信息

重要的py文件有三个 video_pic ,pic_word, json_mysql

分别完成 下面介绍的 3.2 3.3 3.4 的功能

3.2 视频关键帧提取

视频的关键帧提取使用的是 基于ffmpeg的pyav库来进行存取

输入:视频

输出:视频关键帧图片(名称含有视频关键帧时间)

关键代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def extract_video(filename):
container = av.open(filename)
# Signal that we only want to look at keyframes.
stream = container.streams.video[0]
stream.codec_context.skip_frame = 'NONKEY'
# default 不能用
# stream.codec_context.skip_frame = 'DEFAULT'
for frame in container.decode(stream):
# 这里应该能管到时间戳
frame.to_image().save(
'{}.png'.format((frame.pts/100000), '.1f'),
quality=80,
)

3.2.1 使用方式

项目文件为 video_pic

将我们下载好的视频总集 放入video文件夹内

然后修改好 我们要提取的文件夹名称

run 就生成了对应视频总集文件的png

你需要修改的位置

运行的情况

3.3 图片信息提取

图片信息的提取,使用了百度提供的ocr服务,基本手敲了300行代码

这个为项目的难点和核心点

输入:视频关键帧图片

输出:含有课程名称,课件名,知识点(topic),知识点内容(content),起始时间,终止时间的json文件

工作流程:

  1. 先将一个课件名内的图片按时间戳顺序整理
  2. ocr遍历课件内的图片
    1. 图片ocr处理 得到图片文字内容

      1. ocr会返回含有文字的条数 如果条数小于3 则跳过
      2. 文字进行垃圾词清理
      3. 判断文字条数是不是为 0 为0跳过
      4. 和上一个content进行比较 如果存在相同的字段 则不存 若有不同 则添加字段(topic相同)
    2. 当topic 发生改变时候

      1. 将存下上一次topic改变的时间,和这一次topic的修改时间记为起始时间和结束时间
      2. 记下原topic的名称,和content
      3. 存为json存取
    3. 当遍历到最后一个图片时

      1. 将存下上一次topic改变的时间,和这一次topic的修改时间记为起始时间和结束时间
      2. 记下原topic的名称,和content
      3. 存为json存取

3.3.1 使用方式

项目文件: pic_word

通过百度智能云 获得对应的api_key 和 secret_key

https://cloud.baidu.com/doc/OCR/s/dk3iqnq51

1
2
3
4
5
API_KEY = 'ZOYegM165651651zf13suG2'

SECRET_KEY = '6HjW4xdUWw9MXoaVT6514896161WpZw'

OCR_URL = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic'

填入自己要获取课程知识点的课程名称

1
className = "python语言程序设计"

3.4 json数据转存

通过读取json数据 生成能够插入数据库的.sql文件

输入:知识点json文件

输出:基于课程的sql文件

3.4.1 使用方式

1
2
3
4
className = "python语言程序设计"
word_root = os.path.join(os.getcwd(), 'text')
classWordRoot = os.path.join(word_root, className)
sqlRoot = os.path.join(os.getcwd(), 'knowledgeSearch.sql')

在使用的时候 需要填入对应的className 和sqlroot 想要生成的sql文件名称

4. 数据库展示

本次的数据库 展示使用的是 jeecgboot来完成我们的数据库展示的功能

其具体的开发开发文档:http://jeecg.com/

比较好的视频文档:https://www.bilibili.com/video/BV1V34y187Y9

展示功能完成了 基于 classname topic main的查询功能

完成了基础的增删改

且能够导入导出exel文档来进行查阅