1.前言

上周是第一个上课周,其中一门“中国马克思主义与当代”(这里可能更应该用书名号)课程成功的引起了我的注意,这门课的主讲老师不但幽默风趣,知道超多的梗,而且为人十分直率。他开宗明义的指出凡是如下图所示的蓝色直角方框的PPT页,都将是本课程的重点

然而老师表示不会分享PPT,但允许拍照。根据一般经验,这种课程最早也要考试前两周启动复习,届时这种重点PPT的照片积攒下来可能多达几十张甚至上百张,如果到时候逐一翻看,显然效率不高。

因此我们想到,能否通过现有的一些技术,如OCR等对这些照片进行统一的识别及提取,从而快速识别整理出本课程的重点。

在本次实验中我们尝试了tesseract OCR、QQ截屏提供的OCR以及百度aip平台上的OCR,发现直接使用效果并不理想,因此设计了两阶段的方式,引入了YOLOv3(v4 v5还没看过,先用v3好了)进行第一阶段的检测定位,然后再对每个检测目标进行第二阶段OCR识别,将结果加以整理。

2.一些常见的OCR

目前常见的OCR工具有汉王、Tesseract、百度Aip等工具。经过测试,Tesseract的中文识别十分糟糕,这里就不做展示了,Tesseract似乎是可以支持训练的,但我并没那个闲工夫,于是放弃了Tesseract。

下面是百度Aip平台提供的OCR接口的效果图。

可以看到Aip对汉字的识别相当不错,基本能框定所有汉字。但同时也会造成一些误解,如把左侧的一排开关误认为是字符,以及右侧黑板上的字母,实际上这虽然是字符,但并非我们想要的内容。

QQ TIM也提供了截屏文字识别,目测效果还赶不上百度。

3.使用YOLO(v3)进行目标检测的准备工作

YOLO版本的不断升级和各类网络版本的实现都使得使用YOLO变得简单。目前YOLOv5已经推出了,但我怎么了解v4v5,感觉v3效果还行,勉强能达到目标。

这里我们采用darknet实现的YOLOv3,这是因为darknet基本是由C语言编写的,所需依赖比较少,在windows上需要安装并配置OpenCV(安装配置很简单,不再赘述,注意拷贝dll文件到System32目录下),如果需要GPU,有CUDA环境就可以了。GitHub链接如下。
yolo darknet

我是在windows上实验的,因此需要进入build/darknet目录下,显然.sln文件是visual studio的工程文件,所以强烈推荐使用Visual Studio!默认的darknet.sln是GPU版本,如果没有GPU的话就打开darknet_no_gpu.sln就好了。

打开之后,直接生成项目,一般来说不会报错,可以顺利在x64文件夹中找到生成的可执行文件,如下图红框所示。


在使用YOLOv3前,还需要准备模型文件,上网下载就可以啦,很容易找到,比如百度云链接。
同时注意上图蓝色框部分,可以根据这个脚本输入命令,用notepad打开后其中内容是

darknet.exe detector test cfg/coco.data yolov3.cfg yolov3.weights -i 0 -thresh 0.25 dog.jpg

标准的命令格式应该是

darknet.exe detector [train/test/valid/demo/map] [data] [cfg] [weights (optional)]

我们尝试直接双击这个cmd文件,会得到默认的检测图片结果。

4.制作数据集进行训练

制作数据集,本文不展开介绍了,可以参考知乎大佬的这篇文章。我的数据集只有四张图片,但事实证明够用了,YOLO预训练模型上训练我的数据集,学习能力很强。
有几个大坑需要在此提及一下!
首先是编写cfg文件的时候,需要注意,训练和检测所用的cfg在batch和subdivision两个参数上是不同的,yolov3的cfg文件也用注释指出了。

在测试阶段,两个参数都必须是1,而训练阶段推荐使用64/16 的参数。另一个大坑就是,千万不要用CPU训练,有GPU一定要用GPU,没有GPU也要创造GPU。使用CPU可以自行想象如下画面

