This repository has been archived on 2022-12-28. You can view files and clone it, but cannot push or open issues or pull requests.
arags/draw.py
2020-03-26 08:34:40 +08:00

115 lines
4.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import tensorflow as tf
import numpy as np
import random
import pickle
from PIL import Image
from qrcode import make as makeqr
from dnnlib import tflib
import time, os, hashlib
def main():
# Define global variables.
seed = random.randint(0,10000000)
available_charaters = {'Anmicius', 'Camil', 'Grey', 'King', 'Ray', 'Godrose'}#这里是目前支持的角色列表
#Anmicius安迷修Camil卡米尔Grey格瑞King金Ray雷狮Godrose嘉德罗斯
# Select charater and input seed.
selected_character = 'Ray'#这里是选择角色,可以从上方复制
while selected_character not in available_charaters:
selected_character = input('Type in the character you want to draw, e.g. \"Anmicius\" and \"Ray\" (no quotes).\n')
if selected_character not in available_charaters:
print('You typed in a character that is not available or you made a misspell, try agian.')
seed_str = ''
if seed_str != '':
if seed_str.isdigit():
seed = int(seed_str.encode('utf-8'))
else:
seed = int(hashlib.sha256(seed_str.encode('utf-8')).hexdigest(), 16) % 10**8
print('INFO: Setting up variables...')
tflib.init_tf()
rnd = np.random.RandomState(seed)
fmt = dict(func=tflib.convert_images_to_uint8, nchw_to_nhwc=True)
print('INFO: Loading pretrained model...')
Gs = pickle.load(open('models/network-%s-gs.pkl' % selected_character, 'rb'))
latents = rnd.randn(1, Gs.input_shape[1])
print('INFO: Generating...')
images = Gs.run(latents, None, truncation_psi=0.7, randomize_noise=True, output_transform=fmt)
im = Image.fromarray(images[0], 'RGB')
qr = makeqr('This is an image automatically generated by Aotu Draw Bot by Rand0mZ.LiCloud provides computing resources. Seed: %d' % seed)
w, h = im.size
qw, qh = qr.size
if qw > w:
qr = qr.resize((w, w))
elif qh > h:
qr = qr.resize((h, h))
qw, qh = qr.size
imd = im.load()
for i in range(w):
for j in range(h):
d = imd[i, j]
imd[i, j] = d[:-1] +((d[-1] | 1) if qr.getpixel((i%qw, j%qh)) else (d[-1] & ~1),)
print('Done!')
save_name = '%s_%d.png' % (selected_character, seed)
print('INFO: Saving %s' % save_name)
output_dir = os.path.join(os.getcwd() ,'arags')#这里是保存目录默认保存到arags目录下
if not os.path.isdir(output_dir):
os.mkdir(output_dir)
im.save(os.path.join(output_dir, save_name))
print('INFO: Image %s is saved in directory .' % save_name)
print('INFO: All processes has done!')
print('Thank you for using this software and obeying the terms of use above.')
time.sleep(3)
def generate_image(model, save_path, selected_character, seed, amount):
tflib.init_tf()
print('INFO: Loading pretrained model...')
Gs = pickle.load(open(model, 'rb'))
if not os.path.isdir(save_path):
os.mkdir(save_path)
for i in range(1, amount + 1):
print('INFO: Generating image %d' %i)
rnd = np.random.RandomState(seed)
fmt = dict(func=tflib.convert_images_to_uint8, nchw_to_nhwc=True)
latents = rnd.randn(1, Gs.input_shape[1])
images = Gs.run(latents, None, truncation_psi=0.7, randomize_noise=True, output_transform=fmt)
im = Image.fromarray(images[0], 'RGB')
qr = makeqr('This is an image automatically generated by Aotu Draw Bot CLI by Rand0mZ hence this image is not for commercial propose. Seed: %d' % seed)
w, h = im.size
qw, qh = qr.size
if qw > w:
qr = qr.resize((w, w))
elif qh > h:
qr = qr.resize((h, h))
qw, qh = qr.size
imd = im.load()
for i in range(w):
for j in range(h):
d = imd[i, j]
imd[i, j] = d[:-1] +((d[-1] | 1) if qr.getpixel((i%qw, j%qh)) else (d[-1] & ~1),)
print('Done!')
save_name = '%s_%d.png' % (selected_character, seed)
print('INFO: Saving %s' % save_name)
im.save(os.path.join(save_path, save_name))
print('INFO: Image %s is saved to %s.\n' % (save_name, save_path))
seed += i - 1
if __name__ == "__main__":
main()