使用Stable Diffusion和Pokedex的描述生成神奇宝贝图片

news2025/1/16 20:08:54

还记得我们以前使用GAN、Clip、DALL-E生成神奇宝贝的文章吗,现在是时候使用Stable Diffusion了

在本文中,我将展示如何从神奇宝贝系列不同游戏中的Pokedex条目中获取神奇宝贝描述,并使用Stable Diffusion根据这些藐视生成图片,这样可以看看AI如何解释这些描述的。这篇文章中,我只生成了最初的150个神奇宝贝,如果需要其他的可以自行尝试。

第一步:获取Pokedex条目

第一件事是获得Pokedex的描述。这些Pokedex的描述将作为生成图片的文本提示。我最初的想法是为pokemon.com编写一个webscraper,Pokedex Number (NPN)执行搜索查询。这并不是很难做到,但是有一个叫做PyPokedex的小Python库非常的好用,如果你对编程和神奇宝贝感兴趣,我建议你去看看!

PyPokedex使用PokeAPI来获取神奇宝贝数据,所以可以使用PyPokedex获得各种信息,如NPN,名称,身高,体重,类型,基础统计等。除此之外PyPokedex还有一个叫做“get_description”的方法,它以字典的形式返回每个不同游戏的Pokedex描述。

一个基本的PyPokedex查询如下所示:

 pokemon=pypokedex.get(dex=poke_id)

这个查询会返回一个实例化的对象,该对象将包含基于NPN值的给定神奇宝贝的所有信息。

 poke_name=pokemon.name

下一步就是用get_descriptions方法获取Pokedex描述。这里我们使用《Pokemon Yellow》的Pokedex中的描述,因为这代大家都应该知道

 yellow_description=pokemon.get_descriptions()[ver]

然后将这两个结果结合起来,这样给AI的提示就好了:

 prompt = poke_name + " " + yellow_description

这里我们使用神奇宝贝的名字作为提示的一部分,因为有一些Pokedex条目有点模糊,并不总是产生好结果。所以神奇宝贝的名字,能够创造出更像是原版的“真正变体”。如果你不喜欢也可以去掉,但我对这样的结果很满意。

第二步:设置Stable AI

我们已经有文本了,下面开始准备Stable Diffusion模型。用下面这行代码安装必要的包:

 %pipinstall—quiet—upgradediffuserstransformersacceleratemediapyscipyftfyspacy

还需要包含xformers包来帮助我们创建图像。这个需要根据你的python版本训责相应的wheels包,一定不要错了

 github_url="https://github.com/brian6091/xformers-wheels"
 xformer_id="0.0.15.dev0+4c06c79"
 xformers_wheels=f"xformers-{xformer_id}.d20221205-cp38-cp38-linux_x86_64.whl
 %pipinstall-q {github_url}/releases/download/{xformer_id}/{xformers_wheels}

接下来,指定想要使用的模型。这里选择dreamlike-photoreal-2.0。

 model_id=“dreamlike-art/dreamlike-photoreal-2.0”

我们这里使用简单,快速的方法:直接使用StableDiffusionPipeline生成图片

 importmediapyasmedia
 importtorch
 fromdiffusersimportStableDiffusionPipeline
 
 device="cuda"
 
 ifmodel_id.startswith("stabilityai/"):
   model_revision="fp16"
 else:
   model_revision=None
 
 ifschedulerisNone:
   pipe=StableDiffusionPipeline.from_pretrained(
       model_id,
       torch_dtype=torch.float16,
       revision=model_revision,
       )  
 else:
   pipe=StableDiffusionPipeline.from_pretrained(
       model_id,
       scheduler=scheduler,
       torch_dtype=torch.float16,
       revision=model_revision,
       )
 
 pipe=pipe.to(device)
 pipe.enable_xformers_memory_efficient_attention()
 
 ifmodel_id.endswith('-base'):
   image_length=512
 else:
   image_length=768

现在已经准备好所有步骤了,下面开始正式生成了:

 remove_safety=False
 num_images=4
 
 ifremove_safety:
   negative_prompt=None
 else:
   negative_prompt="nude, naked"
 
 images=pipe(
     prompt,
     height=image_length,
     width=image_length,
     num_inference_steps=25,
     guidance_scale=9,
     num_images_per_prompt=num_images,
     negative_prompt=negative_prompt,
     ).images
     
 media.show_images(images)

第三步:把这些代码整合成函数

