本文主要针对花屏提出了一种基于CNN网络的检测方案。

01

花屏检测能力构建

无论是视频还是直播,都是由一帧帧图像组成的,之所以会以一种动态的形式展现到我们眼前,是因为了人类的视觉暂留现象。

物体在快速运动时, 当人眼所看到的影像消失后,人眼仍能继续保留其影像0.1-0.4秒左右的图像,这种现象被称为视觉暂留现象

既然如此,检测直播中是否存在花屏,其实可以转换为检测直播中的帧画面是否是花屏的画面,即一个图像识别问题。那么如何识别一个图像是否是花屏呢?

通常图像识别总是以特征为基础的,我们会先根据所设定的目标来提取相应的特征,用于我们后面来制定策略。不过好在现在的深度学习卷积神经网络CNN将提取特征和制定决策策略都帮我们完成了。

而使用深度学习CNN网络则绕不开数据集模型训练两大块

1.1数据集准备

困难

要使用深度学习网络,一个门槛是需要足够的带有标签的数据集,否则**学习出的网络很容易过拟合,从而泛化能力不强。**说其是门槛是因为实际业务中更多情况是缺少数据集,就以现在的花屏为例,目前直播发生花屏的案例非常少,想要通过实际案例来收集足够的花屏图片作为训练集显得异常困难。因此必须探寻其他的路子来收集训练集。

人类之所以能够分辨出花屏,是因为人类眼睛能够找到花屏图像的特征,虽然这些特征我们可能用语言都描述不出来,事实上,如果我们能用语言描述出特征,我们也很容易将其翻译成代码来找到花屏图像的特征。

制作训练集

机器学习其实也是通过特征来工作的,既然如此,我们可以制作一些花屏图像出来,让CNN网络找到它们区别于正常图片的特征,从而学习到花屏图片的检测能力。

在使用YUVviewer工具时,发现当设置错误的分辨率来播放视频文件时会出现花屏情况。灵感来源于此,我们完全可以通过使用错误的分辨率从YUV文件中抽取帧,从而拿到花屏图片。整体流程如下:

这里需要了解YUV文件的存储格式,从而根据格式来进行抽取对应的帧:

YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

YUV采样样式有一下几种,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量,一般情况下我们都使用的是YUV420格式

YUV420格式存储方式如下所示:

按照上面存储方式编写代码来提取帧,代码如下:

def get_frames_from_YUV(filename, dims, numfrm, startfrm, frmstep):"""从给定的YUV文件中抽取对应的帧数据,帧数据格式仍然为YUV:param filename: YUV文件路径:param dims: YUV文件的分辨率:param numfrm: 要提取帧的数量:param startfrm: 从哪一帧开始提取:param frmstep: 抽取帧的帧间隔,即每隔几帧抽一帧:return: 返回抽取帧的Y列表,U列表,V列表"""filesize = os.path.getsize(filename)fp = open(filename, 'rb')blk_size = prod(dims) * 3 / 2     # 计算每帧大小if (startfrm+1+(numfrm-1)*frmstep)*blk_size > filesize:numfrm = (filesize/blk_size - 1 - startfrm)/frmstep +1util.log('文件读取越界--修改为%d'%numfrm)fp.seek(blk_size * startfrm, 0)   # 跳转到指定开始帧Y, U, V= [],[],[]d00 = dims[0] / 2d01 = dims[1] / 2for i in range(numfrm):util.log('文件读取第%d帧' % i)Yt = zeros((dims[1], dims[0]), uint8, 'C')Ut = zeros((d01, d00), uint8, 'C')Vt = zeros((d01, d00), uint8, 'C')for m in range(dims[1]):for n in range(dims[0]):# print m,nYt[m, n] = ord(fp.read(1))for m in range(d01):for n in range(d00):Ut[m, n] = ord(fp.read(1))for m in range(d01):for n in range(d00):Vt[m, n] = ord(fp.read(1))Y = Y + [Yt]U = U + [Ut]V = V + [Vt]fp.seek(blk_size * (frmstep - 1), 1)   # 跳出间隔帧fp.close()return (Y, U, V)

