年轻人不讲武德,竟用Python让马老师表演闪电五连鞭!

11月份的头条,是属于马保国的。

一位69岁的老同志,惨遭年轻人偷袭,不讲武德。

看看把老同志欺负的...

要不是马老师讲仁义讲道德,甩手就是一个五连鞭。

哈哈哈,所以本期我们就用Python给马保国老师做一个闪电五连鞭动态词云图

词云数据来自B站,使用stylecloud词云库绘制。

主要参考百度AI Studio上的一个开源项目,使用PaddleSeg对人像进行分割。

年轻小F不讲武德这样好吗耗子尾汁

01 弹幕数据获取

没从B站上直接爬取,使用第三方库bilibili_api

这是一个用Python写的调用Bilibili各种API的库,范围涵盖视频、音频、直播、动态、专栏、用户、番剧等。

地址:https://passkou.com/bilibili_api/docs/

使用video模块下面的两个方法,可以获取11月每天的视频弹幕。

首先需要获取SESSDATACSRF(bili_jct)的值。

谷歌浏览器可以通过下图查看,域名选择bilibili.com。

以点击量为排序,选取排行第一的视频获取弹幕。没想到马老师老早就火了,耗子尾汁。

点击排名第一的视频,然后在浏览器的访问栏获取BV号,BV1HJ411L7DP。

获取弹幕代码如下。

from bilibili_api import video, Verify
import datetime# 参数
verify = Verify("你的SESSDATA值", "你的bili_jct值")# 获取存在历史弹幕的日期列表
days = video.get_history_danmaku_index(bvid="BV1HJ411L7DP", verify=verify)
print(days)# 获取弹幕信息,并保存
for day in days:danmus = video.get_danmaku(bvid="BV1HJ411L7DP", verify=verify, date=datetime.date(*map(int, day.split('-'))))print(danmus)f = open(r'danmu.txt', 'a')for danmu in danmus:print(danmu)f.write(danmu.text + '\n')f.close()

得到结果。

我大E了啊,没有闪。

使用jieba对弹幕数据进行分词处理

import jieba
def get_text_content(text_file_path):'''获取填充文本内容'''text_content = ''with open(text_file_path, encoding='utf-8') as file:text_content = file.read()# 数据清洗,只保存字符串中的中文,字母,数字text_content_find = re.findall('[\u4e00-\u9fa5a-zA-Z0-9]+', text_content, re.S)text_content = ' '.join(jieba.cut(str(text_content_find).replace(" ", ""), cut_all=False))print(text_content)return text_contenttext_content = get_text_content('danmu.txt')

选取马保国原版素材视频,B站上有高清的。

地址:https://www.bilibili.com/video/BV1JV41117hq

参考网上的资料,运行如下代码即可下载B站视频

from bilibili_api import video, Verify
import requests
import urllib3# 参数
verify = Verify("你的SESSDATA值", "你的bili_jct值")# 获取下载地址
download_url = video.get_download_url(bvid="BV1JV41117hq", verify=verify)
print(download_url["dash"]["video"][0]['baseUrl'])baseurl = 'https://www.bilibili.com/video/BV1JV41117hq'
title = '马保国'def get_video():urllib3.disable_warnings()headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8'}headers.update({'Referer': baseurl})res = requests.Session()begin = 0end = 1024 * 1024 - 1flag = 0temp = download_urlfilename = "./" + title + ".flv"url = temp["dash"]["video"][0]['baseUrl']while True:headers.update({'Range': 'bytes=' + str(begin) + '-' + str(end)})res = requests.get(url=url, headers=headers, verify=False)if res.status_code != 416:begin = end + 1end = end + 1024 * 1024else:headers.update({'Range': str(end + 1) + '-'})res = requests.get(url=url, headers=headers, verify=False)flag = 1with open(filename, 'ab') as fp:fp.write(res.content)fp.flush()if flag == 1:fp.close()breakprint('--------------------------------------------')print('视频下载完成')filename = "./" + title + ".mp3"url = temp["dash"]["audio"][0]['baseUrl']while True:headers.update({'Range': 'bytes=' + str(begin) + '-' + str(end)})res = requests.get(url=url, headers=headers, verify=False)if res.status_code != 416:begin = end + 1end = end + 1024 * 1024else:headers.update({'Range': str(end + 1) + '-'})res = requests.get(url=url, headers=headers, verify=False)flag = 1with open(filename, 'ab') as fp:fp.write(res.content)fp.flush()if flag == 1:fp.close()breakprint('音频下载完成')

