场景
需要内嵌到平台后台中,点击“一键生成”按钮,填写模板表单后,根据模板(风格、数量、类型、是否自动上架等等)自动化生成作品。
程序源码地址
Github: NFT自动化生成作品.
预览
部分代码
app.py
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
"""=================================================
@Desc :主接口
=================================================="""
import os
import random
import time
from colors import ColorMultiImage
import settings
from model import training
import csv
from pymongo import MongoClient
import datetime
import sys
nftSeriesId = settings.chooesId
def login(temp):
nftSeries = []
for i in temp:
nftSeries.append(list(i.values())[0])
print('>>> 【NFT自动生成程序】启动成功')
print('>>> 启动成功')
print(f'>>> 训练集存放路径: {settings.color_data_path}')
print(f'>>> 默认生成数量: {settings.food_num}')
print(f'>>> 默认作品风格: {settings.color_style} (0为随机风格,1为艺术家风格)')
print(f'>>> 默认生成算法: Means算法分成K类')
print(f'>>> 默认艺术家风格分箱颜色数: {settings.random_state} (数量越多色彩越鲜艳)')
print(f'>>> 默认艺术家风格颜色差异距离检查数: {settings.color_distance} (作品色彩差异度)')
print(f'>>> 默认训练模型生成路径: {settings.color_model_path} (使用自动训练后生成模型参数的存放路径)')
print(f'>>> 默认生成模式: {settings.train} 0:自动训练模型 1:使用已有训练集')
print('\n目前已生成NFT系列:')
for i in range(len(nftSeries)):
print(f'{i + 1}. {nftSeries[i]}')
# exit()
return choose(len(nftSeries))
def choose(maxNum):
global nftSeriesId
nums = [i + 1 for i in range(maxNum)]
while True:
nftSeriesId = int(input("请选择要生成的系列作品ID(输入0则生成全部系列作品):"))
num = input("请输入生成数量(无输入将默认生成10个):")
models = input("请输入生成模式(0:训练模式 1:生成模式 无输入将使用自动训练模型):")
if num != '':
settings.food_num = int(num)
if models != '':
if models == 1:
settings.train = True
elif models == 0:
settings.train = False
else:
print('无此模式,将采用默认模型')
if nftSeriesId != 0:
if nftSeriesId not in nums:
print(f'您输入的系列不存在,请输入0-{maxNum}之间的数字')
else:
return False
if nftSeriesId == 0:
return True
return True
def nftCore(cout):
global stickers
print('>>>当前用户要生成的作品数量为:' + str(settings.food_num))
print('>>>' + '开始生成..')
for amount in range(0, settings.food_num): # 设置生成数量
pixel = generate_color.merges(stickers[:2])
colors_number = generate_color.colors_number
generate_color.generate(pixel, settings.color_output_name, str(cout), settings.color_model_path,
settings.color_style, colors_number)
print(f"{str(cout)}.正在生成第{str(amount + 1)}个作品")
cout += 1
print()
return cout
def nftCore2(cout):
print('>>>当前用户要生成的作品数量为:' + str(settings.food_num))
print('>>>' + '开始生成..')
t = []
for amount in range(0, settings.food_num): # 设置生成数量
t.append(stickers[0])
t.append(stickers[settings.chooesId])
pixel = generate_color.merges(t)
colors_number = generate_color.colors_number
generate_color.generate(pixel, settings.color_output_name, str(amount), settings.color_model_path,
settings.color_style, colors_number)
print(f"{str(cout)}.正在生成第{str(amount + 1)}个作品")
cout += 1
print()
return cout
def nftCore3():
for amount in range(0, settings.food_num): # 设置生成数量
pixel = generate_color.merges(stickers)
colors_number = generate_color.color_number
generate_color.generate(pixel, settings.color_output_name, str(amount), settings.color_model_path,
settings.color_style, colors_number)
print(f"INFO:生成第{str(amount)}个{settings.color_output_name}")
def toMongo():
print('>>>开始连接MongoDB数据库...')
# host = '103.139.1.219'
host =