900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 实战小项目 | Python制作词云跳舞 刘畊宏男孩女孩看过来~

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

时间:2019-03-07 07:17:21

相关推荐

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

大家好,我是王某人

最近刘教练真的很火,带领全民健身,很多人成为了刘教练的男孩、女孩!

本文是一个非常完整的Python实战项目,从一个刘教练的健身视频出发,最终生成了一个基于B站用户弹幕的词云舞视频,主要内容包含:

在此感谢周杰伦的《本草纲目》、刘畊宏教练、百度平台以及参考大佬们的方法,本文仅做个人学习使用。鼓励大家多健身!

视频下载神器:you-get

you-get是一个下载视频的神器,安装之后一行代码即可下载视频

you-get[url]

you-get/video/BV1yY4y1i7Pw?t=1079.2#一行代码下载视频

视频切割成图片

下面的代码实现的功能是将上面获取到的代码切割成一张张的图片:

1、opencv中通过VideoCaptrue类对视频进行读取操作以及调用摄像头

filename:打开的视频文件名

device:打开的视频捕获设备id ,如果只有一个摄像头可以填0,表示打开默认的摄像头

2、videoCapture.read():表示读取视频的下一帧

第一个返回值为是否成功获取视频帧:True/False

第二个返回值为返回的视频帧:帧数

importcv2importnumpyasnpimportrandomimportos#保存图片的函数defsave_images(image,addr,num):address=addr+str(num)+".jpg"cv2.imwrite(address,image)#读取视频videoCapture=cv2.VideoCapture("刘畊宏,毽子操x10+蝴蝶袖+臀腿操(自用).mp4")success,frame=videoCapture.read()time_=100i=0j=0whilesuccess:#如果成功获取到视频帧i+=1ifi%time_==0:s=0#名称的编号j=j+1s+=jsave_images(frame,"./picture/",s)#写入目录后再继续读取success,frame=videoCapture.read()videoCapture.release()#释放资源

这样最终我们就将这个视频分成了835张图片

百度人像分割

实际使用

1、先在百度云平台创建人像分割实例

新建一个人像分割的实例,新注册用户可免费领取资源,官网地址:/product/body/seg。下面是小编申请的一个实例:

注意点1:一定是安装baidu_aip库,而不是aip

pipinstallbaidu_aip#安装库,一定要是baidu_aip

注意点2:在当前路径下新建一个mask文件,用来存放分割后的图片。

下面是分割之后的二值图效果:

百度demo

具体的百度官方文档请参考:/doc/BODY/s/4k3cpyner

百度官方的案例如下:

#官方demo"""读取图片"""defget_file_content(filePath):withopen(filePath,'rb')asfp:returnfp.read()image=get_file_content('example.jpg')"""调用人像分割"""client.bodySeg(image);"""如果有可选参数"""options={}options["type"]="labelmap""""带参数调用人像分割"""client.bodySeg(image,options)

注:返回的二值图像需要进行二次处理才可查看分割效果;灰度图和前景人像图不用处理,直接解码保存图片即可

获取B站弹幕

接下来是获取上面视频的弹幕,请参考一位NLP大佬:/godweiyang/bilibili-danmu

合成词云图

弹幕的分词是自己的方法和收集的一份常用的停用词表:

1、分词使用的jieba分词。关于jieba分词的使用入门,参考:/fxsjy/jieba

快速安装jieba:

pipinstalljieba

importpandasaspdimportnumpyasnpimportjiebafromwordcloudimportWordCloudfromtkinterimport_flattenimportmatplotlib.pyplotasplt%matplotlibinlineimportcollectionsimportreimportosfromPILimportImagedf=pd.DataFrame()#获取了3个和刘教练相关的视频弹幕txt_list=["danmu.txt","danmu1.txt","danmu2.txt"]fortxtintxt_list:df1=pd.read_table(txt,header=None,on_bad_lines='skip')df1.columns=["information"]#重命名df1.drop_duplicates("information",inplace=True)df=pd.concat([df,df1])df.head()

总共是10415个弹幕:查看前10条弹幕信息

2、实施分词

3、统计词频

统计切割之后每个单词的总数:

显示出前80个词云图的效果:

notebook中效果是动态的:

采用的是wordcloud来绘制静态的词云图,并且保存到本地:

wordcloud.WordCloud(font_path=None,#字体路径,英文不用设置路径,中文需要,否则无法正确显示图形width=400,#默认宽度height=200,#默认高度margin=2,#边缘ranks_only=None,prefer_horizontal=0.9,mask=None,#背景图形,如果想根据图片绘制,则需要设置scale=1,color_func=None,max_words=200,#最多显示的词汇量min_font_size=4,#最小字号stopwords=None,#停用词设置,修正词云图时需要设置random_state=None,background_color='black',#背景颜色设置,可以为具体颜色,比如white或者16进制数值max_font_size=None,#最大字号font_step=1,mode='RGB',relative_scaling='auto',regexp=None,collocations=True,colormap='viridis',#matplotlib色图,可更改名称进而更改整体风格normalize_plurals=True,contour_width=0,contour_color='black',repeat=False

通过下面的代码来生成词云图。注意点:需要新建一个目录wordcloud,来存放生成的词云图

word_counts=collections.Counter(useful_result)#筛选后统计词频path='./wordcloud/'#新建:存放词云图的路径img_files=os.listdir('./mask')#遍历mask目录下的全部文件fornuminrange(1,len(img_files)+1):img=r'./mask/mask_{}.png'.format(num)#原图片路径mask_=255-np.array(Image.open(img))#获取蒙版图片#绘制词云plt.figure(figsize=(8,5),dpi=200)my_cloud=WordCloud(background_color='black',#背景颜色mask=mask_,#自定义蒙版mode='RGBA',max_words=500,#地址路径要改成自己的ttf文件路径font_path=r'/Users/peter/Desktop/spider/SimHei.ttf').generate_from_frequencies(word_counts)#显示词云图plt.imshow(my_cloud)#词云图中无坐标轴plt.axis('off')wordcloud_name=path+'wordcloud_{}.png'.format(num)my_cloud.to_file(wordcloud_name)#保存词云图片

对应生成的词云图效果:

合成词云视频

基于上面的835张词云图来生成视频:

到达这个步骤我们完成了视频的生成,就只剩下添加【本草纲目】的音乐了

添加本草纲目.MP3

添加音频使用的是moviepy。详细使用文档参考官网:

中文:https://moviepy-cn.readthedocs.io/zh/latest/

英文:https://zulko.github.io/moviepy/install.html

pipinstallmoviepy#安装简单

大功告成👏

感兴趣的朋友可以先点个收藏+关注,之后有这样的爬虫实战小例子也可以分享给大家,我这里也整理了一套Python学习路线跟资料,比较适合新手,戳下面名片找小助理领取

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。