0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Python 一键生成漂亮的生日快乐词云

汽车电子技术 来源:Python实用宝典 作者:Ckend 2023-02-23 15:36 次阅读

1.准备

开始之前,你要确保Pythonpip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南进行安装。

**(可选1) **如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

**(可选2) **此外,推荐大家用VSCode编辑器,它有许多的优点:Python 编程的最好搭档—VSCode 详细指南)。

请选择以下任一种方式输入命令安装依赖

  1. Windows 环境 打开 Cmd (开始-运行-CMD)。
  2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
  3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install wordcloud == 1.5.0
pip install scipy == 1.1.0
pip install multidict == 4.5.2
pip install matplotlib == 2.2.4
pip install fire == 0.2.1
pip install numpy == 1.16.4

看到 Successfully installed xxx 则说明安装成功。或公众号后台回复生日快乐可获得本文全部代码,然后进入文件夹,输入一行命令安装所有依赖:

pip install -r requirements.txt

如果你不想折腾代码,安装完依赖后,输入以下命令就可以生成你的词云:

python birthday.py 图片位置 对象姓名

如:

python birthday.py example.png 宝典哥

2.编写代码

首先是引入词云对象,并初始化【生日快乐】和对方姓名:

words = multidict.MultiDict()
# 生日快乐和姓名的权重必须先初始化两个最大权重的
words.add('生日快乐', 10)
words.add(name, 12)

细心的读者可能发现了,我们在这里用了MultiDict,这主要是因为wordcloud只允许接受【字典】数据结构,而Python内置的字典不允许重复值,所以我们只能引入multidict模块。

然后是插入新的生日快乐词云和对方姓名:

# 随意插入新的词语
for i in range(1000):
    words.add('生日', numpy.random.randint(1, 5))
    words.add('快乐', numpy.random.randint(1, 5))
    words.add(name, numpy.random.randint(1, 5))

然后我们需要对图片进行一些处理,现在网络上的图片很多都包含一些杂色,因此需要把这些杂色去掉:

def transform_format(val):
    """
    用于去除杂色

    Args:
        val (list): RGB颜色组

    Returns:
        list: 去除杂色后的组
    """
    if val[0] > 245 and val[1] > 245 and val[2] > 245:
        val[0] = val[1] = val[2] = 255
        return val
    else:
        return val

引入图片,去除杂色:

# 设定图片
bimg = imread(file)
for color in range(len(bimg)):
    bimg[color] = list(map(transform_format, bimg[color]))
    
wordcloud = WordCloud(
    background_color='white', mask=bimg,
    font_path='simhei.ttf'
).generate_from_frequencies(words)

生成词云并渲染:

# 生成词云
bimgColors = ImageColorGenerator(bimg)

# 渲染词云
plt.axis("off")
plt.imshow(wordcloud.recolor(color_func=bimgColors))
plt.savefig(name+'.png')
plt.show()

完整代码如下:

# coding:utf-8
# Python 实用宝典
# 2021/08/01
import numpy
import fire
import multidict
import matplotlib.pyplot as plt
from scipy.misc import imread
from wordcloud import WordCloud, ImageColorGenerator


def transform_format(val):
    """
    用于去除杂色

    Args:
        val (list): RGB颜色组

    Returns:
        list: 去除杂色后的组
    """
    if val[0] > 245 and val[1] > 245 and val[2] > 245:
        val[0] = val[1] = val[2] = 255
        return val
    else:
        return val


def gen_happy_birthday_cloud(file, name):
    """
    生成生日快乐词云

    Args:
        file (str): 词云背景图
        name (str)): 对方的姓名
    """
    words = multidict.MultiDict()
    # 生日快乐和姓名的权重必须先初始化两个最大权重的
    words.add('生日快乐', 10)
    words.add(name, 12)

    # 随意插入新的词语
    for i in range(1000):
        words.add('生日', numpy.random.randint(1, 5))
        words.add('快乐', numpy.random.randint(1, 5))
        words.add(name, numpy.random.randint(1, 5))

    # 设定图片
    bimg = imread(file)
    for color in range(len(bimg)):
        bimg[color] = list(map(transform_format, bimg[color]))

    wordcloud = WordCloud(
        background_color='white', mask=bimg,
        font_path='simhei.ttf'
    ).generate_from_frequencies(words)

    # 生成词云
    bimgColors = ImageColorGenerator(bimg)

    # 渲染词云
    plt.axis("off")
    plt.imshow(wordcloud.recolor(color_func=bimgColors))
    plt.savefig(name+'.png')
    plt.show()


fire.Fire(gen_happy_birthday_cloud)