记得添加SESSDATA和CSRF(bili_jct)的值

02 PaddleSeg人像分割

基于百度AI Studio的项目,项目地址:

https://aistudio.baidu.com/aistudio/projectdetail/1176398

首先下载解压安装PaddleSeg相关依赖包。

# 下载PaddleSeg
git clone https://hub.fastgit.org/PaddlePaddle/PaddleSeg.gitcd PaddleSeg/# 安装所需依赖项
pip install -r requirements.txt

通常去「GitHub」上下载东西,速度都比较慢,可以使用加速链接。

这里的fastgit.org一加,下载速度就能从几十K飙升到几兆每秒。

# 新建文件夹
mkdir work/videos
mkdir work/texts
mkdir work/mp4_img
mkdir work/mp4_img_mask
mkdir work/mp4_img_analysis

新建一些文件夹,主要用来存放相关文件的。

这里可以将之前爬取到的视频和音频放置在videos中。

先对素材视频进行抽帧,就是获取视频每帧的图片。

def transform_video_to_image(video_file_path, img_path):'''将视频中每一帧保存成图片'''video_capture = cv2.VideoCapture(video_file_path)fps = video_capture.get(cv2.CAP_PROP_FPS)count = 0while (True):ret, frame = video_capture.read()if ret:cv2.imwrite(img_path + '%d.jpg' % count, frame)count += 1else:breakvideo_capture.release()filename_list = os.listdir(img_path)with open(os.path.join(img_path, 'img_list.txt'), 'w', encoding='utf-8') as file:file.writelines('\n'.join(filename_list))print('视频图片保存成功, 共有 %d 张' % count)return fpsinput_video = 'work/videos/Master_Ma.mp4'
fps = transform_video_to_image(input_video, 'work/mp4_img/')

一共是获取到了564张图片。

然后使用PaddleSeg将所有的视频图片,进行人像分割,生成mask图片。

# 生成mask结果图片
python 你的路径/PaddleSeg/pdseg/vis.py \--cfg 你的路径/work/humanseg.yaml \--vis_dir 你的路径/work/mp4_img_mask

使用模型进行预测,其中humanseg.yaml文件是作者提供的,可以进行图像分割。

预训练模型deeplabv3p_xception65_humanseg,需下载解压安装放在PaddleSeg/pretrained_model下。

由于预训练模型较大,就不放网盘上了,直接访问下面这个链接即可下载。

# 下载预训练模型deeplabv3p_xception65_humanseg
https://paddleseg.bj.bcebos.com/models/deeplabv3p_xception65_humanseg.tgz

记得需要将humanseg.yaml文件中的路径信息,修改成你自己的路径。

运行上面那三行命令,最后就会生成564张mask文件。

03 词云生成

使用stylecloud词云库生成词云,使用字体方正兰亭刊黑。

def create_wordcloud():for i in range(564):file_name = os.path.join("mp4_img_mask/", str(i) + '.png')# print(file_name)result = os.path.join("work/mp4_img_analysis/", 'result' + str(i) + '.png')# print(result)stylecloud.gen_stylecloud(text=text_content,font_path='方正兰亭刊黑.TTF',output_name=result,background_color="black",mask_img=file_name)

因为stylecloud库无法自定义词云图片,所以小F修改了它的代码。

给gen_stylecloud添加了mask_img这个参数,最终作用在gen_mask_array这个函数上。

如此就能将mask图片转化成词云图!

将这些词云图片合并成视频。

def combine_image_to_video(comb_path, output_file_path, fps=30, is_print=False):'''合并图像到视频'''fourcc = cv2.VideoWriter_fourcc(*'mp4v')file_items = [item for item in os.listdir(comb_path) if item.endswith('.png')]file_len = len(file_items)# print(comb_path, file_items)if file_len > 0:print(file_len)temp_img = cv2.imread(os.path.join(comb_path, file_items[0]))img_height, img_width, _ = temp_img.shapeout = cv2.VideoWriter(output_file_path, fourcc, fps, (img_width, img_height))for i in range(file_len):pic_name = os.path.join(comb_path, 'result' + str(i) + ".png")print(pic_name)if is_print:print(i + 1, '/', file_len, ' ', pic_name)img = cv2.imread(pic_name)out.write(img)out.release()combine_image_to_video('work/mp4_img_analysis/', 'work/mp4_analysis.mp4', 30)

