在这个教程中,我们将学习如何使用使用一组基础特征实现生成式NFT艺术品。 使用的工具包括Python和Scrappy Squirrels提供的基础特征库。
用熟悉的语言学习 以太坊DApp开发 : Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart
像Cryptopunks 和Bored Ape Yacht Club这样的Marquee NFT 项目 已经产生了数亿美元的收入,并让 开发者成为了百万富翁。这些项目(以及当今大多数其他成功的 NFT 项目)的共同点是它们都是PFP 项目。 这意味着它们通常是 10,000 多个化身的集合,其中每个化身都是独一无二的,并且具有一组特征。
在这个教程中,我们将学习如何使用自定义稀有度生成这样的收藏。我们将使用Scrappy Squirrels团队创建的库来完成此任务。 在本教程结束时,你将生成自己的自定义头像集合以及关联的元数据。
1、准备工作我们的库是用 Python 编写的,因此需要在计算机上安装Python,此外你还需要 pip, 它将为我们安装重要的软件包。 可以到此网站并下载最新版本的 Python。即使不熟悉如何编程(使用 Python 或其他方式) 也可以学习本教程。
你还需要一位了解数字艺术的艺术家来创建自己的定制收藏。但是,这不是学习本教程所必需的。我们将为你提供某些测试图像。
作为本教程的一部分,我们将引导你完成创建Scrappy Squirrels NFT 的过程,这是我们已经启动的一个真实项目。本教程 以及后续教程是我们路线图目标的一部分,旨在让人们更容易访问 NFT 和区块链。
松鼠已经使用超过 85 个特征生成。这里有几个示例:
2、生成式NFT图像的实现机制我们在上面看到的松鼠是通过将 PNG 图像堆叠在一起生成的。尽管没有蓝筹 NFT 项目描述他们如何产生艺术,但我们确信 这也是他们所做的。你看到的几乎每个 NFT 头像都是一组堆叠的 PNG 图像。
从右上角开始,如果你将每个特征图像按顺时针顺序堆叠,一个接一个,最终会得到位于中心的图像。这里有几点需要注意:
每个特征图像(以及最终的松鼠头像)具有完全相同的尺寸。除了背景特征(这是第一个特征)之外,其他所有特征图像都有透明背景。特征图像必须堆叠以获得正确的松鼠头像(即从右上角顺时针方向)。特征图像的绘制方式使其位置相对于所有其他特征都有意义。我们可以将任何特征与同一类别的另一个特征交换(例如,将红色衬衫换成蓝色衬衫)。因此,在这种情况下,如果每个特征 类别有 10 个特征,我们理论上可以生产 1 亿只不同的松鼠。因此,艺术家的工作是创建各种特征类别的多个图像。你可以根据需要拥有尽可能多或尽可能少的特征类别。请记住,可能的 组合数量会随着特征类别的数量呈指数增长。
在Scrappy Squirrels项目中,我们创建了 8 个特征类别:
每个特征类别都有不同数量的特征图像。例如,我们有 11 种不同的衬衫可供使用:
现在轮到你了。你需要确定要使用的特征类别并为每个类别生成特征图像。确保它们满足上述条件(应具有相同的尺寸,应正确定位等)。 此外,请确保正确命名特征图像。你为图像命名的内容将出现在元数据文件中。
完成此操作后,我们现在就可以使用库自动生成我们的收藏了!如果你不是艺术家(或无法接触艺术家),请不要担心!我们 有一些示例图像可供你使用。
注意:目前该库仅能够处理 PNG 图像。我们将很快增加对其他媒体类型的支持。
3、下载库并安装所需的软件包我们的生成式NFT艺术库在 GitHub上 免费提供。
下载库后,打开终端或命令提示符,然后运行以下命令:
1
pip install Pillow pandas progressbar2
运行此命令将安装我们的库所依赖的三个重要的 Python 包:
Pillow:一个图像处理库,可以帮助我们堆叠特征图像。Pandas:一个数据分析库,可以帮助我们生成和保存图像元数据。Progressbar:一个库,它会告诉我们图像生成发生时的进度。4、添加自定义资产在你下载的generation-art-nft存储库中,会看到有一个assets文件夹。如果有可用的自定义特征艺术品, 请将此文件夹的内容替换为你的资产。在我们的例子中,assets文件夹有 8 个子文件夹,代表适当命名的类别(见上文), 每个子文件夹都有该特定类别的特征图像。
如果没有自定义图稿,请保持默认资产文件夹不变。
5、配置 config.py 文件这是生成头像集合之前的最后一步(也许也是最重要的一步)。打开config.py文件并按照以下说明进行填写。
配置文件由一个名为 CONFIG 的 Python 变量组成。CONFIG 是一个 Python 列表(由 [] 封装)。它包含按 需要堆叠的顺序排列的特征类别列表。这里的顺序非常重要。这是一个示例配置。
1234567891011128425262728293033738394044748495055758
CONFIG = [ { 'id': 1, 'name': 'background', 'directory': 'Background', 'required': True, 'rarity_weights': None, }, { 'id': 2, 'name': 'body', 'directory': 'Body', 'required': True, 'rarity_weights': 'random' }, { 'id': 3, 'name': 'eyes', 'directory': 'Expressions', 'required': True, 'rarity_weights': None }, { 'id': 4, 'name': 'head_gear', 'directory': 'Head Gear', 'required': False, 'rarity_weights': None }, { 'id': 5, 'name': 'clothes', 'directory': 'Shirt', 'required': False, 'rarity_weights': None }, { 'id': 6, 'name': 'held_item', 'directory': 'Misc', 'required': True, 'rarity_weights': None, }, { 'id': 7, 'name': 'hands', 'directory': 'Hands', 'required': True, 'rarity_weights': None, }, { 'id': 8, 'name': 'wristband', 'directory': 'Wristband', 'required': False, 'rarity_weights': [100, 5, 5, 15, 5, 5, 15, 15, 5, 1] },]
每个特征类别都表示为一个 Python 字典(由 {} 封装)。所需要做的就是在 CONFIG 列表中按顺序定义这些特征类别字典。
特征类别字典有 5 个它需要的键。它们是id、name、directory、required 和 rarity_weights。创建新层(或替换现有层)时, 请确保已定义所有这些键。
下面是为每个键分配值的方式:
id:层数。例如,如果主体是需要堆叠的第二个特征类别(或层),它的 id 将为 2。请注意,层仍必须以正确的顺序定义。name:特征类别的名称。这可以是你选择的任何内容。它将出现在元数据中。directory:资产中包含该特定特征类别图像的文件夹的名称。required:如果每个图像都需要此类别。某些特征类别(例如背景、身体和眼睛)必须出现在每个头像中,而某些其他 类别(例如头饰、腕带或衣服)可以是可选的。我们强烈建议你将第一层所需的值设置为 true。rarity_weights:这个类别将决定你的特征有多普遍(或稀有)。查看下一部分以获取更多详细信息。6、配置稀有权重rarity_weights键可以采用三种值:None、Random 或 Python 列表。让我们一一探索每个值。
如果将 rarity_weights 值设置为None,每个特征将被分配相同的权重。因此,如果有 5 个特征,则每个特征将出现在 大约 20% 的化身中。
如果required为 False,则同样可能根本无法获得该特定特征。在前一种情况下,如果required属性设置为 false,则每个 特征将出现在大约 16.6% 的头像中。另有 16.6% 的化身根本没有这种特殊特征。
将rarity_weights设置为 ‘random’(注意括号)会随机为每个类别分配权重。我们强烈建议你不要使用此功能。始终采用相同 或自定义的用户定义稀有度。
Python 列表可能是分配稀有度权重的最常用方法。首先要做的是转到特征类别文件夹并按名称对特征图像进行排序。例如, 对Wristbands文件夹进行排序将为我们生成以下内容:
可以看到我们有 9 种不同类型的腕带。现在,我们需要定义一个 Python 列表(由 [] 封装),其中每个数字代表按升序 分配给特定特征的权重。
如果必需的设置为 True,则权重的数量应等于该类别的特征数量。如果必需的设置为 False,那么权重的数量应该等于特征 数量加一。
在我们的例子中,如果需要腕带,我们将在列表中定义九个权重,如果不需要,我们将定义十个权重。在后一种情况下,第 一个重量将是与根本没有腕带相关的重量。
让我们看一下我们为腕带定义的rarity_weights。
1
[100、5、5、15、5、5、15、15、5、1]
由于不需要腕带,我们设置了十个重量(九加一)。第一个重量是与根本没有腕带相关的重量。第二个权重与Cheetah乐队相关联, 第三个权重与Giraffe乐队相关联,依此类推。注意这里的字母顺序。
权重越高,特定特征越常见。例如,Cheetah的权重为 5,没有手环的权重为 100。这意味着拥有Cheetah手环的几率是没有手环的 20 倍。
7、生成NFT艺术品集合一旦配置了 config.py 文件,现在是时候生成你的集合了。打开终端(或命令提示符)并导航到generation-art-nft文件夹 运行以下命令:
1
python nft.py
运行此命令将启动图像生成程序。它将首先检查 config.py 文件是否有效。接下来,它将告诉你不同的可能组合的总数。 然后它会询问你要创建多少个头像。我们建议创建比你想要创建的多 20% 的内容,这样即使在删除重复项之后也有足够的剩余。 在我们的例子中,我们选择创建 12,000 个化身,尽管我们想要 10,000 个。然后它会要求你为集合命名,然后开始生成过程。
我们花了大约 30 分钟来生成 11,957 个头像(删除重复后)。图像及其相关元数据将在输出文件夹中可用。
图像文件夹看起来像这样。请注意,这只是一个示例,而不是我们生成的最终松鼠:
元数据文件是一个 CSV 文件,可以将其导入 Excel 并进行分析(例如哪个特征最稀有、哪个特征组合最常见、头像稀有度排名等)。
原文链接:http://blog.hubwiz.com/2022/04/07/generative-nft-art-tutorial/