前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取

python免费学习资料、代码以及交流解答点击即可加入


本文用 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_idurl = '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.textprint('---------------------------------'*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 =0if vc.isOpened():rval,frame = vc.read()# 读取视频帧else:rval=Falsewhile rval:rval,frame = vc.read()# 读取每一视频帧,并保存至图片中cv2.imwrite(os.path.join(Pic_path,'{}.jpg'.format(c)),frame)c += 1print('第 {} 张图片存放成功!'.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.shapeif 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-255labelimg = cv2.imdecode(labelimg,1)labelimg = cv2.resize(labelimg,(width,height),interpolation=cv2.INTER_NEAREST)img_new = np.where(labelimg==1,255,labelimg)# 将 1 转化为 255cv2.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制作词云视频,通过词云图来看小姐姐跳舞相关推荐

  1. Python制作词云视频(使用B站视频及弹幕文本)

    Python制作词云视频-目录 使用到的第三方库 项目思路和代码流程 B站弹幕爬取 思路 实现 参考代码 视频下载 思路 参考命令 视频.音频剪辑和音频提取 思路 参考代码 视频帧提取 思路 参考代码 ...

  2. 【Python制作词云】改变词云字体颜色

    Author:AXYZdong 自动化专业 工科男 有一点思考,有一点想法,有一点理性! 定个小小目标,努力成为习惯!在最美的年华遇见更好的自己! CSDN@AXYZdong,CSDN首发,AXYZd ...

  3. python 只去除英文_如何使用 Python 制作词云(Word Cloud)-英文词云篇

    wordcloud 安装报错与解决 虽然网络上也有各种工具可以一键生成词云,但是使用Python制作词云感觉是一件很酷的事情.作为一个 Python 小白,使用 Python 的过程并不那么轻松.比如 ...

  4. plt图片输出 python_利用Python制作词云,wordcloud神器你值得拥有

    相信许多人都看到过下面这样的词云图,词云图是一种很好的可视化工具,其作用主要是为了文本数据的视觉表示,既酷炫又能突出重点. 关于词云图的制作,网上能够搜集到很多的教程,许多都是利用了专用的工具,这些工 ...

  5. 利用python制作漂亮的词云图_利用python制作词云,wordcloud神器你值得拥有

    相信许多人都看到过下面这样的词云图,词云图是一种很好的可视化工具,其作用主要是为了文本数据的视觉表示,既酷炫又能突出重点. 关于词云图的制作,网上能够搜集到很多的教程,许多都是利用了专用的工具,这些工 ...

  6. 如何用Python 制作词云-对1000首古诗做词云分析

    主页: https://codeshellme.github.io 今天来介绍一下如何使用 Python 制作 词云 . 词云又叫文字云,它可以统计文本中频率较高的词,并将这些词可视化,让我们可以直观 ...

  7. python制作词云时出现figure1 figure2_「中文版」如何在Python中生成任何形状的词云...

    有机会介绍一些有趣的项目,向更多人甚至是非技术人员推广Python和人工智能的东西还是蛮有意义的.话不多说,本文将介绍如何将你喜欢的文章或者歌词做一个炫丽的词云图片. 什么是词云呢?简单来说就是,将提 ...

  8. 实战小项目 | Python制作词云跳舞,刘畊宏男孩女孩看过来~

    大家好,我是王某人 最近刘教练真的很火,带领全民健身,很多人成为了刘教练的男孩.女孩! 本文是一个非常完整的Python实战项目,从一个刘教练的健身视频出发,最终生成了一个基于B站用户弹幕的词云舞视频 ...

  9. python制作词云时出现figure1 figure2_用Python生成词云

    词云是一种数据可视化技术,用于表示文本数据,其中每个单词的大小表示其出现的频率或重要性. 可以使用词云突出显示重要的文本数据点. 词云被广泛用于分析来自社交网络网站的数据. 为了在Python中生成词 ...

最新文章

  1. matlab中jet的例子,Python matplotlib.pyplot.jet()用法及代码示例
  2. Qt / 窗体设置 Qt::WA_TranslucentBackground 为全黑的原因
  3. 搜索二维矩阵 II—leetcode240
  4. jenkins定时任务
  5. python理论知识选择题_python基础知识练习题(一)
  6. AS3 CookBook学习整理(一)
  7. sinaapp mysql连接_手把手教你在新浪云上免费部署自己的网站--连接数据库
  8. 【Vue实例四】利用Vue组件实现添加评论的功能
  9. FreeBSD6.2详细安装图解
  10. MySQL之用Mysql-Proxy实现读写分离
  11. android下拉水波纹,RecyclerView实现水波纹点击效果
  12. STM32 定时器的简单应用 1ms中断代码
  13. ASUS华硕天选/天选2P/天选3P/飞行堡垒789/枪神/枪神2/枪神3/枪神4/枪神5P/枪神6P/幻14 FA506 FX506安装原厂Windows10系统原装Windows11出厂系统重装
  14. 三种照片保存形式 :JPEG、TIFF、RAW
  15. 栈的基本结构与基本操作
  16. win10恢复经典开始菜单_怎么将win10界面切换成win7界面
  17. 毕业论文封面中图分类号和UDC查询
  18. markdown组合数学公式
  19. 【iOS】苹果2017盘点:不止iPhone X!还有这些黑科技和你想不起的玩意
  20. 异或 ^ 的几个作用

热门文章

  1. 怎么部署项目解析域名_内部解析服务器部署
  2. MacOS配置go环境
  3. Javaweb ajax实现分页
  4. WORD排版-目录管理/标题排版
  5. 基于JAVASEOUL设计师品牌代购商城计算机毕业设计源码+系统+lw文档+部署
  6. ng-template、ng-content、ng-container
  7. Cell:代谢组学肠道微生物群介导生酮饮食的抗癫痫作用
  8. 战双帕弥什qq登录服务器未响应是什么意思,战双帕弥什qq登录
  9. 精选汇总 | 开心一刻
  10. davinci平台Uboot移植