3.整合一句运行

接下来,我们使用上次提到的 [一行命令实现功能将这个功能打包成输入命令就能运行的程序,比如:

python birthday.py 图片 宝典哥

嘛,在完整代码最后面加一行语句就行了:

import fire

fire.Fire(gen_happy_birthday_cloud)

当然,别忘了还要import fire模块。

最后实验一下:

python birthday.py example.png 宝典哥

怎么样,效果不错吧?喜欢的话记得点一个在看哦!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 安装
    +关注

    关注

    2

    文章

    97

    浏览量

    22074
  • python
    +关注

    关注

    51

    文章

    4678

    浏览量

    83478
收藏 人收藏

    评论

    相关推荐

    【proteus练练2.17】播放生日快乐音乐

    /*名称:播放音乐 说明:程序运行时播放生日快乐歌,未使用定时器中断,所有频率完全用延时实现 */ #include #define uchar unsigned char #define uint
    发表于 02-17 11:07

    求助“基于stc51单片机的生日快乐歌”

    谁有用51单片机驱动蜂鸣器响“生日快乐”曲调的c程序啊。跪求大神帮忙、、、
    发表于 09-25 17:45

    如何用单片机 唱生日快乐

    本帖最后由 eehome 于 2013-1-5 09:58 编辑 菜鸟不懂,求大家帮忙 如何用单片机 控制唱生日快乐歌,都要哪些元件?是用蜂鸣器有源的还是无源的还是用什么扬声器什么的,具体怎么控制,求PCB图啊,最好 有个仿真 的还有C程序啊,谢谢
    发表于 12-11 17:40

    生日快乐的音乐代码

    想用单片机控制蜂鸣器,使得蜂鸣器演奏生日快乐这首歌,希望能得到生日快乐这首歌的音乐代码
    发表于 04-11 19:19

    蜂鸣器演奏生日快乐

    []={212,212,190,212,159,169,212,212,190,212,142,159,//生日快乐歌的音符频率表,不同频率由不同的延时来决定212,212,106,126,159,169,190,119,119,126,159,142,159,0};uchar code
    发表于 08-18 16:54

    怎么实现单片机控制蜂鸣器唱生日快乐歌曲?

    怎么实现单片机控制蜂鸣器唱生日快乐歌曲?
    发表于 09-28 07:49

    51单片机是如何实现播放生日快乐歌的

    51单片机是如何实现播放生日快乐歌的?其电路及代码该如何去实现?
    发表于 10-28 06:22

    能声控发出祝你生日快乐歌的电路

    能声控发出祝你生日快乐歌的电路
    发表于 04-13 17:42 25次下载
    能声控发出祝你<b class='flag-5'>生日快乐</b>歌的电路

    555触摸式生日快乐乐曲电路

    555触摸式生日快乐
    发表于 05-20 21:37 1811次阅读
    555触摸式<b class='flag-5'>生日快乐</b>乐曲电路

    祝你生日快乐电子蜡烛电路图

    祝你生日快乐电子蜡烛电路图
    发表于 05-30 16:25 1780次阅读
    祝你<b class='flag-5'>生日快乐</b>电子蜡烛电路图

    单片机蜂鸣器 生日快乐 【汇编版】

    单片机蜂鸣器 生日快乐 【汇编版】单片机蜂鸣器 生日快乐 【汇编版】单片机蜂鸣器 生日快乐 【汇编版】单片机蜂鸣器 生日快乐 【汇编版】
    发表于 12-29 13:53 0次下载

    使用单片机进行生日快乐歌设计的程序免费下载

    本文档的主要内容详细介绍的是使用单片机进行生日快乐歌设计的程序免费下载。
    发表于 05-29 17:56 8次下载
    使用单片机进行<b class='flag-5'>生日快乐</b>歌设计的程序免费下载

    arduino生日快乐蜂鸣器

    电子发烧友网站提供《arduino生日快乐蜂鸣器.zip》资料免费下载
    发表于 10-26 11:44 0次下载
    arduino<b class='flag-5'>生日快乐</b>蜂鸣器

    使用Arduino的生日快乐旋律

    电子发烧友网站提供《使用Arduino的生日快乐旋律.zip》资料免费下载
    发表于 11-07 11:12 1次下载
    使用Arduino的<b class='flag-5'>生日快乐</b>旋律

    使用Arduino Uno的生日快乐

    电子发烧友网站提供《使用Arduino Uno的生日快乐音.zip》资料免费下载
    发表于 12-15 10:10 0次下载
    使用Arduino Uno的<b class='flag-5'>生日快乐</b>音