上面的代码已经可以根据单个查询生成单个图片。但是我们需要处理150个。所以我将他们整合成一个函数,循环调用。

 defmakePokemonFromPokedex(ver,nPokemon):
   #Loop over nPokemons to get the descritptions and generate images for each
   #poke_id = 1
   forpoke_idinrange(1, nPokemon+1, 1):
     #print(poke_id)
     #Specify which Pokemon we want to query using its ID number
     pokemon=pypokedex.get(dex=poke_id)
     #print(pokemon)
 
     #This is the name of the Pokemon we are querying
     poke_name=pokemon.name
 
     #This is the PokeDex desciption for the current Pokemon
     yellow_description=pokemon.get_descriptions()[ver]
 
     #This is the prompt I'll feed to the AI 
     prompt=poke_name+" "+yellow_description
     #print(prompt)
 
     remove_safety=False
     num_images=4
 
     ifremove_safety:
       negative_prompt=None
     else:
       negative_prompt="nude, naked"
 
     images=pipe(
         prompt,
         height=image_length,
         width=image_length,
         num_inference_steps=25,
         guidance_scale=9,
         num_images_per_prompt=num_images,
         negative_prompt=negative_prompt,
         ).images
     
     fname='poke_'+str(poke_id)
     get_concat_h_multi_blank(images).save(fname+'.jpg')

下面看看结果

结果展示

铁甲蛹

Metapod — The prompt for this is “It is waiting for the moment to evolve. At this stage, it can only harden, so it remains motionless to avoid attack”.

独角虫

Weedle —T he prompt for this is “Beware of the sharp stinger on its head. It hides in grass and bushes where it eats leaves”.

大针蜂

Beedrill— The prompt for this is “It has three poisonous stingers on its forelegs and its tail. They are used to jab its enemy repeatedly”.

阿柏蛇

Ekans— The prompt for this is “The older it gets, the longer it grows. At night, it wraps its long body around tree branches to rest.”.

穿山鼠

Sandshrew— The prompt for this is “It loves to bathe in the grit of dry, sandy areas. By sand bathing, the Pokémon rids itself of dirt and moisture clinging to its body.”. Image by author.

穿山王

Sandslash— The prompt for this is “The drier the area Sandslash lives in, the harder and smoother the Pokémon’s spikes will feel when touched.”. Image by author.

尼多力诺

Nidorino— The prompt for this is “With a horn that’s harder than diamond, this Pokémon goes around shattering boulders as it searches for a moon stone.”. Image by author.

九尾

Ninetales— The prompt for this is “It is said to live 1,000 years, and each of its tails is loaded with supernatural powers”. Image by author.

走路草

Oddish— The prompt for this is “If exposed to moonlight, it starts to move. It roams far and wide at night to scatter its seeds.”. Image by author.

地鼠

Diglett— The prompt for this is “If a Diglett digs through a field, it leaves the soil perfectly tilled and ideal for planting crops.”. Image by author.

蚊香蝌蚪

Poliwag— The prompt for this is “For Poliwag, swimming is easier than walking. The swirl pattern on its belly is actually part of the Pokémon’s innards showing through the skin.”. Image by author.

毒刺水母

Tentacruel— The prompt for this is “When the red orbs on Tentacruel’s head glow brightly, watch out. The Pokémon is about to fire off a burst of ultrasonic waves.”. Image by author.

https://avoid.overfit.cn/post/7f072f5e107145d0b6502a956d4e3ede

作者:Victor Murcia

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

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

相关文章

【基数排序】 C++高效实现