一般此处倾向于使用大型linux服务器来完成训练。在linux上使用darknet更加简单,大致步骤如下。

1)首先下载项目

git clone https://github.com/AlexeyAB/darknet.git

2)修改Makefile
启用GPU,将此参数设为1

同时配置CUDA的位置,如果你的CUDA不在/usr/local/cuda,必须要手动配置,否则不用。总共有三处要修改,见下图


3)编译
直接make就行,可能会有很多warning,但一般不会出错,可以顺利得到可用gpu的darknet可执行文件。

4)训练
按照如下格式就可以了,我的数据集就叫marx

./darknet detector train data/marx.data cfg/yolov3-marx.cfg_train darknet53.conv.74

值得注意的是,许多大型服务器上,并不运行直接在终端提交命令,如果强行提交,也可能会找不到CUDA环境而退出。比较优雅的方式是以作业的形式提交任务,并不断查看作业的运行情况,当然这需要服务器本身提供作业调度。

5)耐心等待
我是某天晚上提交了作业,然后就去睡觉了,第二天还没结束,原来是因为cfg文件中预设的最大轮数太大了。

不过每经过一定轮数,darknet会自动保存模型在backup中,所以直接退出就好了。

其中xxx_last.weights 就是最终的模型文件,我们用它对一张不在训练集中的图片进行测试,得到如下效果图。

可以看到模型能够成功标定title(标题)和option(要点)。通过对这些区域单独做OCR识别,就可以很轻易地整理出这门课的重点了。

5.结果展示

关于怎样将目标检测的结果和OCR实现对接,此处不赘述了,代码写的也比较乱,准确的说是非常糟糕,但总能完成任务。最终整理的第一节课的重点如下:

========================
问:什么是当代
1.人类社会进入21世纪以来
2.科学社会主义焕发生机
3.特别是党的十八大以来
4.拓展了发展中国家的现代化路径
5.中国特色社会主义进入新时代
========================
一,当代世界正处于大发展大变革大调整时代机遇与挑战
1.思想文化交流交融交锋
2.生态环境问题
3.经济全球化深入发展
4.科学技术迅猛发展
5.世界多极化
6.人类社会加速转型
========================
二、和平、发展、合作、共赢的时代潮流更加强劲
1.中国走和平发展道路
2.全球命运与共各国相互依存
3.全球性矛盾和挑战也不断增
4.但决不放弃正当权益
========================
三、中国日益走近世界舞台中央所面临的复杂形势
1.世界格局中的稳定器
2.推动世界和平发展
3.贡献世界经济与转型高质量增长
4.中国“威胁论”与单边主义势力
========================
一、中国发展的新的历史方位思考1:“不平衡”和“不充分”有什么区别?思考2:“两个一百年”指的是什么?
1.发展阶段
2.奋斗目标
3.主要矛盾
4.国际环境
========================
中国特色社会主义进入新时代的重大意义
1.于己:伟大复兴前景
2.于世界:发展中国家的经验
3.于理:科学社会主义
4.于他人:打破普世模式
========================
中国推动构建人类命运共同体四个共
1.共同发展
2.共建发展
3.共商发展
4.共享发展
========================

6.总结

随着YOLO版本的发展,其检测能力不断提高,可应用性也大幅增强。YOLO也可以作为许多任务的前序步骤,如在本实验中,我们用于精确划定OCR的区域,对提高最终结果的精确度起到了重要作用。同时我们注意到CPU和GPU在训练darknet时速度差距十分巨大,因此在完成类似训练任务时,应当尽可能使用GPU进行训练,缩短训练时间。

另外,本实验最终结果显示,所谓“重点”,仍是一些大纲性质的内容,远不足以在考试中取得好成绩。要取得理想的考试成绩,出了了解重点大纲,还要认真学习课程本身,要对课本有一定了解。

