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

对b站弹幕进行数据分析 在4.0版本开始之前,原神的热度一直都处于比较低迷的状态,但是在原神序曲PV致终幕的欢宴发布后就获得了1千多万的播放量,所以很好奇玩家对这次的新版本有什么看法,有什么期待,都在说一些什么,所以使用python 对这次的视频进行了数据分析。总的来说,这次的新pv使得玩家对游戏的热情又得到了提升,大部分的玩家情绪值都是很高的,并且也可以看出现人气比较高的是水神,仆人。对收集到的数据进行存储,在存储过程中,我们需要把一些',','我'这些词进行筛选,这些词语对我们的分析并没有什么用。接下来对出现的词,进行计数。 阅读详情

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 实现效果

原视频
在这里插入图片描述
生成帧蒙板
在这里插入图片描述
最终效果
在这里插入图片描述

最后

🧿 项目分享:见文末!

人体解析任务 和 Look into Person数据集 (附源码分享 人体解析任务 人体解析(human parsing),属于语义分割任务的子任务,旨在对人类图像进行像素级的是细粒度分割(例如,划分出身体部位和服装)。根据不同的场景,又可以分为单人人体解析(single-person human parsing)和多人人体解析(multi-person human parsing,或者 instance-level human parsing)。除此之外,按照处... 阅读详情

相关推荐

【昇腾】用MindIE(服务化方式)拉起glm4-9b-chat模型问题解决

【昇腾】用MindIE拉起glm4-9b-chat模型问题解决: LLMInferEngine failed to init LLMInferModels ERR: Failed to init endpoint! Please check the service log or console output. Killed make sure the folder's owner has execute permission.

u014448841的博客 5061

毕业设计深度学习人体语义分割弹幕挡上的实现 - python

🚩 深度学习人体语义分割弹幕挡上的应用🥇学长这里给一个题目综合评分(每项满分5分)🧿 选题指导, 项目分享:https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md弹幕是显示在视频上的评论,可以以滚动、停留甚至更多动作特效方式出现在视频上,是观看视频的人发送的简短评论。各大视频网站目前都有弹幕功能,之家也于2020年5月正式上线视频

HUXINY的博客 1989

DolphinScheduler任务状态异常排查:从僵尸任务到数据库修复全流程

本文详细介绍了DolphinScheduler中僵尸任务的识别、诊断与修复全流程,包括数据库层面的SQL操作指南、系统恢复验证方法以及预措施。针对任务状态异常问题,提供了从基础排查到高级源码分析的完整解决方案,帮助运维人员有效管理系统资源和工作流调度。

weixin_27966471的博客 108

B站视频弹幕数据分析

B站视频弹幕分析

weixin_43351012的博客 4281

humanparsing自然场景人体语义分割

humanparsing自然场景人体语义分割+颜色识别

Anymake的专栏 5539

毕设项目 深度学习语义分割实现弹幕(源码分享)

今天学长向大家分享一个毕业设计项目毕业设计 深度学习语义分割实现弹幕(源码分享)🧿 项目分享:见文末!🧿 项目分享:见文末!

mabile123444的博客 944

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

今天学长向大家分享一个毕业设计项目毕业设计 深度学习语义分割实现弹幕(源码分享)🧿 项目分享:见文末!🧿 项目分享:见文末!

mabile123444的博客 1114

谈谈深度学习目标检测中的挡问题

引自:“别挡我,我要C位出道!”谈谈深度学习目标检测中的挡问题 - Naiyan Wang的文章 - 知乎 https://zhuanlan.zhihu.com/p/43655912   今天给大家介绍的两篇工作的目的都是试图解决目标检测中最为棘手的挡问题。两篇文章的作者分别从loss设计和two stage detector中最关键的操作ROI Pooling/Align出发来针对挡问...

sduati的专栏 1万+

Soft-NMS——解决目标挡问题 (目标检测)(one/two-stage)(深度学习)(ICCV 2017)

论文:《 Improving Object DetectionWith One Line of Code 》 论文下载:https://arxiv.org/abs/1704.04503 论文代码:https://github.com/bharatsingh430/soft-nms 算法解读: NMS(Non maximum suppression)是在object detection算法中...

星智云图工作室(StarImagine Studio) 8425

工程师&程序员的自我修养 Episode.6 深度学习实现人脸检测及人数统计项目

深度学习实现人脸检测及人数统计项目实现及代码示例 手动@王婆,自取不谢【doge】。 本项目利用Ultra-Light-Fast-Generic-Face-Detector-1MB模型完成人脸检测。该模型是针对边缘计算设备或低算力设备(如用ARM推理)设计的实时超轻量级通用人脸检测模型,可以在低算力设备中如用ARM进行实时的通用场景的人脸检测推理。 此处感谢参考部分来自@wangwei8638大佬的程序编写思路。 一、定义待预测数据 以本示例中文件夹下test_face_detection.jpg为待预测图

weixin_43833550的博客 770

paddleocr改写图片打印结果代码

paddleocr根据工业需求改写图片打印结果代码

jiaqihanhan的博客 1030

人工智能课程设计毕业设计——基于PSPNet的人体解析

PSPNet(Pyramid Scene Parsing Network)模型的提出是因为基于FCN的模型的主要问题是缺乏合适的策略来利用全局场景中的类别线索分割结果不够精细并且没有考虑上下文,即FCN模型注重的是图像的分辨率恢复问题,而PSPNet模型即是关注考虑上下文,获得图像的全局的视野。PSPNet模型主要是通过利用不同大小的池化来增大感受野的(Receptive Field),通过增大感受视野从而达到考虑上下文信息的目的。

weixin_47058355的博客 2626

mcu io模拟mdio控制phy代码

IO模拟MDIO时序,可读可写,项目抠出来的实用代码

上一篇: 毕设分享 大数据校园卡数据分析系统(源码+论文)
下一篇: 毕设开源 大数据抖音短视频数据分析与可视化(源码)
caxiou
博客等级 码龄5年 6106粉丝 · 823原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值