题目描述 给定你一个长度为 nnn 的整数数列。 请你使用快速排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行,第一行包含整数 nnn。 第二行包含 nnn 个整数(所有整数均在 1∼1091 \sim 10^91∼109 范围内&…

Android架构演进 · 设计模式· 为什么建议你一定要学透设计模式?

“ 【小木箱成长营】设计模式系列文章(排期中): Android 架构演进 设计模式 Android 常见的 4 种创建型设计模式(上) Android 架构演进 设计模式 Android 常见的 4 种创建型设计模式(下) Android 架构演进 设计模式 Android 常见的 6 种结构型设计模式(上) An…

vue2 中组件的生命周期

目录 一、组件的生命周期 1、什么是组件的生命周期? 2、生命周期的阶段划分: (1)创建阶段:beforeCreate、created、beforeMount、mounted ​(2)运行阶段:beforeUpdate、updatev…

【顺序表】数据结构,java代码实现

前言: 大家好,我是良辰丫🍓🍓🍓,顺序表和数组有什么区别呢,我们带着这个疑问去接触顺序表,学习顺序表相关知识。🚀🚀🚀 🧑个人主页&am…

商城系统春节氛围营造

春节将至,无论是线上还是线下,都在紧锣密鼓的进行春节营销,线下商家可以通过布置店铺,来营造节日氛围,那对于线上商城来说,又能从哪些方面进行氛围营造呢?今天,我们就以CRMEB Pro版系…

Spring Boot Actuator详解与深入应用(一):Actuator 1.x

《Spring Boot Actuator详解与深入应用》预计包括三篇,第一篇重点讲Spring Boot Actuator 1.x的应用与定制端点;第二篇将会对比Spring Boot Actuator 2.x 与1.x的区别,以及应用和定制2.x的端点;第三篇将会介绍Actuator metric指标…

AWVS扫描报告分析

系列文章 AWVS安装与激活 AWVS扫描Web应用程序 扫描报告分析 生成报告 1.选则我们已经扫描好的网站,点击它 2.点击后,右上角选择生成报告 3.选择生成报告的类型 4.点击生成报告 如下我们分别选择了三种规格生成了三份不同类型的报告 5.点击HTML&…

Vivado

Vivado设计套件,是Xilinx公司最新的为其产品定制的集成开发环境,支持Block Design、Verilog、VHDL等多种设计输入方式,内嵌综合器以及仿真器,可以完成从设计输入、综合适配、仿真到下载的完整FPGA设计流程。 Vivado集成了HLS&…

与机器人chatGPT聊聊软件测试的热门话题

之前我和chatGPT有过一次对话, 那只是问一些有趣的、时髦的大众话题。上周末在家,想考一考chatGPT的软件测试专业水平,确定它是否算得上一名测试专家?通过一系列有难度的提问,感觉有时它答的精妙与全面,但有…

SAP ABAP——SAP包(一)【包概要简述及创建】

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…

jsp 实验室管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 jsp 实验室管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用…

Node 异步I/O 实现

Node 异步I/O 实现 文章目录Node 异步I/O 实现理想的非阻塞异步 I/O现实的异步I/O实现方案重磅来了 Node 的异步 I/O的实现整个异步 I/O 的过程Node 实现异步 I/O 的总结PS:🌰理想的非阻塞异步 I/O 但是现实是骨感的,现实的异步I/O实现方案有…

Apache Doris 系列: 基础篇-使用BitMap函数精准去重(1)

1. 简述 精准去重的常用方式是使用SQL函数COUNT(DISTINCT),这种方法最简单,但是要求所有数据都汇聚在一个节点上计算,在数据量大的情况下,需要等待比较常的时间。 例如一个6000000行数据的表,执行以下SQL,…

模板技术详解

目录 一、概念介绍 二、函数模板 2.1 概念 2.2 函数模板格式 2.3 函数模板原理 2.4 函数模板实例化 2.5 函数模板的匹配原则 三、类模板 3.1 类模板格式 3.2 类模板实例化 四、非类型模板参数 五、模板特化 5.1 概念 5.2 函数模板特化 5.3 类模板特化 六、模板…

如何使用mybatis处理数据库关系中的一对多关系呢?

测试环境的搭建: 本篇文章的测试环境搭建和上篇文章基本相似,这里在上篇文章传送门测试环境的基础上进行对比和修改! 上篇文章所提到的多对一是多个学生对应一个老师,是在学生的角度去获取老师的信息,而本篇文章的一…

关于MySQL中的数据类型

一、常见的数据类型有: varchar(最长255):【每个长度可以保存一个英文字符或一个汉字】 可变长度字符串 比较智能 节省空间 会根据实际的数据长度动态分配空间 优点:节省空间 缺点:需要动态分配空间&am…

phy-MDC时钟修改

问题分析:我们这边更换一种电平转换芯片,还是没调通。可能一个原因是这个芯片在开漏模式下速速最高到2M有关,您那边能帮忙协调一下,把内核PHY的MDC时钟改为2M以下,另把PHY的复位时间由现在的13MS左右调整到30MS左右我们试一下 在…

数据库知识学习

关系型数据库学习 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录关系型数据库学习一 数据库介绍1 相关定义数据&#xf…

基于卷积神经网络识别金融票据中的文字信息(计算机毕设完整代码可直接运行)

结果展示:用户首先通过”浏览文件”按钮选择扫描获得的金融票据图片. 程序就能够提取出金融票据图片中的日期, 金额等信息和图片路径信息显示在屏幕上. 程序还设置了帮助按键,使用者通过帮助按钮获得帮助.由图可见票据的日期为 19 年 06 月 22 日(062219), 程序可以…

CMMI之需求管理

需求管理(Requirement Management, RM)的目的在客户与开发方之间建立对需求的共同理解,维护需求与其他工作成果的一致性,并控制需求的变更。需求管理过程域是SPP模型的重要组成部分。本规范阐述了需求管理过程域的三个主要规程&am…