这里对分辨率错误的多种情况也做了下研究,发现如下规律:

1)分辨率正确

2)分辨率width+1情况

3)分辨率width+n情况

4)分辨率width-1情况

5)分辨率width-n情况

上面只是针对图片宽来进行错误干扰,可以看出宽变小花屏条纹方向是左下的,宽变大花屏条纹方向时右下的。

所以我们队宽和高分别设置不同的错误值,会造成不同类型的花屏,于是可以用这种策略构造大量的花屏。

我们用800多个视频,每个视频以一定的间隔来抽10帧,获得了8000多张花屏图片。

这些图片标签为花屏,也就是我们的正样本,负样本可选取实际直播中的正常截图。

至此,数据集准备差不多了。

1.2 模型和训练

模型上使用网上一些知名模型即可,这里我们使用了轻量的mobilenet模型,模型结构如下图所示:

训练采用基于用imagenet已经训练好的模型来进行finetune训练,最后一层使用随机超参数来训练(这一层也无法读取pretrained模型的超参数,因为分类数不一致)。训练可以快速收敛,因为特征太明显了,而且测试集准确率很高。

其实这里训练是一个不断迭代的过程,因为机器学习模型是一张白纸,它要具有怎样的能力完全是你教它的,而教的方式就是通过训练集(数据和标签),而想要让它能够应对更多的情况,你的训练集就要尽可能涵盖各种情况。

而我们的训练集总是不足的,你总会有care不到的地方。训练集不足的情况会怎样?举个例子

你训练个识别飞机的模型,而大部分关于飞机的图片都有天空,这样你给张天空的图片到模型,它也可能会认为是飞机,因为其实模型很可能学到的是天空的特征。而怎么让模型学到飞机的特征呢,当然需要调整训练集,让训练集里不仅包含背景为天空的飞机,还有陆地上的飞机等等。

通过不断低迭代调优,我们在空间场景下检测准确率已经可以达到94%,NOW直播场景检测准确率也已达到90%。

02

直播检测方案

检测能力具备后想要真正地接入直播业务,还需要将直播流进行分帧,然后把对应的帧图片进行花屏检测。

后台整体框架

采用分帧截屏的手段,如果每天需要检测2000万张截图,即10s会有一张截图需要检测,而考虑花屏总是出现在很长的一段时间内,因此这里希望能够以更长的时间来抽样从而避免浪费算力。

附一张目前业务检测花屏结果的截图:

