Python编程实现小姐姐跳舞并生成词云视频示例

目录
  • 制作过程分为以下几个部分
    • 1、视频下载
    • 2、B 站弹幕下载
    • 3、视频切帧,人像分割
    • 4、对分割后的图像制作词云图
    • 5、图片拼接,合成视频
  • 最后

Python做了一个词云视频,以另一种角度来看小姐姐跳舞

制作过程分为以下几个部分

1、视频下载

首先需要下载一个小姐姐跳舞的视频,这里我用的是 you-get 工具,可借助 Python 的 pip 命令进行安装

pip install you-get

you-get 支持下载平台包括:Youtube、Blili、TED、腾讯、优酷、爱奇艺(涵盖所有视频平台下载链接),

以 youtube 视频为例,you-get 下载命令

you-get -o ~/Videos(存放视频路径) -O zoo.webm(视频命名) 'https://www.youtube.com/watch?v=jNQXAC9IVRw'

这里通过 os 模块来实现 you-get 下载命令,使用时传入三个参数即可:

1,视频链接,

2,要存放视频的文件路径;

3,视频命名;

def download(video_url,save_path,video_name):
   '''
   youget 下载视频
   :param video_url:视频链接
   :param save_path: 保存路径
   :param video_name: 视频命名
   :return:
   '''
   cmd = 'you-get -o {} -O {} {}'.format(save_path,video_name,video_url)
   res = os.popen(cmd,)
   res.encoding = 'utf-8'
   print(res.read())# 打印输出

关于 you-get 更多用法, 可参考官网,里面关于用法介绍的非常详细:

https://you-get.org/#getting-started

2、B 站弹幕下载

做词云图需要有文本数据支持,这里选取 B 站弹幕为素材;关于 B 站视频弹幕下载方式,这里一个快捷方法,用 requests 访问指定视频的 API 接口,就能得到该视频下的全部弹幕

http://comment.bilibili.com/{cid}.xml # cid 为B站视频的cid 编号

但 API 接口的构造,需要知道视频的 cid 编号

B站视频 cid 编号获取方式:

F12打开开发者模式->NetWork->XHR->v2?cid=… 链接 ,该网页链接中有一个”cid=一串数字“ 的字符串,其中等号后面的连续数字就是该视频的 cid 编号

以上面视频为例,291424805 就是这个视频的 cid 编号,

有了 cid 之后,通过 requests 请求 API 接口,就能获取到里面的弹幕数据

http://comment.bilibili.com/291424805.xml

def download_danmu():
    '''弹幕下载并存储'''
    cid = '141367679'# video_id
    url = 'http://comment.bilibili.com/{}.xml'.format(cid)
    f = open('danmu.txt','w+',encoding='utf-8') #打开 txt 文件
    res = requests.get(url)
    res.encoding = 'utf-8'
    soup = BeautifulSoup(res.text,'lxml')
    items = soup.find_all('d')# 找到 d 标签
    for item in items:
        text = item.text
        print('---------------------------------'*10)
        print(text)
        seg_list = jieba.cut(text,cut_all =True)# 对字符串进行分词处理,方便后面制作词云图
        for j in seg_list:
            print(j)
            f.write(j)
            f.write('\n')
    f.close()

3、视频切帧,人像分割

下载到视频之后,先把视频拆分成一帧一帧图像;

vc = cv2.VideoCapture(video_path)
    c =0
    if vc.isOpened():
        rval,frame = vc.read()# 读取视频帧
    else:
        rval=False
    while rval:
        rval,frame = vc.read()# 读取每一视频帧,并保存至图片中

        cv2.imwrite(os.path.join(Pic_path,'{}.jpg'.format(c)),frame)
        c += 1
        print('第 {} 张图片存放成功!'.format(c))

对每一帧中的小姐姐进行识别提取,也就是人像分割,这里借助了百度 API 接口,