使用ffmpeg对视频进一步的处理,裁剪+重叠。

# 视频裁剪
ffmpeg  -i  mp4_analysis_result.mp4  -vf  crop=iw:ih/2:0:ih/5  output.mp4# 视频重叠
ffmpeg -i output.mp4 -i viedeos/Master_Ma.mp4 -filter_complex "[1:v]scale=500:270[v1];[0:v][v1]overlay=1490:10" -s 1920x1080  -c:v libx264 merge.mp4# 添加音频
ffmpeg -i merge.mp4 -i  videos/Master_Ma.mp4 -c:v copy -c:a copy work/mp4_analysis_result2.mp4 -y# 生成gif图
ffmpeg -ss 00:00:22 -t 3 -i merge.mp4 -r 15 a.gif

ffmpeg的安装及使用就得靠大伙自己百度啦~

视频结果如下。

马保国五连鞭.mp4

到这里了,不给小F来个赞吗,来,炫,来偷吸,我这...

04 总结

好了,到此本期的实践就结束了。感兴趣的小伙伴也可以动手试一试。

这里需要注意,在使用PaddleSeg进行人像分割和生成词云图,这期间耗费的时间比较多,慢慢等就好了。

还有就是可以自己修改一下stylecloud库的代码,自定义一下mask_img图片的大小以及颜色

这两项小F是没有修改的,所以生成的图片是512×512尺寸,导致最后视频需要裁剪。

颜色主要是将mask图片变成白底的图片,小F这里是黑底的。

可以通过图片灰度二值化的方法。

