毕设开源 深度学习语义分割实现弹幕防遮(源码分享)

文章目录

  • 0 简介
  • 1 课题背景
  • 2 技术原理和方法
    • 2.1基本原理
    • 2.2 技术选型和方法
  • 3 实例分割
  • 4 实现效果
  • 最后

0 简介

今天学长向大家分享一个毕业设计项目

毕业设计 深度学习语义分割实现弹幕防遮(源码分享)

🧿 项目分享:见文末!

1 课题背景

弹幕是显示在视频上的评论,可以以滚动、停留甚至更多动作特效方式出现在视频上,是观看视频的人发送的简短评论。

各大视频网站目前都有弹幕功能,之家也于2020年5月正式上线视频弹幕功能,受到了广大网友的喜爱,大家在观看视频的同时,也能通过弹幕进行互动。

但密集的弹幕,遮挡视频画面,严重影响用户观看体验,如何解决?

查阅了相关视频网站,发现B站推出了一种蒙版弹幕技术,可以让弹幕自动躲避人形区域,达到弹幕不挡人的效果。
B站视频弹幕不挡人的效果

2 技术原理和方法

2.1基本原理

通过AI计算机视觉的技术,对视频内容进行分析,并将之前已经定义好的“视频主体内容”进行识别,生成蒙版并分发给客户端后,让客户端利用 CSS3 的特性进行渲染从而达成最终的效果。这样就形成了我们最终看到的,“不挡脸”弹幕效果。

实现方法就正如 PS 中的“蒙版“一样,实心区域允许,空白区域拒绝,从而达到弹幕不挡人的效果。而技术的核心就在蒙版的生成上,所以将这个功能称之为“蒙版弹幕”。

2.2 技术选型和方法

1、提取视频帧画面。对音视频的处理,大家一般都会想到FFmpeg组件,我们也是使用FFmpeg组件提取每帧的视频画面,使用的是PyAV组件,PyAV是FFmpeg封装,能够灵活的编解码视频和音频,并且支持Python常用的数据格式(如numpy)。

2、识别视频帧画面人像区域。解决方案:使用AI计算机视觉的实例分割技术,可以识别视频帧画面的人像区域。

3、AI框架:目前市面上的AI框架,主要以TensorFlow,PyTorch最流行。

  • TensorFlow:出身豪门的工业界霸主,由Google Brain团队研发。具有如下优点:支持多种编程语言;灵活的架构支持多GPU、分布式训练,跨平台运行能力强;自带TensorBoard组件,能可视化计算图,便于让用户实时监控观察训练过程;官方文档非常详尽,可查询资料众多;社区庞大,大量开发者活跃于此。
  • PyTorch:以动态图崛起的学术界宠儿,是基于Torch并由Facebook强力支持的python端的开源深度学习库。具有如下优点:简洁:PyTorch在设计上更直观,追求尽量少的封装,建模过程透明,代码易于理解;易用:应用十分灵活,接口沿用Torch,契合用户思维,尽可能地让用户实现“所思即所得”,不过多顾虑框架本身的束缚;社区:提供完整的文档和指南,用户可以通过全面的教程完成从入门到进阶,有疑问也可以在社区中获得各种及时交流的机会。我们的选择:PyTorch。原因:TensorFlow入门难度较大,学习门槛高,系统设计过于复杂;而PyTorch入门难度低,上手快,而且提供的功能也非常易用,预训练模型也非常多。

4、实例分割技术:实例分割(Instance Segmentation)是视觉经典四个任务中相对最难的一个,它既具备语义分割(Semantic Segmentation)的特点,需要做到像素层面上的分类,也具备目标检测(Object Detection)的一部分特点,即需要定位出不同实例,即使它们是同一种类。

3 实例分割

简介
实例分割已成为机器视觉研究中比较重要、复杂和具有挑战性的领域之一。为了预测对象类标签和特定于像素的对象实例掩码,它对各种图像中出现的对象实例的不同类进行本地化。实例分割的目的主要是帮助机器人,自动驾驶,监视等。

实例分割同时利用目标检测和语义分割的结果,通过目标检测提供的目标最高置信度类别的索引,将语义分割中目标对应的Mask抽取出来。实例分割顾名思义,就是把一个类别里具体的一个个对象(具体的一个个例子)分割出来。

Mask R-CNN算法
本项目使用Mask R-CNN算法来进行图像实例分割。
网络结构图:

Mask R-CNN,一个相对简单和灵活的实例分割模型。该模型通过目标检测进行了实例分割,同时生成了高质量的掩模。通常,Faster R-CNN有一个用于识别物体边界框的分支。Mask R-CNN并行添加了一个对象蒙版预测分支作为改进。使用FPN主干的head架构如图所示。

关键代码