APP_ID = "23633750"
    API_KEY = 'uqnHjMZfChbDHvPqWgjeZHCR'
    SECRET_KEY = '************************************'
    client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)
    # 文件夹
    jpg_file = os.listdir(jpg_path)
    # 要保存的文件夹
    for i in jpg_file:
        open_file = os.path.join(jpg_path,i)
        save_file = os.path.join(save_path,i)
        if not os.path.exists(save_file):#文件不存在时,进行下步操作
            img = cv2.imread(open_file)  # 获取图像尺寸
            height, width, _ = img.shape
            if crop_path:# 若Crop_path 不为 None,则不进行裁剪
                crop_file = os.path.join(crop_path,i)
                img = img[100:-1,300:-400] #图片太大,对图像进行裁剪里面参数根据自己情况设定
                cv2.imwrite(crop_file,img)
                image= get_file_content(crop_file)
            else:

                image = get_file_content(open_file)
            res = client.bodySeg(image)#调用百度API 对人像进行分割
            labelmap = base64.b64decode(res['labelmap'])
            labelimg = np.frombuffer(labelmap,np.uint8)# 转化为np数组 0-255
            labelimg = cv2.imdecode(labelimg,1)
            labelimg = cv2.resize(labelimg,(width,height),interpolation=cv2.INTER_NEAREST)
            img_new = np.where(labelimg==1,255,labelimg)# 将 1 转化为 255
            cv2.imwrite(save_file,img_new)
            print(save_file,'save successfully')

将含有人像的图像转化为二值化图像,前景为人物,其余部分为背景

API 使用之前需要用自己账号在百度智能云平台创建一个 人体分析 应用,里面需要三个参数:ID、AK、SK

关于百度 API 使用方法,可参考官方文档资料

4、对分割后的图像制作词云图

根据步骤 3 中得到了小姐姐 人像 Mask,

借助 wordcloud 词云库和采集到的弹幕信息,对每一张二值化图像绘制词云图(在制作之前,请确保每一张都是二值化图像,全部为黑色像素图像需要剔除)

word_list = []
    with open('danmu.txt',encoding='utf-8') as f:
        con = f.read().split('\n')# 读取txt文本词云文本
        for i in con:
            if re.findall('[\u4e00-\u9fa5]+', str(i), re.S): #去除无中文的词频
                word_list.append(i)
    for i in os.listdir(mask_path):
        open_file = os.path.join(mask_path,i)
        save_file = os.path.join(cloud_path,i)
        if not os.path.exists(save_file):
            # 随机索引前 start 频率词
            start = random.randint(0, 15)
            word_counts = collections.Counter(word_list)
            word_counts = dict(word_counts.most_common()[start:])
            background = 255- np.array(Image.open(open_file))
            wc =WordCloud(
                background_color='black',
                max_words=500,
                mask=background,
                mode = 'RGB',
                font_path ="D:/Data/fonts/HGXK_CNKI.ttf",# 设置字体路径,用于设置中文,

            ).generate_from_frequencies(word_counts)
            wc.to_file(save_file)
            print(save_file,'Save Sucessfully!')

5、图片拼接,合成视频

词云图全部生成完毕之后,如果一张一张图像看肯定没意思,如果把处理后的词云图合成视频会更酷一点!

为了视频前后对比效果这里我多加了一个步骤,在合并之前先对原图和词云图进行拼接,合成效果如下:

 num_list = [int(str(i).split('.')[0]) for i in os.listdir(origin_path)]
    fps = 24# 视频帧率,越大越流畅
    height,width,_=cv2.imread(os.path.join(origin_path,'{}.jpg'.format(num_list[0]))).shape # 视频高度和宽度
    width = width*2
    # 创建一个写入操作;
    video_writer = cv2.VideoWriter(video_path,cv2.VideoWriter_fourcc(*'mp4v'),fps,(width,height))
    for i in sorted(num_list):
        i = '{}.jpg'.format(i)
        ori_jpg = os.path.join(origin_path,str(i))
        word_jpg = os.path.join(wordart_path,str(i))
        # com_jpg = os.path.join(Composite_path,str(i))
        ori_arr = cv2.imread(ori_jpg)
        word_arr = cv2.imread(word_jpg)
        # 利用 Numpy 进行拼接
        com_arr = np.hstack((ori_arr,word_arr))
        # cv2.imwrite(com_jpg,com_arr)# 合成图保存
        video_writer.write(com_arr) # 将每一帧画面写入视频流中
        print("{} Save Sucessfully---------".format(ori_jpg))

再加上背景音乐,视频又能提升一个档次~

最后

关于视频中的素材,特此声明

弹幕取自B站 Up 主 半佛仙人《【半佛】你知道奶茶加盟到底有多坑人吗?》

小姐姐跳舞视频取自Youtube Channel Lilifilm Official 《LILI's FILM #3 - LISA Dance Performance Video》

最后,感谢大家的阅读,我们下期见~

更多关于Python实现跳舞词云视频的资料请关注我们其它相关文章!

(0)

