手把手教你如何绘制自己的跳舞词云图~
回复“书籍”即可获赠Python从入门到进阶共10本电子书
上次做了一个跳舞的词云图,大家感觉很不错,都想学习一下做法,志斌今天就来跟大家分享一下如何制作跳舞的词云图。
01
下载视频
首先我们要先准备一个热舞视频,从哪里下载的都可以,我是用You-Get从B站上下载的,命令如下:
you-get url
you-get是第三方库,需要读者用pip进行手动安装,它的更多用法可以看看这篇文章下载全网音视频资源的神器—You-get。
02
分割视频
下载好视频后,我们要对其进行分割处理,将其变成一张一张的图片,代码如下:
import cv2
vc = cv2.VideoCapture(r'美女跳舞视频.flv') # 读取视频文件
n = 1 # 计数
a, b = vc.read()
timeF = 10 # 视频帧计数间隔频率
num = 0
while a: # 循环读取视频帧
a, b = vc.read()
if (n % timeF == 0): # 每隔timeF帧进行存储操作
num += 1
cv2.imwrite(f'{num}.jpg',b) # 存储为图像
n += 1
cv2.waitKey(1)
vc.release()
让我们来看看效果:
03
人物抠像
视频现在已经分割成一张一张的图片了,我们要把人物给抠出来,这样方便我们进行词云图绘制。
这里我是借用的百度API进行人物抠像,下面我们来看一下如何使用百度API。
首先,我们先打开百度AI界面,然后点击控制台。
跳转到登陆界面后,输入账号密码后,跳转到管理界面,此时我们点击人体分析。进入到人体分析应用界面。
然后创建一个应用(如已创建好,就点击管理应用)。
创建好后,进入到应用列表中,记下来‘AppID’、‘API Key’、‘Secret Key’这三个参数的值。在后面对API进行调用的时候需要用到这三个参数。
接下来,我们就可以开始调用API了,代码如下:
""" 读取图片 """
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()image = get_file_content('example.jpg')
""" 调用人像分割 """
client.bodySeg(image);
""" 如果有可选参数 """
options = {}
options["type"] = "labelmap"
""" 带参数调用人像分割 """
client.bodySeg(image, options)
我们来看一下效果:
(来源:百度AI)
我们使用的代码如下:
APP_ID = '你的APP_ID'
API_KEY = '你的API_KEY'
SECRET_KEY = '你的SECRET_KEY'
client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)
path = r'美女跳舞视频'
img_files = os.listdir(r'img')
print(img_files)
for num in range(2, len(img_files) + 1):
img = f'img_{num}.jpg'
img_1 = cv2.imread(img)
height, width = img_1.shape[:2]
with open(img, 'rb') as fp:
img_info = fp.read()
seg_res = client.bodySeg(img_info)
labelmap = base64.b64decode(seg_res['labelmap'])
nparr = np.frombuffer(labelmap, np.uint8)
labelimg = cv2.imdecode(nparr, 1)
labelimg = cv2.resize(labelimg, (width, height), interpolation = cv2.INTER_NEAREST)
new_img = np.where(labelimg == 1, 255, labelimg)
mask_name = path + 'mask_{}.png'.format(num)
cv2.imwrite(mask_name,new_img)
让我们来看看效果,感觉还不错:
04
词云绘制
现在人物也出来了,我们可以开始进行词云的绘制了,这里我们使用的是上次从抖音视频上爬取下来的评论,读者也可以替换成自己的评论,代码如下:
for num in range(1,23):
with open("comment.txt", 'r') as f:
job_title_1 = f.read()
contents_cut_job_title = jieba.cut(job_title_1)
contents_list_job_title = " ".join(contents_cut_job_title)
img = f'mask_{num}.png'
mask = 255 - np.array(Image.open(img)) # 相互转化
wc = WordCloud(stopwords=STOPWORDS.add("一个"), collocations=False,
background_color="white",
font_path=r"K:\msyh.ttc",
width=400, height=300, random_state=42,
mask=mask
)
wc.generate(contents_list_job_title)
wc.to_file(f"ciyun_{num}.png")
让我们来看看效果:
05
合成视频
词云图做好了,我们现在要将他们合成一个视频,这样就可以实现其跳舞的特效啦,代码如下:
import cv2
video_address = 'tiaowu.mp4' # 输出视频的保存路径
fps = 20 # 帧率,可以调整
img_size = (1080, 1920) # 图片的大小
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V')
videoWriter = cv2.VideoWriter(video_address , fourcc, fps, img_size)
for num in range(1,23):
img_path = f'ciyun_{num}.png'
frame = cv2.resize(cv2.imread(img_path), img_size)
videoWriter.write(frame) # 合成视频
videoWriter.release()
来看一下效果:
06
小结
1. 本文详细介绍了如何制作一款跳舞的词云图,有兴趣的读者可以尝试自己动手实验一下。
2. 本文绘制词云图的操作是最基本的,其实还可以更优,有兴趣的读者可以看看这篇文章基于微博评论的文本情感分析与关键词提取的实战案例~。
3. 让词云图绘制在人像中,要让PIL.Image与numpy.array之间进行相互转换。
4. 本文仅供学习参考,不做它用。
小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。
------------------- End -------------------
往期精彩文章推荐:
欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
想加入Python学习群请在后台回复【入群】
万水千山总是情,点个【在看】行不行
/今日留言主题/
随便说一两句吧~