##利用不同的颜色为每个instance标注出mask,根据box的坐标在instance的周围画上矩形 ##根据class_ids来寻找到对于的class_names。三个步骤中的任何一个都可以去掉,比如把mask部分 ##去掉,那就只剩下box和label。同时可以筛选出class_ids从而显示制定类别的instance显示,下面 ##这段就是用来显示人的,其实也就把人的id选出来,然后记录它们在输入ids中的相对位置,从而得到 ##相对应的box与mask的准确顺序 def display_instances_person(image, boxes, masks, class_ids, class_names, scores=None, title="", figsize=(16, 16), ax=None): """ the funtion perform a role for displaying the persons who locate in the image boxes: [num_instance, (y1, x1, y2, x2, class_id)] in image coordinates. masks: [height, width, num_instances] class_ids: [num_instances] class_names: list of class names of the dataset scores: (optional) confidence scores for each box figsize: (optional) the size of the image. """ #compute the number of person temp = [] for i, person in enumerate(class_ids): if person == 1: temp.append(i) else: pass person_number = len(temp) person_site = {} for i in range(person_number): person_site[i] = temp[i] NN = boxes.shape[0] # Number of person'instances #N = boxes.shape[0] N = person_number if not N: print("\n*** No person to display *** \n") else: # assert boxes.shape[0] == masks.shape[-1] == class_ids.shape[0] pass if not ax: _, ax = plt.subplots(1, figsize=figsize) # Generate random colors colors = random_colors(NN) # Show area outside image boundaries. height, width = image.shape[:2] ax.set_ylim(height + 10, -10) ax.set_xlim(-10, width + 10) ax.axis('off') ax.set_title(title) masked_image = image.astype(np.uint32).copy() for a in range(N): color = colors[a] i = person_site[a] # Bounding box if not np.any(boxes[i]): # Skip this instance. Has no bbox. Likely lost in image cropping. continue y1, x1, y2, x2 = boxes[i] p = patches.Rectangle((x1, y1), x2 - x1, y2 - y1, linewidth=2, alpha=0.7, linestyle="dashed", edgecolor=color, facecolor='none') ax.add_patch(p) # Label class_id = class_ids[i] score = scores[i] if scores is not None else None label = class_names[class_id] x = random.randint(x1, (x1 + x2) // 2) caption = "{} {:.3f}".format(label, score) if score else label ax.text(x1, y1 + 8, caption, color='w', size=11, backgroundcolor="none") # Mask mask = masks[:, :, i] masked_image = apply_mask(masked_image, mask, color) # Mask Polygon # Pad to ensure proper polygons for masks that touch image edges. padded_mask = np.zeros( (mask.shape[0] + 2, mask.shape[1] + 2), dtype=np.uint8) padded_mask[1:-1, 1:-1] = mask contours = find_contours(padded_mask, 0.5) for verts in contours: # Subtract the padding and flip (y, x) to (x, y) verts = np.fliplr(verts) - 1 p = Polygon(verts, facecolor="none", edgecolor=color) ax.add_patch(p) ax.imshow(masked_image.astype(np.uint8)) plt.show()

4 实现效果

原视频

生成帧蒙板

最终效果

最后

🧿 项目分享:见文末!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1018887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

44、TCP状态处理与Netlink套接字详解

TCP状态处理与Netlink套接字详解 1. TCP状态处理 在TCP通信中,状态处理是确保数据可靠传输的关键。当考虑是否能从恢复状态撤销时,下一步就是退出恢复状态。 1.1 退出恢复状态 Reno实现 :要退出恢复状态,需要对超过 tp → high_seq 的内容进行确认(ACK)。这样做是…

【Java毕设全套源码+文档】基于springboot的高校失物招领平台设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

AI大模型入门到精通:制造业应用实践,一篇搞定,建议收藏!

本文全面解析了AI大模型在制造业的应用,介绍了大模型的基本概念、核心赋能方式(直接赋能、场景化定制、任务化定制)和产品形态。文章分析了大模型的适用边界与核心能力,以及语言、专用、多模态和视觉四类模型在工业各环节的应用案…

毕设项目 yolo葡萄采摘护理定位辅助系统(源码+论文)

文章目录0 前言1 项目运行效果2 课题背景2.1. 葡萄种植产业现状2.2. 农业智能化转型需求2.3. 计算机视觉技术优势2.3.1 技术层面2.3.2 应用层面2.4. 项目创新价值2.5. 技术发展趋势3 设计框架3.1. 系统概述3.2. 技术架构3.2.1 整体架构3.2.2 核心技术栈3.3. 系统模块详解3.3.1 …

你的 QQ 藏着多少 “隐形价值”?这款评估工具太会玩了!

你的QQ藏着多少“隐形价值”?这款评估工具太会玩了! 作为陪伴无数人成长的社交账号,QQ早已不只是聊天工具,更承载着青春回忆与数字资产属性。你是否好奇过自己用了多年的QQ号到底值多少钱?今天就给大家推荐一款超有趣…