相关推荐

  • 用python做个代码版的小仙女蹦迪视频

    目录 前言 一.核心功能设计 二.实现步骤 1. 下载视频 2. 截取GIF并转换成ASCII字符 3. GIF重命名 4. gif转换为图片jpg 5. 合成代码舞视频 6. 添加背景音乐 前言 最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿遍又亿遍,久久不能离开! 看着仙紫小姐姐的蹦迪视频,除了一键三连还能做什么?突发奇想,能不能把小仙女的蹦迪视频转成代码舞呢? 说干就干,今天就手把手教大家如何把跳舞视频转成代码舞,跟着仙女姐姐一起蹦起来~ 视频来源:[紫颜]见过仙女蹦迪吗 [千盏]

  • 用Python做一个哔站小姐姐词云跳舞视频

    目录 一.前言 二.实现思路 1. 下载视频 2. 获取弹幕内容 3. 从视频中提取图片 4. 利用百度AI进行人像分割 5. 小姐姐跳舞词云生成 6. 合成跳舞视频 7. 视频插入音频 一.前言 B站上的漂亮的小姐姐真的好多好多,利用 you-get 大法下载了一个 B 站上跳舞的小姐姐视频,利用视频中的弹幕来制作一个漂亮小姐姐词云跳舞视频,一起来看看吧. 二.实现思路 1. 下载视频 安装 you-get 库 pip install you-get -i http://pypi.douban

  • 用python制作词云视频详解

    使用到的第三方库 Package Version --------------- --------- baidu-aip 2.2.18.0 jieba 0.42.1 moviepy 1.0.3 numpy 1.20.2 opencv-python 4.5.1.48 Pillow 8.2.0 requests 2.25.1 wordcloud 1.8.1 you-get 0.4.1520 B站弹幕爬取 思路 通过视频BV号请求cid,再使用cid请求弹幕文件,最后使用正则表达式去匹配弹幕文本,将匹

  • Python做个自定义动态壁纸还可以放视频

    目录 前言 一.核心功能设计 二.实现步骤 1. UI排版布局设计 2. 视频加载预览 3. 动态壁纸功能实现 4. 关闭动态壁纸 前言 前段时间,用PyQt5写了几篇文章,关于Python自制一款炫酷音乐播放器.自定义桌面动画挂件.车牌自动识别系统.今天就继续给大家分享一个实战案例,带大家一起用Python的PyQt5开发一个自定义动态桌面壁纸,好玩又有趣! 首先一起来看看最终实现的自定义动态壁纸效果: 下 面,我们开始介绍这个自定义动态桌面的制作过程. 一.核心功能设计 总体来说,我们需要实

  • Python编程实现小姐姐跳舞并生成词云视频示例

    目录 制作过程分为以下几个部分 1.视频下载 2.B 站弹幕下载 3.视频切帧,人像分割 4.对分割后的图像制作词云图 5.图片拼接,合成视频 最后 Python做了一个词云视频,以另一种角度来看小姐姐跳舞 制作过程分为以下几个部分 1.视频下载 首先需要下载一个小姐姐跳舞的视频,这里我用的是 you-get 工具,可借助 Python 的 pip 命令进行安装 pip install you-get you-get 支持下载平台包括:Youtube.Blili.TED.腾讯.优酷.爱奇艺(涵盖

  • Python将QQ聊天记录生成词云的示例代码

    在这个情人节前夕,我把现任对象回收掉了,这段感情积攒了太多的失望,也给了我太多的伤害,所以我看到这个活动的第一反应是拒绝的.然而人生嘛,最重要的就是体验,沉浸在过去的回忆里没有意义,积极面对才能让自己更好地重振旗鼓. 所以,当大家都一致地在这个活动里各种秀恩爱时,我决定走一条不一样的路来为单身狗和刚分手的小伙伴们打打气:时间能改变的,是那些原本就不坚定的东西,未来的路还很长,笑一笑,一切都会过去的! 言归正传,我们要做的任务是,把 QQ 分手聊天记录导出,使用 Python 分词后做成分开的桃心

  • Python爬取你好李焕英豆瓣短评生成词云的示例代码

    爬取过程: 你好,李焕英 短评的URL: https://movie.douban.com/subject/34841067/comments?start=20&limit=20&status=P&sort=new_score 分析要爬取的URL; 34841067:电影ID start=20:开始页面 limit=20:每页评论条数 代码: url = 'https://movie.douban.com/subject/%s/comments?start=%s&limit

  • 昨晚我用python帮隔壁小姐姐P证件照然后发现

    事情是这样的 晚上,正在聚精会神写代码 突然,收到隔壁小姐姐给我发来的消息 还有一张证件自拍照 而且是可以放在结婚证上的那种哦 就是 之前帮过她几次忙 难道要以身相许 去一起办证 原来是照片尺寸不合适 让我帮她修图.还要什么蓝底.红底各种背景的 虽然有些失落 还是,默默的撸出了我39米长的python大刀 先上效果 1.尺寸长宽调整为:295x413 2.背景色调为蓝底 和 红底各一张 3.还要一张透明背景的证件照. 原图↓↓↓ 啪啪啪一顿操作,效果如下↓↓↓ 环境准备 此处,我们需要用到两个p

  • 手把手带你用python爬取小姐姐私房照

    目录 如何用Python搞到小姐姐私房照 目标站点 开发环境 效果预览 正式教程 一.第三方库安装 二.爬虫的基本套路 分析目标站点 请求网站获取数据 解析数据 保存数据 写在最后 如何用Python搞到小姐姐私房照 本文纯技术角度出发,教你如何用Python爬虫获取百度图库海量照片--技术无罪. 学会获取小姐姐私房照同理可得也能获取其他的照片,技术原理是一致的. 目标站点 百度图片使用关键字搜索 小姐姐私房照 https://image.baidu.com/ 开发环境 系统:Windows10

  • 使用Python爬取小姐姐图片(beautifulsoup法)

    Python有许多强大的库用于爬虫,如beautifulsoup.requests等,本文将以网站https://www.xiurenji.cc/XiuRen/为例(慎点!!),讲解网络爬取图片的一般步骤. 为什么选择这个网站?其实与网站的内容无关.主要有两项技术层面的原因:①该网站的页面构造较有规律,适合新手对爬虫的技巧加强认识.②该网站没有反爬虫机制,可以放心使用爬虫. 第三方库需求 beautifulsoup requests 步骤 打开网站,点击不同的页面: 发现其首页是https://

  • python小练习之爬鱿鱼游戏的评价生成词云

    目录 前言 分析页面 重要代码 selenium打开豆瓣短评页面 根据xpath来获取评论内容 实现跳转下一页 完整代码 成果 前言 鱿鱼游戏是什么,相信大家都不陌生了,虽然说博主没看过这部剧,但是还是对豆瓣的评论有点好奇,刚刚好近期学习了selenium,就当练练手了,来吧来吧,爬爬爬. 分析页面 还是老样子,兄弟们先打开我们最喜欢的google浏览器,点击F12,开启爬虫快乐模式 来到页面,如下图步骤,逐个点击 然后我们就发现这个页面确实很简单,每一条评论就是包在了class为short的s

  • 9个提高 Python 编程的小技巧

    目录 01 交换变量 02 字典推导和集合推导 03 计数时使用Counter计数对象 04 漂亮的打印出JSON 05 解决FizzBuzz 06 连接 07 数值比较 08 同时迭代两个列表 09 带索引的列表迭代 前言: 初识Python语言,觉得python满足了你上学时候对编程语言的所有要求.python语言的高效编程技巧让那些曾经苦逼学了四年c或者c++的人,兴奋的不行不行的,终于解脱了.高级语言,如果做不到这样,还扯啥高级呢? 01 交换变量 >>>a=3 >>

  • python生成词云的实现方法(推荐)

    期末复习比较忙过段时间来专门写scrapy框架使用,今天介绍如何用python生成词云,虽然网上有很多词云生成工具,不过自己用python来写是不是更有成就感. 今天要生成的是励志歌曲的词云,百度文库里面找了20来首,如<倔强>,海阔天空是,什么的大家熟悉的. 所要用到的python库有 jieba(一个中文分词库).wordcould .matplotlib.PIL.numpy. 首先我们要做的是读取歌词.我将歌词存在了文件目录下励志歌曲文本中. 现在来读取他 #encoding=gbk l

  • 从CentOS安装完成到生成词云python的实例

    前言 人生苦短,我用python.学习python怎么能不搞一下词云呢是不是(ง •̀_•́)ง 于是便有了这篇边实践边记录的笔记. 环境:VMware 12pro + CentOS7 + Python 2.7.5 安装系统 之前一直用的是win10子系统,现在试试CentOS,CentOS官网下载最新系统dvd版 安装到VMware 12pro.网上很多教程.例如这个链接.等待安装完成后开始. 第一个命令 用Ubuntu的时候没有的命令会提示你安装,感觉很简单的事.但是到CentOS上却变得很

随机推荐