直播代码如何在直播中解决花屏问题?相关推荐

  1. 如何在直播中解决黑屏、花屏、闪屏问题 | 直播疑难杂症排查

    首先我们要明白,黑屏.花屏.闪屏等问题,可能是推流端的问题,也可能是播放器的问题,遇到这些现象,我们要第一时间用别的播放器(如 VLC,ffplay)试试,如果都出现同样的问题,那么多半是流本身的问题 ...

  2. 如何在直播中解决黑屏、花屏、闪屏问题

    如何在直播中解决黑屏.花屏.闪屏问题 参考文章: (1)如何在直播中解决黑屏.花屏.闪屏问题 (2) 直播疑难杂症排查 备忘一下.

  3. 播放器实战22 解决花屏与卡顿问题

    1.内存对齐 1.1什么是内存对齐 在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int.long.float等)的变量,也可以是一些复合数据类型(如数组.结构.联合等)的数据 ...

  4. [Linux]Ubuntu安装vnc并解决花屏问题

    原创文章,欢迎转载.转载请注明:转载自 祥的博客 原文链接:https://blog.csdn.net/humanking7/article/details/105203744 文章目录 @[toc] ...

  5. ubuntu安装后在操作过程中出现花屏、纯色屏问题

    ubuntu安装后在操作过程中出现花屏.纯色屏问题 ubuntu经常会出现一些奇怪的问题,这次的问题是在安装好系统并正常进入系统后,能进行简短的操作,间隔十几秒后就会出现花屏或者其他纯色屏的现象.经过 ...

  6. 山寨机java自动发短信_恶搞短信附带代码 山寨手机最容易中招黑屏

    恶搞短信附带代码 山寨手机最容易中招黑屏 2012-03-27 13:49:34  来源:钱江晚报 扫码可以: 1.在手机上浏览 2.分享给微信好友或朋友圈 摘要: 用一条短信就能让你手机" ...

  7. 电脑花屏是怎么回事(使用过程中出现花屏,该如何处理?)

    电脑花屏是怎么回事(使用过程中出现花屏,该如何处理?) 在电脑使用的过程中,会遇上各种各样的问题,往往不知道如何来处理,也不敢乱动手,今天我们就来说说:在电脑开机时出现花屏或者在使用过程中出现花屏,我 ...

  8. 用户的眼睛没毛病!10 分钟搞明白如何在直播中解决黑屏、花屏、闪屏问题

    「黑屏.花屏.闪屏」经常出现在直播应用中,除了网络问题,在直播过程中的黑屏.花屏.闪屏却有很多技术原因,这篇文章将全方位为你解决直播中的「黑屏.花屏.闪屏」问题. 继<直播技术详解>系列文 ...

  9. 网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient...

    前言 最近在项目中遇到一个奇怪的问题,同样的SDK调用,访问海康摄像机的RTSP流,发保活OPTIONS命令保活,一个正常,而另一个一发就会被IPC断开,先看现场截图: 图1:发OPTIONS,摄像机 ...

最新文章

  1. golang 读取 文件指定行内容
  2. Linux C编程--进程介绍5--system函数
  3. 离线轻量级大数据平台Spark之MLib机器学习库概念学习
  4. java计算整数出现的次数_[剑指offer题解][Java]1到n整数中1出现的次数
  5. repcached配置与简单測试
  6. vba与python相比2019_重大改变!Python 或将取代 VBA 成为 Excel 官方脚本语言
  7. 卷积神经网络中的池化方法(pooling)总结
  8. “围棋人机大战”唯一人类的胜利记录将被制作成NFT进行拍卖
  9. java导出sas_[转载]SAS Proc Export导出文件
  10. 北师大计算机专业保研率,师范类高校保研情况,3所学校保研率超20%,北师大最高达到35%...
  11. 计算机打印机图标删除吗,故障之:打印图标消失及打印任务无法取消
  12. matlab实现通信系统,香农定理的介绍
  13. Matlab求一阶导数
  14. 大话2口袋版不显示服务器,大话西游2新口袋版操作指引及常见问题说明
  15. 如何零成本实现微信公众号自助查券返利机器人(五)
  16. 构造和析构函数调用顺序
  17. 千亿级金融场景下,基于Pulsar的云原生消息队列有怎样的表现?
  18. 计算机丢失Uxteme,xp系统开机显示uxtheme.dll丢失的恢复教程
  19. 中科大计算机考研英语,中科大计算机考研复试英语.doc
  20. 土豪老板如何用互联网思维在商学院追美女

热门文章

  1. 前端基础(8):javascript 基础语法(2)--实例与显示
  2. AI技术人来看!小红书整活儿了
  3. latex beamer 空一行_全新透明设计联想拯救者电竞手机Pro至尊透明版 钛空无垠图赏...
  4. 分享一首诗,不敲代码的时候,也要将生活过的有诗意
  5. docker构造php执行环境
  6. LeetCode刷题整理——背包问题
  7. 商品防伪二维码是什么?
  8. 告别传统繁杂的采购合同管理 打造企业自动化采购管理模式
  9. 安卓玩机搞机技巧综合资源-----修复基带 改串码 基带qcn 改相关参数 终结贴【二十】
  10. 这所985高校6年招聘8000多青年人才引热议!高校割起年轻博士的韭菜有多疯狂?...