import cv2# 灰度图
img = cv2.imread('work/mp4_img_mask/240.png', 0)# 二值化
ret, thresh = cv2.threshold(img, 30, 255, cv2.THRESH_BINARY_INV)# 显示
cv2.imshow("img", thresh)
# 保存图片
cv2.imwrite('0.png', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

就能得到白底的png图,符合stylecloud词云图的要求

如此便可以绘制出白底彩色文字的词云图。

万水千山总是情,点个「点赞」行不行。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

git配置git kraken

安装完Git karken之后,不能直接使用,否则在使用过程中会一直错误提示:ssh key错误…什么什么的,还需要配置一下: 1,安装Git Karken 安装完git kraken后,会生成一个gitkraken_rsa.pub文件&…

gitkraken汉化

想要汉化gitkraken,上链接,下载解压 链接:https://pan.baidu.com/s/136cQzS7_SsIazhyF1IojsQ 提取码:0lzb 01 双击运行install.bat 02 将string.json拖动到刚才第一步打开的窗口 03 按下回车键 04 输入gitkraken汉化的版本…

GitCracken

GitCracken Git可视化软件GitCracken激活流程 1.要求 - 下载 Node.js v12 LTS或更高版本并安装 - 下载 yarn 并安装 2. 激活流程 - 克隆源码到任意文件 git clone https://github.com/5cr1pt/GitCracken.git - 进入到源码文件 cd GitCracken/GitCracken/ - 执行命令 yarn in…

gitkraken无法打开私有仓库的解决办法

gitkraken无法打开私有仓库的解决办法 有条件的请支持正版,发博客的目的主要是为了还在学习没有经济能力的开发人员 该博客主要根据以下博客的基础上增加解释和补充还有失效链接的补充https://blog.csdn.net/Burnup_110/article/details/117252275?spm1001.2014.…

ubuntu 安装 Gitkraken 9.x Pro 版本

GitKraken 是一个非常好用的 Git 图形界面客户端, 并且支持 Linux 平台, 但 6.5.1 版本以后 GitKraken 对私有仓库不再免费开放使用 本文介绍一个 ubuntu 安装 GitKraken 9.x Pro 版本的方法 2023.04.04 更新: 更换 GitCracken, 支持最新的 9.2.1 版本 参考 https://blog.csdn…

GitKraKen 9.x|7.5.1|6.5.0 - 安装

历史版本下载(改改版本号就行) Linux-deb : https://release.axocdn.com/linux/GitKraken-v7.5.1.debLinux-rpm : https://release.axocdn.com/linux/GitKraken-v7.5.1.rpmLinux-tar.gz : https://release.axocdn.com/linux/GitKraken-v7.5.1.tar.gzWin…

[git版本管理]使用Gitee配合GitKraken管理私有项目

1 使用Gitee项目创建并clone到本地 新建仓库 设置设置名称和路径 复制git地址,然后在终端通过git clone 下载仓库到本地 git clone https://gitee.com/cslibowen/my_project.git下面会提示你clone了一个空仓库,但是此时你的仓库其实并不是空的,打开之后my_project可以看到…

Git 客户端::Git Fork 注册版-NEW

Git Fork 是最简单有效的 Windows 客户端之一。许多开发人员正在使用此版本控制程序,它允许您协作处理您的项目。具有类似这样的用户界面的客户端可以使您的工作更轻松。 Fork 的 Fork 界面非常人性化。在右侧的左侧有大量的存储库和分支、标签、来源和藏匿处。此外…

git fork操作

Git fork操作 文章目录 Git fork操作一.背景二.概念1.与git clone的区别?2.用法流程 三.实操1. fork仓库2. 分支创建与提交 一.背景 最近我在github上发现一个很有意思的项目,看了其中相关的源码,而我呢,又很想加入其中&#xff0…

GitKraken

GitKraken 1 介绍2 下载地址3 禁掉更新参考 1 介绍 GitKraken是一款Git客户端,它使用图形化的界面,以减少命令行操作,安装使用不需要任何依赖,可以在界面上查看和移动窗口,还可以进行搜索;gitkraken还可以…

【Gitkraken】Gitkraken使用教程

工作区、暂存区、本地仓库 先来看下面这张图: Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 从工作区到暂存区再到提交本地仓库 写在前面&#x…

GitKraken使用指南

一名合格的程序员对Git的熟悉是必不可少,当然Git的使用其实不需要GUI工具就能够很好的运用了,GitKraken软件这个功能就是简单容易上手,非常的强大。 【使用指南】 如何在Cooding平台使用 在这里将你自己的Clone URL 粘贴进入。 然后输入Coodi…

GitKraken Pro安装

GitKraken Pro安装 🚀 简介 GitKraken是一款Git客户端,拥有直观的 Git GUI 和强大的 CLI。非常直观的GUI界面,以减少命令行操作,同时新版本还拥有强大的CLI,也就是命令行交互功能,如果你习惯了命令行操作&…

[git可视化软件]gitkraken平替:GitAhead

日期2023-02-28 gitkraken6.5.1已经不能登陆使用了!! 6.5.1免费版已经无法使用!!! 现在是2023-02-28 这款工具已经废除了6.5.1版本的使用功能了,我直接卡在登陆界面进不去项目了. 要想继续管理私有项目,只能升级最新版的软件,并且开通会员.会员费用高的一批,一年要59.4美元.约…

linux 安装gitkraken

目录 1 首先在你的计算机上安装git 2 进入命令行,下载tar包: 3 将包解压到/opt: 4 在usr/local/bin中建立一个指向/opt/gitkraken/gitkraken的软连接 5 在命令行输入 6 在命令行输入如下指令,启动gitkraken 1 首先在你的计算机上安装git…

gitk详解

前言: gitk是git图形化的界面软件版本,对仓库的管理更为直观,不需要在命令行中进行繁琐的控制,将各种信息合理的组织在不同的软件窗口中,让一些很繁琐的操作可以在图像软件中只需要一键获得。合理的结合命令行和图形工…

GitKraken使用—01、GitKraken的安装与破解

0、GitKraken是什么? GitKraken是基于Git代码管理的一个UI管理器,拥有非常精美的界面,可以配合Github、Gitee来使用。 1、GitKraken的下载 我们选择安装GitKraken6.5.1版本,因为GitKraken6.5.1版本时唯一一个免费的版本&#x…

git图形化工具GitKraken的使用——初始化项目

最近看了关于git工作流的一些东西,刚开始用的SourceTree图形工具,发现这个工具在windows上并不是很好用,昨天在网上找到一个酷炫的git图形工具——GitKraken,初步使用了一下,觉得挺好用的,首先它是英文的&a…

GitKraken - 简单教程

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 简单介绍:外观 GitKraken首页预览图 常用快捷键 模糊搜索:(cmd p) 在进行模糊搜索的时候会在当前页面弹出一个…

GitKraken 小章鱼使用教程

目录 前言 一、首次打开 二、Authentication 授权 三、项目导入 四、界面介绍 前言 之前一直习惯使用 git add、commit 指令提交代码,更换项目组后为了统一了解了 gitKraken,发现确实很好用,所有分支、提交、合并 一目了然,推…