超有范,使用飞桨paddleHub抠图制作任意形状的词云(学习心得)


链接
在这里插入图片描述

1 抠图代码

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可:
# Also add the following code, so that every time the environment (kernel) starts, just run the following code:
import sys
sys.path.append('/home/aistudio/external-libraries')
# 创建系统字体文件路径
!mkdir .fonts
# 复制文件到该路径
!cp simhei.ttf .fonts/
!rm -rf .cache/matplotlib
import paddlehub as hub

module = hub.Module(name="deeplabv3p_xception65_humanseg")
test_img_path=['词云抠图.png']
input_dict = {"image": test_img_path}

# execute predict and print the result
results = module.segmentation(data=input_dict)
for result in results:
    print(result['origin'])
    print(result['processed'])

[32m[2020-04-29 15:17:43,465] [    INFO] - Installing deeplabv3p_xception65_humanseg module[0m
[32m[2020-04-29 15:17:43,487] [    INFO] - Module deeplabv3p_xception65_humanseg already installed in /home/aistudio/.paddlehub/modules/deeplabv3p_xception65_humanseg[0m
[32m[2020-04-29 15:17:44,266] [    INFO] - 0 pretrained paramaters loaded by PaddleHub[0m


词云抠图.png
humanseg_output/词云抠图.png

2 抠图效果

from PIL import Image
Image.open('词云抠图.png')

在这里插入图片描述

from PIL import Image
Image.open('humanseg_output/词云抠图.png')

在这里插入图片描述

3 绘制词云图

def fenci(text):
    '''
    利用jieba进行分词
    参数 text:需要分词的句子或文本
    return:分词结果
    '''

    jieba.load_userdict('add.txt')  #自定义词典
    seg=jieba.lcut(text,cut_all=False)
    return  seg
def stopwordslist(file_path):
    '''
    创建停用词表
    参数 file_path:停用词文本路径
    return:停用词list
    '''
    stopwords=[line.strip()for line in open(file_path).readlines()]
    return  stopwords
def movestopwords(sentence,stopwords,counts):
    '''
    去除停用词,统计词频
    参数 file_path:停用词文本路径 stopwords:停用词list counts: 词频统计结果
    return:None
    '''
    out=[]
    for word in sentence:
        if word not in stopwords:
            if len(word)!=1:
                counts[word]=counts.get(word,0)+1
    
    return None
def drawcounts(counts,num):
    '''
    绘制词频统计表
    参数 counts: 词频统计结果前几 num:绘制topN
    return:none
    '''
    x_aixs=[]
    y_aixs=[]
    c_order=sorted(counts.items(),key= lambda x :x[1],reverse=True)

    for c in c_order[:num]:
        x_aixs.append(c[0])
        y_aixs.append(c[1])

    #设置显示中文
    plt.figure(figsize=(12,12))
    plt.rcParams['font.sans-serif'] = ['SimHei'] 
    
    plt.bar(x_aixs,y_aixs)
    plt.title('词频统计结果')
    plt.show()
    return
def drawcloud(word_f):
    '''
    根据词频绘制词云图
    参数 word_f:统计出的词频结果
    return:none
    '''
    #加载背景图片
    cloud_mask=np.array(Image.open('humanseg_output/词云背景图.png'))
    
    #忽略显示的词
    st=set(['东西','觉得'])
    #生成wordcloud对象
    wc=WordCloud(background_color='white',
    mask=cloud_mask,
    max_words=300,
    font_path='simhei.ttf',
    min_font_size=10,
    max_font_size=100,
    width=400,
    relative_scaling=0.3,
    stopwords=st
    )


    wc.fit_words(word_f)
    wc.to_file('pic.png')
from __future__ import print_function
import json
import time #时间处理模块
import jieba #中文分词
import matplotlib
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np 
from wordcloud import WordCloud  #绘制词云模块

#打开网上爬取的爱艺奇下的评价aqy.txt 
#使用stopwordslist 剔除点一些不用的词语
#使用fenci  ,利用jieba 裁剪长句子
with open ('aqy.txt','r',encoding='utf-8') as f:
    counts={}
    stopwords=stopwordslist('baidu_stopwords.txt')
    for line in f:
        words=fenci(line)
        movestopwords(words,stopwords,counts)
drawcounts(counts,20)#绘制top20 的高频词
    
drawcloud(counts)  #绘制词云图

在这里插入图片描述

4 词云效果图

image1=Image.open('humanseg_output/词云抠图.png')
image2=Image.open('pic.png')
plt.figure(figsize=(10,10))
plt.subplot(121)
plt.imshow(image1)
plt.axis('off')
plt.subplot(122)
plt.imshow(image2)
plt.axis('off')
e(figsize=(10,10))
plt.subplot(121)
plt.imshow(image1)
plt.axis('off')
plt.subplot(122)
plt.imshow(image2)
plt.axis('off')
plt.show()

在这里插入图片描述

5 项目链接

(AiStudio)项目链接:https://aistudio.baidu.com/aistudio/projectdetail/439601
https://aistudio.baidu.com/aistudio/projectdetail/439601?shared=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值