科学学习《中国马克思主义与当代》——YOLOv3+AipOCR的PPT重点解析相关推荐

  1. 智慧树知到网课中国马克思主义与当代课后所有章节测试答案

    智慧树知到网课<中国马克思主义与当代>课后章节测试答案 绪论 第一章:进入新时代的中国与当代世界 第二章:当代世界经济 第三章:当代世界政治 第四章:当代世界文化 第五章:当代社会问题 第 ...

  2. (数据科学学习手札61)xpath进阶用法

    一.简介 xpath作为对网页.对xml文件进行定位的工具,速度快,语法简洁明了,在网络爬虫解析内容的过程中起到很大的作用,除了xpath的基础用法之外(可参考我之前写的(数据科学学习手札50)基于P ...

  3. 数据科学学习心得_学习数据科学

    数据科学学习心得 苹果 | GOOGLE | 现货 | 其他 (APPLE | GOOGLE | SPOTIFY | OTHERS) Editor's note: The Towards Data S ...

  4. 数据科学学习心得_学习数据科学时如何保持动力

    数据科学学习心得 When trying to learn anything all by yourself, it is easy to lose motivation and get thrown ...

  5. 高效能码农的自我修养:5本书教你怎样科学学习,拒绝无用功

    导读:作为一枚苦逼的码农,你需要学习很多东西.但在开始的开始,你学会学习了吗?科学.高效的学习方法,会让你事半功倍.今天书单姐推荐5本书,为你带来26种黄金学习法则.11个高效能学习习惯.效率加法的2 ...

  6. Python数据科学学习进阶

    Python菜鸟到Python Kaggler 如果你梦想成为一名数据科学家,或者已然是数据科学家的你想扩展自己的工具库,那么,你找对地方啦.本文旨在为做数据分析的Python人提供一条全方位的学习之 ...

  7. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

  8. 5个增加数据科学学习的技巧

    通过关注这5件事来提高你的学习曲线,而不是参加更多的在线课程. 本文来自Julia Nikulski 许多指南都会给一些建议,说明如何开始数据科学:要上哪些在线课程,为你的投资组合实施哪些项目,以及要 ...

  9. 【深度学习】目标检测之YOLOv3算法

    [深度学习]目标检测之YOLOv3算法 YOLO系列目标检测算法官方代码 YOLOv3 网络结构 anchor的编解码 损失函数 binary cross-entropy loss AP(Averag ...

最新文章

  1. 使用Remix编译和部署以太坊智能合约
  2. K-Means算法理论及Python实现
  3. 初探System.Threading.Channels
  4. slot属性值_深入理解vue中的slot与slot
  5. 网页中文乱码--UTF-8和GB2312互转
  6. 润乾报表使用问题总结
  7. 微软北京.NET俱乐部免费活动(2010年7月18日)–Visual Studio 2010 敏捷开发与云计算Azure...
  8. 网络爬虫与HTTP协议
  9. Git分支基本命令+coding webhook+lnmp
  10. 线性回归--深度学习
  11. 博瑞GE博越缤瑞缤越车机安装任意APP第三方软件教程
  12. 基于python mediapipe的视频或者图片更换背景
  13. 817考研c语言程序设计,2017年沈阳航空航天大学计算机学院817程序设计[专业硕士]考研题库...
  14. 67. 把字符串转换成整数
  15. 爬虫漫游指南:HTTP/2 网站爬取
  16. 电路中极性与非极性电容并联的作用
  17. python中tile的用法_Python numpy.tile函数方法的使用
  18. 关于百度云在线视频加速的解决方法(不用另外软件)
  19. matlab绘图之自定义色标colorbar的刻度值
  20. CMDB开发之基础搭建

热门文章

  1. 深入理解MySQL——关于checkpoint机制
  2. Messenger的具体应用
  3. python读取word文档中的换行_Python读取Word
  4. 360急速浏览器和Google浏览器还是有差别的
  5. 21岁老总自杀:一个人需要为自己而活
  6. 爬虫第1课,手把手教你,批量爬取高清壁纸
  7. h3c 链路聚合测试_链路聚合技术
  8. linux查看网络链路,linux网络链路测试
  9. 阿里数据迁移工具 - 愚公
  10. linux查看硬盘使用情况什么意思,linux 查看硬盘使用情况