62、lkcd与TCP/IP栈调试全解析

lkcd与TCP/IP栈调试全解析 1. lkcd源与补丁 lkcd源可从sourceforge.net获取。kerntypes是内核数据结构的数据库,在构建lkcd时生成。它和系统映射文件作为lcrash的参数。以下是启动lcrash程序的命令: - 在内核崩溃转储上启动: lcrash kerntypes core - file system.map在…

毕设项目 深度学习YOLOv5车辆颜色识别检测

文章目录1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练1 前言 🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长…

UE5 材质-38-节点:

(161) (162) (163) 谢谢

【Java毕设全套源码+文档】基于springboot的研究生志愿填报辅助系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

客户一聊就放松!3句“舒服话术”让成交水到渠成

销售工作的核心并非是去说服客户购买产品,而是要和客户建立起互相信任的关系;和客户聊天的目的也不是单纯地推销产品,而是要让客户愿意听你讲话,那些真正在情商方面表现出众的销售人员,懂得运用“让人感觉舒适的话术”…

国内优质酒店设计施工一体化公司推荐 - 品牌排行榜

国内优质酒店设计施工一体化公司推荐酒店设计施工一体化是将设计方案与施工执行统筹整合的服务模式,通过全流程协同提升项目效率、保障工程质量,同时实现责任主体统一,为业主减少沟通成本与风险。这种模式在酒店建设…

56、IP 过滤与防火墙技术解析

IP 过滤与防火墙技术解析 1. IP 过滤基础 在网络通信中,IP 过滤和防火墙起着至关重要的作用。TRACK 和 NF_IP_PRI_NAT_DST 可以针对相同的钩子编号和协议族进行注册,这意味着它们能够依据优先级存在于同一链中。其中,优先级为 NF_IP_PRI_CONNTRACK 的钩子会首先被处理,因…

好写作AI:别卷了,这算法能一键生成你憋了仨月的论文

深夜的实验室里,对着空白文档发呆的研究生小林,突然收到了一条AI生成的论文大纲。第二天,导师看着那份结构清晰、重点突出的初稿,破天荒地回复了三个字:“有点东西。” 这并非科幻场景。南京财经大学一项调研显示&…

好写作AI:给你的键盘装上“三头六臂”

当你还在为改稿发愁,在“学术严谨”和“语言风趣”之间反复横跳时,好写作AI已经用一套算法,让文本生成、润色和风格迁移这三件苦差事,像流水线一样丝滑地同时运转起来了。 对许多创作者来说,写作是一个线性过程&#x…

鸿蒙 Electron 进阶实战:分布式数据同步与多设备协同开发指南

在上一篇文章中,我们实现了鸿蒙与 Electron 的基础通信及原生能力调用,验证了两者融合的可行性。但在企业级全场景应用中,更核心的需求是分布式数据同步(如多端任务列表实时同步)和多设备协同(如 Electron …

【2025权威发布】高精度|高性能|进口光互联纳米制造设备解决方案,头部品牌企业推荐TOP3 - 品牌推荐大师1

光互联纳米制造设备,指的是用于制造和加工微米到纳米尺度光互连结构的专用设备和系统。简单来说,就是为了在芯片或光模块内部“搭建”极细微的“光路通道”,实现光信号高速传输所必需的精密加工工具。 为了让你快速…

好写作AI:别让你的论文逻辑再“左右横跳”了!

面对一篇由AI生成的、论点四处“闪现”、上下文关系比网红情侣还脆弱的文章,你是否也感到CPU都快烧了?逻辑连贯性,这个长期困扰AI写作的“阿喀琉斯之踵”,如今有了新的解法。 深夜,研究生小陈看着屏幕上一段AI生成的技…

鸿蒙 Electron 实战:集成鸿蒙推送服务与 Electron 应用消息通知全方案

在鸿蒙与 Electron 的融合开发中,跨端消息推送是企业级应用的核心需求之一。鸿蒙推送服务(Push Kit)能实现鸿蒙设备的高效消息触达,而将其与 Electron 桌面应用结合,可打造 “鸿蒙设备触发、Electron 端接收响应” 的全…

好写作AI:给你的键盘装个“副驾”,这波Transformer交互设计赢麻了!

深夜,你的手指悬在键盘上,对着空白文档第18次删掉刚写下的开头——这场景,像极了等待加载的进度条,卡在99%就是不动。直到光标旁,悄然浮现出第一行由AI写下的、与你心意相通的句子。 这不是魔法,而是好写作…

好写作AI:你的赛博翻译官,让中文写作秒变国际范儿!

深夜,上海某跨国公司的办公室里,李经理正对着屏幕上一份急需英译的项目报告发愁。传统的逐句翻译不仅耗时,那股“机翻味儿”更让他担心影响专业形象。此时,他尝试将中文初稿拖入好写作AI,点击“生成英文报告”。几秒后…