alleswatikvoel/ways_of_seeing_images.ipynb

525 KiB

In [2]:
#%quickref
%qtconsole
In [3]:
# Load the files for scanning
from matplotlib.pyplot import imshow
import glob, os

target_path = os.path.join(os.getcwd(), "testimages")

print ("Scan for files in {}".format(target_path));

files = glob.glob(os.path.join(target_path, '*.jpg'));
print ("Found {} files".format(len(files)))

# .. for now we assume all are images
Scan for files in /home/ruben/Documents/Projecten/2017/ALLES WAT IK VOEL/testimages
Found 14 files
In [4]:
# load as PIL Images
from PIL import Image
images = [Image.open(file) for file in files]
In [5]:
import numpy as np

arrays = [np.array(image) for image in images]
In [6]:
def getChannelImagesFromImage(arrImg):
    """
    [(255,255,255)] => ( [(255,0,0)], [(0,255,0)], [(0,0,255)] )
    Three separate images that show individual channels
    """
    red = arrImg.copy()
    red[:,:,1] = 0
    red[:,:,2] = 0

    green = arrImg.copy()
    green[:,:,0] = 0
    green[:,:,2] = 0

    blue = arrImg.copy()
    blue[:,:,0] = 0
    blue[:,:,1] = 0
    return (red, green, blue)

# (red,green,blue) = getChannelImagesFromImage(arrays[0])
# print (red)
# images[0].show()
# Image.fromarray(red).show()
# Image.fromarray(green).show()
# Image.fromarray(blue).show()
In [16]:
def getImageAsHSV(image):
    hsv = np.array(image.convert('HSV'))

#     If you want to get individual channels use
#     hue = hsv[:,:,0]
#     sat = hsv[:,:,1]
#     val = hsv[:,:,2]

#     hue = hsv.copy()
#     hsv[:,:,0] = 255 #all hue to 100%
#     hsv[:,:,1] = 255 #all saturation to 100%
#     hsv[:,:,2] = 255 #all brightness to 100%
    return hsv

# hue_img = Image.fromarray(getImageAsHSV(images[4]), mode="HSV")

# %matplotlib inline
# imshow(np.asarray(hue_img.convert('RGB')))
Out[16]:
<matplotlib.image.AxesImage at 0x7f0d928f2828>
In [10]:
# sorting pixels by hue
# http://stackoverflow.com/a/2828121
# Sort by column: a[a[:,1].argsort()]
hsv = np.array(images[4].convert('HSV'))
print (len(hsv), len(hsv[0]), len(hsv[0,0]))
height = len(hsv)
singleLine = np.concatenate(hsv)
sortedLine = np.array(sorted(singleLine, key=lambda pixel: pixel[0])) # change pixel[0] to 1 or 2 for saturation & brightness
sortedImage = sortedLine.reshape(int(len(sortedLine)/height), height, 3)

sortedImg = Image.fromarray(sortedImage, mode="HSV")

sortedImg.show()

%matplotlib inline
imshow(np.asarray(sortedImg.convert('RGB')))
452 640 3
Out[10]:
<matplotlib.image.AxesImage at 0x7f0d872a0e10>
In [63]:
hues = np.zeros(255)

# Get the spread of hue in an image
# for image in images:
image = images[4]
hsv = np.array(image.convert('HSV'))
hue = hsv[:,:,0]
print("Total %s" % len(hue.flatten()))
values, boxes =  scipy.histogram(hue, 255, range=(0,255), density=True)
# print(values)

from pylab import *
plot(values)
Total 289280
Out[63]:
[<matplotlib.lines.Line2D at 0x7f0d7df97a58>]
In [137]:
import struct
import scipy
import scipy.misc
import scipy.cluster
import codecs
from IPython.display import Markdown, display, HTML

NUM_CLUSTERS = 64

def getColourAsHex(colour):
    return '#' + ''.join(format(c, '02x') for c in colour.astype(int))

def getColoursForImageByClusters(image):
    """
    Adapted on answers by
    Peter Hansen (http://stackoverflow.com/a/3244061)
    & Johan Mickos (http://stackoverflow.com/a/34140327)
    """
    im = image.copy().resize((150, 150))      # optional, to reduce time
    ar = scipy.misc.fromimage(im)
    shape = ar.shape
    ar = ar.reshape(scipy.product(shape[:2]), shape[2])

#     print( 'finding clusters')
    codes, dist = scipy.cluster.vq.kmeans(ar.astype(float), NUM_CLUSTERS)
#     print ('cluster centres:\n', codes)
    
    vecs, dist = scipy.cluster.vq.vq(ar, codes)         # assign codes
    counts, bins = scipy.histogram(vecs, len(codes))    # count occurrences
    
# When only looking for single color:    
#     index_max = scipy.argmax(counts)                    # find most frequent
#     peak = codes[index_max]
#     colour = ''.join(chr(c) for c in peak).encode('hex')
#     print( 'most frequent is %s (#%s)' % (peak, colour))
    
    percentages = 100 * counts / sum(counts)
#     print("Percentages", percentages)
#     colours = [ in codes]
#     print(colours)
    return list(zip(codes, percentages))

def getColoursForImageByPxAvg(image):
    im = image.copy().resize((8, 8))
    pixels = np.concatenate(scipy.misc.fromimage(im))
#     colours = ['#' + ''.join(format(c, '02x') for c in color.astype(int)) for color in pixels]
    percentages = np.zeros(len(pixels)) + (100 / len(pixels))
    return list(zip(pixels, percentages))

def getColoursAsHTML(colours):
    return " ".join(['<span style="background:%s">%s - (%s %%)</span>' % (getColourAsHex(colour[0]), getColourAsHex(colour[0]), colour[1]) for colour in colours]);

# for image in images:
#     display(image)
#     print("Method 1: clustering (%s clusters)" % NUM_CLUSTERS)
#     colours = getColoursForImageByClusters(image)
#     display(HTML(getColoursAsHTML(colours)))
    
#     print("Method 2: scaling")
#     colours = getColoursForImageByPxAvg(image)
#     display(HTML(getColoursAsHTML(colours)))
    
#     break
In [142]:
print("Get colours for all images")
imgColours = []
for image in images:
#     display(image)
    colours = getColoursForImageByClusters(image)
    imgColours.append(colours)
    output = getColoursAsHTML(colours)
    display(HTML(output))
Get colours for all images
#2d3530 - (1.24888888889 %) #322d51 - (1.36888888889 %) #9e9295 - (0.844444444444 %) #947d81 - (0.742222222222 %) #aeb5b6 - (1.02666666667 %) #b9b281 - (0.48 %) #a2686c - (0.817777777778 %) #56688c - (0.342222222222 %) #1a3472 - (1.51111111111 %) #a58111 - (1.36 %) #a32e10 - (0.924444444444 %) #3c4d76 - (1.10666666667 %) #b5a6aa - (2.28444444444 %) #b9b7ba - (5.18666666667 %) #120d0d - (1.48888888889 %) #aeadae - (5.11111111111 %) #b2bdd4 - (0.435555555556 %) #78443f - (1.13333333333 %) #acacb1 - (1.96 %) #a08a36 - (0.56 %) #941624 - (0.955555555556 %) #c7c0c3 - (0.511111111111 %) #5f5b5c - (0.773333333333 %) #bbb9c1 - (1.66666666667 %) #cf7f8b - (0.493333333333 %) #c26973 - (0.595555555556 %) #7c7273 - (0.751111111111 %) #b6b09c - (0.675555555556 %) #834225 - (1.04444444444 %) #c2bc98 - (0.684444444444 %) #b49399 - (1.02666666667 %) #b9b9ab - (0.906666666667 %) #c5b8a9 - (0.711111111111 %) #5b2624 - (0.728888888889 %) #b6afac - (2.29777777778 %) #96aec9 - (0.28 %) #c3a9ad - (1.64888888889 %) #bdbab6 - (1.48444444444 %) #b44f56 - (0.604444444444 %) #adb4c3 - (1.00444444444 %) #494446 - (1.22222222222 %) #d4b0b2 - (0.764444444444 %) #ca9f89 - (0.28 %) #aca16b - (0.511111111111 %) #a7a5a7 - (3.60888888889 %) #b0aeb1 - (4.83111111111 %) #5c8fae - (0.395555555556 %) #87575b - (1.05777777778 %) #a2323d - (0.768888888889 %) #b1afb4 - (3.67111111111 %) #b3b2b3 - (5.71555555556 %) #dba5a0 - (0.448888888889 %) #9f9250 - (1.00444444444 %) #251e1e - (2.08444444444 %) #aaa9ac - (6.57333333333 %) #c69ca2 - (0.937777777778 %) #b4b2b9 - (3.91555555556 %) #b18084 - (0.977777777778 %) #bbaeb3 - (3.39111111111 %) #c2b3b8 - (1.85777777778 %) #b6b4b6 - (6.26222222222 %) #3189b4 - (0.6 %) #8194ab - (0.342222222222 %)
#893676 - (1.36888888889 %) #d4a3cf - (0.791111111111 %) #b1a00a - (1.6 %) #972a24 - (1.69777777778 %) #31752f - (1.93333333333 %) #d74e51 - (1.90666666667 %) #dbcc37 - (1.00444444444 %) #ccbe83 - (1.04 %) #61acde - (0.835555555556 %) #96b2c4 - (2.77333333333 %) #73b27a - (0.564444444444 %) #bc997e - (1.88888888889 %) #733f48 - (1.58666666667 %) #742323 - (1.63111111111 %) #b93f6c - (1.64 %) #b55d5f - (1.40888888889 %) #203b38 - (1.21777777778 %) #bccdd9 - (1.99555555556 %) #dcedf5 - (2.74222222222 %) #465060 - (1.25777777778 %) #267c5f - (0.857777777778 %) #d76a92 - (1.52444444444 %) #dc7331 - (1.76888888889 %) #abbfcc - (2.53333333333 %) #3b9ee3 - (0.955555555556 %) #d84f75 - (1.86222222222 %) #3c6a96 - (1.17333333333 %) #eff9fc - (2.23111111111 %) #b44125 - (2.78666666667 %) #c3ab2d - (0.826666666667 %) #ca83b5 - (1.14666666667 %) #88722f - (1.30222222222 %) #b76f2f - (1.46666666667 %) #ddd6da - (1.17777777778 %) #6fab1f - (1.05777777778 %) #64245b - (0.96 %) #b0a4ad - (1.36444444444 %) #96528b - (3.38666666667 %) #162f5b - (1.30222222222 %) #758ea2 - (2.11111111111 %) #d13c2c - (1.42666666667 %) #cde1ed - (2.49333333333 %) #cf7f56 - (1.24444444444 %) #c8c2b8 - (0.844444444444 %) #a8a951 - (0.671111111111 %) #4b283a - (1.81777777778 %) #657687 - (1.40888888889 %) #a03e4d - (2.04 %) #937b70 - (1.16444444444 %) #228cd5 - (2.00888888889 %) #558058 - (1.16 %) #4281be - (1.40444444444 %) #1b171d - (1.80888888889 %) #b9d6ec - (1.82222222222 %) #154b86 - (1.26222222222 %) #998b98 - (1.30666666667 %) #7c5569 - (1.66666666667 %) #186fb3 - (1.00888888889 %) #8ba3b2 - (2.30666666667 %) #4e1615 - (1.55111111111 %) #a1c6e3 - (1.76444444444 %) #4f5325 - (0.737777777778 %) #ceb90c - (3.09333333333 %) #b1649a - (1.30666666667 %)
#cff5fe - (0.275555555556 %) #fdfdfe - (4.21333333333 %) #9c9ba7 - (0.204444444444 %) #f8c7d0 - (0.582222222222 %) #fcfcff - (11.9955555556 %) #f6f6f8 - (2.0 %) #fefeff - (2.0 %) #fef7fc - (1.76 %) #fbfbfe - (15.2133333333 %) #f8f651 - (0.28 %) #dde2ea - (0.302222222222 %) #f7fbfc - (6.46222222222 %) #fdfefd - (8.64 %) #ebf0f5 - (1.34666666667 %) #fddbe2 - (0.608888888889 %) #f9f685 - (0.12 %) #fdeaef - (0.8 %) #eff6fa - (2.48 %) #7fc566 - (0.404444444444 %) #fcfdfc - (8.10222222222 %) #b7e5fd - (0.213333333333 %) #6cb6e6 - (0.422222222222 %) #e4fcfe - (0.457777777778 %) #e5828f - (0.657777777778 %) #96cef2 - (0.337777777778 %) #f4f9fc - (4.11111111111 %) #da4750 - (1.57333333333 %) #fafefe - (2.03555555556 %) #c86a6c - (0.8 %) #ccf3c2 - (0.115555555556 %) #5fb249 - (0.751111111111 %) #525560 - (0.728888888889 %) #fdf7f4 - (1.16888888889 %) #fdfbb5 - (0.137777777778 %) #f8fdfe - (4.6 %) #f9fafc - (7.41333333333 %) #f394ab - (1.23555555556 %) #f3fee3 - (0.288888888889 %) #a6d895 - (0.16 %) #a84e47 - (0.724444444444 %) #3f414b - (1.16444444444 %) #bec2cb - (0.248888888889 %) #4065bd - (0.653333333333 %) #3baaf0 - (1.04888888889 %) #787c8a - (0.262222222222 %) #eeaeba - (0.897777777778 %)
#351a5b - (3.59111111111 %) #251442 - (1.69333333333 %) #401d7c - (2.52444444444 %) #56364e - (0.64 %) #623a7d - (0.991111111111 %) #212d1a - (0.946666666667 %) #fed616 - (0.666666666667 %) #554318 - (0.795555555556 %) #725b26 - (0.648888888889 %) #d62123 - (1.85333333333 %) #202306 - (0.693333333333 %) #653a6a - (1.17777777778 %) #2a1735 - (0.928888888889 %) #281419 - (3.64 %) #c7a49b - (0.302222222222 %) #9e7572 - (0.351111111111 %) #452164 - (2.00888888889 %) #311953 - (2.79111111111 %) #81574e - (0.564444444444 %) #4c2257 - (1.83555555556 %) #572b60 - (1.57333333333 %) #422171 - (1.68 %) #4e2666 - (2.06666666667 %) #593596 - (0.848888888889 %) #2c1720 - (4.47555555556 %) #2c1557 - (2.70222222222 %) #311565 - (1.85777777778 %) #472384 - (2.73777777778 %) #be3f48 - (0.546666666667 %) #692229 - (0.786666666667 %) #2a154d - (2.98666666667 %) #754f8c - (0.333333333333 %) #321b24 - (4.19555555556 %) #3c2d08 - (0.831111111111 %) #59306f - (1.70666666667 %) #6b3e43 - (0.817777777778 %) #351a43 - (1.35555555556 %) #fad239 - (1.98222222222 %) #af2224 - (1.22222222222 %) #922d35 - (0.915555555556 %) #4c2873 - (1.53777777778 %) #3e1b51 - (1.52 %) #381771 - (2.12888888889 %) #561211 - (0.853333333333 %) #37140c - (0.915555555556 %) #4a1f1d - (1.09333333333 %) #201213 - (1.33333333333 %) #4e2a8d - (2.18222222222 %) #9a752a - (0.773333333333 %) #3e1e5c - (2.42666666667 %) #3c2129 - (2.88444444444 %) #781515 - (0.551111111111 %) #724b6a - (0.515555555556 %) #553236 - (1.31555555556 %) #162016 - (1.32888888889 %) #ecdcd3 - (0.262222222222 %) #532f7f - (1.17777777778 %) #31191b - (2.70666666667 %) #200400 - (1.40888888889 %) #442345 - (0.848888888889 %) #3a1c20 - (2.2 %) #48262e - (1.86666666667 %) #10150e - (1.69777777778 %) #3b1d65 - (2.20444444444 %)
#e5fcff - (1.52 %) #81afd5 - (1.17333333333 %) #1c6fbc - (0.84 %) #f4d934 - (3.36 %) #c4edfe - (1.00888888889 %) #eaedf1 - (1.19555555556 %) #e8bc80 - (0.613333333333 %) #e3f2fd - (1.23111111111 %) #f6f4f2 - (2.24 %) #eddd60 - (0.893333333333 %) #b6e1fd - (1.59555555556 %) #cee5fa - (1.04444444444 %) #65b1ec - (1.42666666667 %) #f0ca96 - (0.568888888889 %) #e9a52e - (0.248888888889 %) #faf7fb - (1.54666666667 %) #f3f0e9 - (1.11555555556 %) #eee17a - (1.10666666667 %) #f5d72d - (3.36444444444 %) #91bde2 - (1.19555555556 %) #f2f3f8 - (4.94222222222 %) #90cefa - (1.30666666667 %) #f0fdfe - (1.64888888889 %) #3a82bc - (1.30222222222 %) #f4f2fc - (2.36444444444 %) #f6dc3b - (2.75555555556 %) #a4c7e6 - (0.968888888889 %) #5e5433 - (0.444444444444 %) #f3cf1c - (0.911111111111 %) #e2ab55 - (0.657777777778 %) #f4d425 - (2.78666666667 %) #f5b559 - (1.08 %) #eff5f5 - (1.46666666667 %) #5392c3 - (1.34666666667 %) #7ac0f5 - (1.37777777778 %) #f9ecbe - (1.03555555556 %) #d5f7ff - (0.928888888889 %) #f4df50 - (2.07111111111 %) #ecf3fd - (2.24888888889 %) #f9f0d0 - (1.06222222222 %) #e6b469 - (0.897777777778 %) #68a2cf - (1.40444444444 %) #dbeafa - (0.853333333333 %) #f2e36a - (1.58666666667 %) #ecf0f7 - (2.32888888889 %) #f5f6fc - (3.48 %) #fbf4de - (1.36 %) #fcf7eb - (1.29333333333 %) #f0f5fd - (2.63111111111 %) #c7dbef - (1.07555555556 %) #a4d9fc - (1.65333333333 %) #f7de45 - (1.87555555556 %) #f7d8af - (0.537777777778 %) #f1da42 - (1.34222222222 %) #f4ad46 - (1.24 %) #4da3e5 - (1.36444444444 %) #f5f4f8 - (4.60444444444 %) #3c94d8 - (1.62222222222 %) #efe48e - (0.888888888889 %) #f6e35c - (1.61333333333 %) #2683d2 - (1.42666666667 %) #b5d2ec - (1.17333333333 %) #f1e9a6 - (0.768888888889 %) #f1f0f4 - (2.98222222222 %)
#847a56 - (0.955555555556 %) #9c9e88 - (1.32888888889 %) #989a8d - (1.25777777778 %) #90845a - (0.524444444444 %) #827e64 - (2.76444444444 %) #919486 - (0.773333333333 %) #6b6b59 - (1.22666666667 %) #9c9d8e - (2.64444444444 %) #5e4619 - (0.666666666667 %) #98967b - (1.68444444444 %) #8f8a6d - (1.67555555556 %) #b3b399 - (0.493333333333 %) #5c5b45 - (1.24888888889 %) #9a9b8a - (2.27555555556 %) #a3a18b - (2.87555555556 %) #81816d - (2.71111111111 %) #9e9f92 - (1.71111111111 %) #a09e88 - (1.78666666667 %) #312e19 - (1.47111111111 %) #a7a48c - (1.55111111111 %) #4e370d - (0.924444444444 %) #87866f - (2.88888888889 %) #25220f - (1.27555555556 %) #9c9b85 - (1.91555555556 %) #898a74 - (2.67555555556 %) #866d28 - (0.991111111111 %) #8e8d76 - (1.88 %) #a2a293 - (1.41333333333 %) #8a8c7b - (1.18666666667 %) #979987 - (2.52444444444 %) #878268 - (2.04 %) #816418 - (1.36888888889 %) #929076 - (1.43555555556 %) #959582 - (2.16888888889 %) #726139 - (1.04888888889 %) #787356 - (1.37777777778 %) #51503b - (1.27555555556 %) #a5a593 - (2.29777777778 %) #8d763c - (0.497777777778 %) #68654c - (1.19555555556 %) #66552c - (0.893333333333 %) #3a3926 - (1.41777777778 %) #755812 - (1.10222222222 %) #797b6c - (1.72888888889 %) #93937e - (2.14222222222 %) #48452f - (1.32444444444 %) #171605 - (0.715555555556 %) #a0a08f - (2.05333333333 %) #aaaa95 - (1.74666666667 %) #828476 - (1.19555555556 %) #a7a590 - (3.42222222222 %) #9d9b7f - (1.06666666667 %) #a19975 - (0.271111111111 %) #989374 - (0.924444444444 %) #7c7960 - (2.35111111111 %) #717365 - (0.951111111111 %) #8f907c - (1.98666666667 %) #a3a085 - (1.18222222222 %) #787245 - (0.946666666667 %) #989067 - (0.417777777778 %) #a4a28f - (4.39111111111 %) #989882 - (1.82222222222 %) #9f9f8b - (1.93777777778 %)
#f1dcd9 - (2.94222222222 %) #c7f2aa - (0.866666666667 %) #afeb8f - (0.871111111111 %) #f8f6e6 - (2.42222222222 %) #f3b67f - (1.04444444444 %) #98d678 - (0.617777777778 %) #36136f - (0.417777777778 %) #f7f49e - (0.96 %) #6d1a21 - (0.404444444444 %) #fbe1c0 - (0.871111111111 %) #eb8284 - (1.48888888889 %) #f5ebe6 - (4.15555555556 %) #dbdde3 - (1.85333333333 %) #ce3c20 - (1.37333333333 %) #f9e2df - (4.78666666667 %) #ecf8d2 - (1.33333333333 %) #c2dda9 - (1.05777777778 %) #e87b47 - (1.07111111111 %) #fdf4ed - (6.02222222222 %) #e2eccb - (1.40888888889 %) #dbaaa4 - (1.51111111111 %) #daf6bf - (1.38222222222 %) #e55536 - (1.55111111111 %) #a3a6bb - (0.964444444444 %) #efe7dd - (2.53333333333 %) #8f7261 - (0.711111111111 %) #e2e8f4 - (1.53777777778 %) #fde6e7 - (3.32 %) #7e5998 - (0.471111111111 %) #984233 - (0.795555555556 %) #f5c8a8 - (1.23555555556 %) #f4f2fb - (1.16 %) #c8d6f8 - (0.862222222222 %) #ef9864 - (1.19111111111 %) #f8a9bf - (1.24444444444 %) #6477b2 - (0.964444444444 %) #97a9de - (1.08 %) #f2ee50 - (0.568888888889 %) #c25850 - (1.36888888889 %) #9884ab - (0.791111111111 %) #d57ea4 - (1.19555555556 %) #cacedb - (1.65777777778 %) #e8d2ce - (2.01777777778 %) #e96767 - (1.16888888889 %) #70c546 - (0.288888888889 %) #d4e6ba - (2.01333333333 %) #f8c3c7 - (1.50666666667 %) #f299a0 - (1.49333333333 %) #c2796f - (1.60888888889 %) #fbd4d6 - (1.88888888889 %) #fdfaf2 - (3.11111111111 %) #e2bcbc - (1.29777777778 %) #f5f17c - (0.946666666667 %) #a03a6c - (0.617777777778 %) #7f90c7 - (1.25777777778 %) #b9bccd - (1.15111111111 %) #fceee9 - (5.94222222222 %) #f9eede - (3.94222222222 %) #c9948d - (1.32444444444 %) #bf5d8c - (1.02666666667 %) #db97bf - (0.893333333333 %) #4b538e - (0.715555555556 %) #f6bde5 - (0.737777777778 %) #b0bfed - (0.982222222222 %)
#a8d5b3 - (0.96 %) #5b9134 - (1.43555555556 %) #303a30 - (2.83555555556 %) #ceeff8 - (1.20888888889 %) #686d6d - (0.622222222222 %) #9b794e - (1.27111111111 %) #1a2419 - (2.81777777778 %) #5f9359 - (0.622222222222 %) #805f32 - (1.90666666667 %) #73b036 - (1.41333333333 %) #98cb91 - (1.04888888889 %) #0b1613 - (2.52444444444 %) #a68f6a - (1.04 %) #020a08 - (2.80444444444 %) #fefefe - (10.2311111111 %) #684f30 - (1.41333333333 %) #5f340c - (1.70222222222 %) #6d4519 - (2.13777777778 %) #82ba49 - (1.45333333333 %) #273228 - (3.10222222222 %) #bfe8f7 - (1.21333333333 %) #816e52 - (1.78666666667 %) #8d6b3d - (1.48 %) #715f43 - (1.32888888889 %) #4f5c58 - (1.02666666667 %) #020202 - (2.66666666667 %) #6ca543 - (1.53777777778 %) #8b877c - (0.955555555556 %) #1d5c02 - (0.617777777778 %) #132020 - (1.66222222222 %) #ebf9fc - (1.28 %) #618b85 - (0.395555555556 %) #63a128 - (1.85333333333 %) #afdaf1 - (0.915555555556 %) #79a997 - (0.782222222222 %) #8bb9b4 - (0.946666666667 %) #dcf6fb - (1.30666666667 %) #121d13 - (2.95555555556 %) #4d2405 - (1.32888888889 %) #57931c - (2.22222222222 %) #487d22 - (0.986666666667 %) #aca48e - (0.702222222222 %) #07120c - (2.98666666667 %) #351404 - (1.42222222222 %) #48860e - (1.20888888889 %) #48793c - (0.484444444444 %) #f8fbfc - (1.52 %) #795324 - (1.82222222222 %) #8abe73 - (1.13333333333 %) #8c7c63 - (1.36444444444 %) #74ab65 - (1.08444444444 %) #412916 - (0.791111111111 %) #b7e4d6 - (0.964444444444 %) #1e4114 - (0.453333333333 %) #9fc8d4 - (0.862222222222 %) #39433b - (2.37777777778 %) #202b22 - (3.34666666667 %) #1c0501 - (1.05777777778 %) #357409 - (0.951111111111 %) #434d45 - (1.91555555556 %) #593c20 - (1.05333333333 %) #345e1e - (0.697777777778 %)
#968f8d - (3.02222222222 %) #39627b - (0.537777777778 %) #4c7086 - (0.764444444444 %) #97979e - (0.395555555556 %) #847a71 - (1.26222222222 %) #7e868e - (0.813333333333 %) #484440 - (0.511111111111 %) #858486 - (1.82666666667 %) #928a84 - (2.48888888889 %) #2d2f32 - (0.355555555556 %) #8a8585 - (4.49333333333 %) #878282 - (3.91111111111 %) #738898 - (0.493333333333 %) #848080 - (4.16 %) #8c9198 - (0.635555555556 %) #5e6b77 - (1.10222222222 %) #9a9293 - (2.52 %) #a58f7b - (0.222222222222 %) #8f8950 - (1.03555555556 %) #5f7b8f - (0.72 %) #7f4e26 - (0.524444444444 %) #878224 - (1.54666666667 %) #928f8a - (1.17777777778 %) #858015 - (1.10666666667 %) #918871 - (0.991111111111 %) #8f8587 - (1.20888888889 %) #847e7d - (4.72444444444 %) #979396 - (1.91555555556 %) #898c90 - (0.928888888889 %) #545557 - (0.697777777778 %) #969192 - (2.99111111111 %) #918988 - (3.06222222222 %) #6a757f - (1.16888888889 %) #775d45 - (0.511111111111 %) #968d87 - (1.09333333333 %) #74726f - (0.906666666667 %) #98918f - (4.38222222222 %) #7e7b7b - (2.51111111111 %) #3e4d5e - (0.96 %) #90633a - (0.337777777778 %) #505f6d - (1.01777777778 %) #958c8a - (1.52 %) #908b8c - (2.39555555556 %) #8a817f - (2.38666666667 %) #8e8784 - (3.19111111111 %) #8d8762 - (1.25777777778 %) #898342 - (1.4 %) #9e9793 - (2.09333333333 %) #908886 - (2.42666666667 %) #95775c - (0.36 %) #2a3b50 - (0.835555555556 %) #666562 - (0.853333333333 %) #846c57 - (0.595555555556 %) #9b9490 - (2.49333333333 %) #938f90 - (2.56888888889 %) #9c9596 - (1.98222222222 %) #8d8580 - (1.78666666667 %) #8c8888 - (2.76 %) #827f54 - (0.777777777778 %) #898334 - (1.69333333333 %) #a19999 - (0.408888888889 %) #757e86 - (1.17777777778 %)
#b39fbd - (0.546666666667 %) #558db3 - (0.862222222222 %) #6b6659 - (2.08888888889 %) #42392c - (2.40444444444 %) #898b8c - (2.18222222222 %) #7c483c - (0.862222222222 %) #979c71 - (1.11111111111 %) #c0b6b4 - (1.30666666667 %) #6b9ab5 - (1.56888888889 %) #86adc2 - (1.51555555556 %) #2c251a - (0.693333333333 %) #43494b - (0.937777777778 %) #ada6a4 - (2.08888888889 %) #91a3ae - (2.50666666667 %) #8e887b - (1.87555555556 %) #6a8fa5 - (0.991111111111 %) #a0a4a6 - (3.14666666667 %) #c5c28c - (0.835555555556 %) #d4acaa - (2.39555555556 %) #a3b0b6 - (1.39111111111 %) #383024 - (1.85333333333 %) #9f8bb5 - (0.737777777778 %) #acb687 - (1.52 %) #6d7a81 - (1.70666666667 %) #55595a - (1.48888888889 %) #9b9b9b - (3.51555555556 %) #4b4033 - (2.69333333333 %) #7f929c - (1.87111111111 %) #635c4b - (1.96 %) #577e99 - (1.22222222222 %) #d1cbca - (0.666666666667 %) #7d7974 - (2.01777777778 %) #55483a - (2.37333333333 %) #a6a399 - (1.84444444444 %) #8f9497 - (2.16444444444 %) #b6adac - (1.58222222222 %) #3a5a72 - (0.764444444444 %) #8a9ba4 - (2.15111111111 %) #b7bc9b - (1.35111111111 %) #629fc5 - (1.19555555556 %) #74a7c4 - (1.65333333333 %) #9db4c3 - (1.68 %) #427ba7 - (1.49333333333 %) #c6c0bf - (0.977777777778 %) #797363 - (1.51111111111 %) #5e6467 - (1.46666666667 %) #995a49 - (1.77777777778 %) #7f8182 - (1.83555555556 %) #a0a485 - (1.33777777778 %) #496c85 - (0.982222222222 %) #c8a3a1 - (1.34666666667 %) #6d6e6e - (1.89777777778 %) #c0b665 - (0.555555555556 %) #97928b - (2.08444444444 %) #96abb8 - (2.36888888889 %) #396d92 - (1.30222222222 %) #768690 - (1.62666666667 %) #5a5245 - (2.23555555556 %) #b18f8d - (0.688888888889 %) #858868 - (1.30666666667 %) #5f717c - (0.968888888889 %) #adbbc3 - (0.742222222222 %) #7ca0b2 - (1.58666666667 %) #777750 - (0.582222222222 %)
#7d6e78 - (3.12 %) #76696d - (1.50666666667 %) #a26f77 - (0.831111111111 %) #586792 - (0.697777777778 %) #a9988a - (1.26666666667 %) #a57a95 - (1.08444444444 %) #95537b - (0.537777777778 %) #a0a199 - (0.635555555556 %) #ac9aa1 - (3.93777777778 %) #6b6b87 - (0.648888888889 %) #b88fa5 - (1.38222222222 %) #b5a4aa - (3.80444444444 %) #8d9589 - (0.68 %) #a08e6f - (0.8 %) #718472 - (0.995555555556 %) #998d9c - (1.40888888889 %) #a26e55 - (0.24 %) #979a91 - (0.56 %) #a8945d - (0.537777777778 %) #97878c - (2.96444444444 %) #516e57 - (0.915555555556 %) #b6a49f - (1.62666666667 %) #3c5c44 - (0.764444444444 %) #a393a2 - (3.0 %) #6d759a - (0.888888888889 %) #aaa8a2 - (0.511111111111 %) #af9c95 - (1.54222222222 %) #b97b9e - (0.782222222222 %) #0c050e - (1.88 %) #7e7990 - (1.0 %) #627b65 - (0.84 %) #b19fa6 - (4.65333333333 %) #83737a - (4.18222222222 %) #b7a37c - (1.50222222222 %) #b39e6e - (0.826666666667 %) #a7979f - (4.38222222222 %) #b8a593 - (1.33333333333 %) #7e82a2 - (0.631111111111 %) #9c8c92 - (3.33777777778 %) #985b63 - (0.613333333333 %) #b7a387 - (1.49333333333 %) #887781 - (2.22222222222 %) #a4949b - (4.35555555556 %) #6b5f62 - (1.24888888889 %) #bca8b1 - (3.6 %) #9c6788 - (0.897777777778 %) #aa977c - (1.26666666667 %) #a09097 - (3.16444444444 %) #9390a7 - (0.648888888889 %) #918087 - (2.55111111111 %) #818d7f - (0.946666666667 %) #887b79 - (1.98222222222 %) #190d19 - (1.37777777778 %) #455988 - (0.546666666667 %) #8b8598 - (1.17333333333 %) #8d7e80 - (2.07555555556 %) #c09aaf - (1.17777777778 %) #604f57 - (0.742222222222 %) #ae8a99 - (1.32444444444 %) #ab7f87 - (0.937777777778 %) #a799a8 - (1.59111111111 %) #332830 - (0.471111111111 %) #4b3a47 - (0.52 %) #af668e - (0.831111111111 %)
#ac98d7 - (0.413333333333 %) #8a8fcb - (0.622222222222 %) #a6d1f4 - (3.35111111111 %) #44a7d9 - (0.4 %) #92bcea - (1.42222222222 %) #7d7fbd - (1.64 %) #96c0e4 - (3.85333333333 %) #98c4e7 - (3.52888888889 %) #a7af9e - (0.622222222222 %) #944d4c - (0.44 %) #de6dca - (0.36 %) #90c8f4 - (0.324444444444 %) #416db2 - (1.26666666667 %) #a2cdf0 - (2.49333333333 %) #86abd3 - (3.66222222222 %) #7cb0e3 - (0.56 %) #9d7594 - (1.05333333333 %) #6094d1 - (0.906666666667 %) #5d59a6 - (0.408888888889 %) #5c82bd - (0.866666666667 %) #376c84 - (0.591111111111 %) #62b6e4 - (0.302222222222 %) #49956c - (0.893333333333 %) #7e9fc5 - (2.32444444444 %) #8eb7df - (3.55111111111 %) #305da9 - (1.29333333333 %) #a3cef1 - (3.09333333333 %) #a0ccef - (3.06666666667 %) #d155a9 - (0.257777777778 %) #81a4ca - (4.28888888889 %) #6ea5a1 - (0.493333333333 %) #2c3e95 - (0.822222222222 %) #b072c2 - (0.4 %) #97b6dc - (0.955555555556 %) #9bc6eb - (2.55111111111 %) #b29f3f - (1.33333333333 %) #bc6d48 - (0.853333333333 %) #3075c6 - (0.72 %) #44525e - (0.404444444444 %) #9396a6 - (1.02666666667 %) #b9b5e8 - (0.44 %) #766cb4 - (1.26666666667 %) #7796bf - (1.41777777778 %) #9ecaec - (2.84888888889 %) #4e83a5 - (0.475555555556 %) #a7d4f6 - (3.48 %) #89afd5 - (4.21777777778 %) #a4d0f3 - (5.28 %) #2ca5e1 - (0.844444444444 %) #4881c9 - (0.875555555556 %) #729ed6 - (0.817777777778 %) #669382 - (0.737777777778 %) #92bce2 - (4.49333333333 %) #8ab0db - (2.87555555556 %) #968a37 - (0.92 %) #aba36b - (0.911111111111 %) #85a8ce - (3.76444444444 %) #cd91d9 - (0.582222222222 %) #a5b3be - (0.928888888889 %) #8eb4db - (3.79111111111 %) #966074 - (0.96 %) #368c4b - (0.653333333333 %)
#fefeff - (66.7466666667 %) #faeb6e - (1.53333333333 %) #ecf6f8 - (2.12444444444 %) #c3c5c9 - (0.36 %) #56585d - (0.466666666667 %) #818183 - (0.431111111111 %) #ee0c59 - (1.10666666667 %) #efb0ec - (0.124444444444 %) #a9a9a5 - (0.391111111111 %) #fcfdfe - (2.30666666667 %) #d9e0e2 - (0.582222222222 %) #e4eff1 - (1.20444444444 %) #8e682a - (0.342222222222 %) #ce994c - (0.315555555556 %) #f7c735 - (0.728888888889 %) #fdfdfc - (7.35111111111 %) #f9f4ad - (0.382222222222 %) #f8c6b1 - (0.4 %) #f9de55 - (1.62666666667 %) #f7fcfd - (2.63111111111 %) #f2f9fb - (3.08 %) #f3f1f1 - (0.746666666667 %) #f9f089 - (1.01777777778 %) #fcf9d3 - (0.346666666667 %) #f9f9f9 - (2.01777777778 %) #51221f - (0.413333333333 %) #fdfdf0 - (0.831111111111 %) #eab18a - (0.391111111111 %)
#b3b5b6 - (1.60888888889 %) #8d4b62 - (0.888888888889 %) #a0a29b - (2.69333333333 %) #985e94 - (0.662222222222 %) #c17ba8 - (0.44 %) #a8aaa6 - (4.27555555556 %) #b1b2b2 - (2.64888888889 %) #434d56 - (0.546666666667 %) #ad929a - (0.346666666667 %) #965d78 - (1.67555555556 %) #d3b88b - (0.168888888889 %) #9fa49f - (2.25777777778 %) #a7aaaa - (3.33777777778 %) #90908c - (1.28 %) #5e8998 - (0.244444444444 %) #dfe0e2 - (1.35555555556 %) #d2d4d7 - (1.52888888889 %) #06739b - (0.346666666667 %) #9da17b - (0.462222222222 %) #9ca29e - (2.63555555556 %) #959692 - (2.12444444444 %) #809da9 - (0.32 %) #1d2328 - (0.884444444444 %) #9d9e9c - (2.15111111111 %) #c55e4d - (0.426666666667 %) #dadcde - (1.84444444444 %) #bbbcbd - (1.68444444444 %) #95b1ba - (0.24 %) #c5c8c9 - (1.42666666667 %) #6e737e - (0.768888888889 %) #cacdce - (1.43111111111 %) #aaaca9 - (3.98222222222 %) #9fa19f - (2.40444444444 %) #a3a6a0 - (2.75111111111 %) #ad678c - (1.19111111111 %) #b6a0ab - (0.4 %) #cfd1d3 - (1.79555555556 %) #9a9d9b - (2.75111111111 %) #d798c3 - (0.231111111111 %) #aeb0ae - (4.14666666667 %) #879e54 - (0.853333333333 %) #bec0c2 - (1.47111111111 %) #a4a4a4 - (1.95555555556 %) #808286 - (0.804444444444 %) #a4a8a6 - (3.12888888889 %) #a47b92 - (0.542222222222 %) #a0a5a4 - (2.30666666667 %) #c2c4c5 - (1.32 %) #58626c - (0.577777777778 %) #acaeab - (3.47111111111 %) #a64131 - (0.986666666667 %) #a6a8a3 - (3.08 %) #aaacaf - (1.60888888889 %) #045675 - (1.63555555556 %) #b6b8ba - (1.37777777778 %) #d6d8da - (1.70666666667 %) #9c9f99 - (3.01777777778 %) #a1a39f - (2.91555555556 %) #316e85 - (0.293333333333 %) #989b97 - (3.73333333333 %) #ad8b65 - (0.408888888889 %) #a27e40 - (0.444444444444 %)
In [74]:
hues

for image in images:
    img = image.copy().resize((150, 150)).convert('HSV')      # optional scale, to reduce time
    ar = np.array(img)
    shape = ar.shape
    ar = ar.reshape(scipy.product(shape[:2]), shape[2])
    
    print(ar)
    break
#     Find a way to limit these per image without sacrificing the maximums in the detail
#     Finding maximums, or _clustering_!
    
[[[233   3 166]
  [233   3 167]
  [233   3 167]
  ..., 
  [198   4 173]
  [198   4 172]
  [198   4 172]]

 [[233   3 167]
  [233   3 167]
  [233   3 168]
  ..., 
  [198   4 173]
  [198   4 172]
  [198   4 172]]

 [[233   3 168]
  [233   3 168]
  [233   3 169]
  ..., 
  [198   4 173]
  [198   4 172]
  [198   4 172]]

 ..., 
 [[  7  17 178]
  [  3  16 175]
  [  3  15 177]
  ..., 
  [205   8 174]
  [221   7 172]
  [221   7 171]]

 [[  3 115  75]
  [  3 109  79]
  [  3  99  87]
  ..., 
  [  0  21 164]
  [  2  24 155]
  [  7  29 148]]

 [[ 16 186 111]
  [ 17 179 112]
  [ 17 184 109]
  ..., 
  [ 13 172 105]
  [ 15 177 105]
  [ 15 177 105]]]
[[233   3 166]
 [233   3 167]
 [233   3 167]
 ..., 
 [ 13 172 105]
 [ 15 177 105]
 [ 15 177 105]]
In [153]:
#concatenate found colours of all images into one
allColours = sum(imgColours)
In [182]:
import colorsys
import math

# box 160, because center or circle = 100 => +/- 50 => + r of colour circle (max: 10) => 160
svg = '<svg viewBox="-160 -160 320 320" xmlns="http://www.w3.org/2000/svg">'

radius = 100

for colour in allColours:
    rgb, percentage = colour
    rgbNorm = rgb/255
    hsv = colorsys.rgb_to_hsv(rgbNorm[0], rgbNorm[1], rgbNorm[2])
    # find position on circle
    radians = 2 * math.pi * hsv[0]
    x = math.cos(radians)
    y = math.sin(radians)
    
    # based on saturation, we move inwards/outwards
    # min = 0.5, max = 1.5 (dus + 0.5)
    pos = np.array([x,y]) * (0.5 + hsv[1]) * radius
    # Posibilitiy: determine position based on avg(saturation, value) => dark & grey inside, shiney and colourful outside 
    # pos = np.array([x,y]) * (0.5 + (hsv[1]+hsv[2])/2) * radius
    r = max(1,-10/percentage+10) # as r, we converge to maximum radius 10, but don't want to get smaller radi then 1
    c = '<circle cx="%s" cy="%s" r="%s" style="fill:%s" />' % (pos[0], pos[1], r, getColourAsHex(rgb))
    svg += c

svg += "</svg>"

print (svg)
<svg viewBox="-160 -160 320 320" xmlns="http://www.w3.org/2000/svg"><circle cx="-51.7001271219" cy="38.030374836" r="1.99288256228" style="fill:#2d3530" /><circle cx="-34.4049859725" cy="-88.1541524636" r="2.69480519481" style="fill:#322d51" /><circle cx="55.1844093851" cy="-14.8880599213" r="1" style="fill:#9e9295" /><circle cx="64.1409867305" cy="-11.6760039413" r="1" style="fill:#947d81" /><circle cx="-53.8799118995" cy="-6.67364078148" r="1" style="fill:#aeb5b6" /><circle cx="49.8265732445" cy="63.0938334354" r="1" style="fill:#b9b281" /><circle cx="85.6164653701" cy="-5.97282016149" r="1" style="fill:#a2686c" /><circle cx="-67.7806952611" cy="-57.1290473968" r="1" style="fill:#56688c" /><circle cx="-94.2199518224" cy="-85.5727574281" r="3.38235294118" style="fill:#1a3472" /><circle cx="97.9360437597" cy="99.0421921816" r="2.64705882353" style="fill:#a58111" /><circle cx="136.682664482" cy="30.1582894959" r="1" style="fill:#a32e10" /><circle cx="-72.9827896955" cy="-67.1111153809" r="1" style="fill:#3c4d76" /><circle cx="55.5473329927" cy="-17.6261594244" r="5.62256809339" style="fill:#b5a6aa" /><circle cx="9.28543688052" cy="-50.927773954" r="8.07197943445" style="fill:#b9b7ba" /><circle cx="75.866149531" cy="-7.01833824768" r="3.28358208955" style="fill:#120d0d" /><circle cx="30.490340243" cy="-40.4128749116" r="8.04347826087" style="fill:#aeadae" /><circle cx="-50.0459313815" cy="-42.8840080302" r="1" style="fill:#b2bdd4" /><circle cx="97.0848112192" cy="8.76996019077" r="1.17647058824" style="fill:#78443f" /><circle cx="-26.9794619317" cy="-45.6533383804" r="4.89795918367" style="fill:#acacb1" /><circle cx="78.7620605233" cy="85.5689892158" r="1" style="fill:#a08a36" /><circle cx="133.940755495" cy="-15.2433807178" r="1" style="fill:#941624" /><circle cx="46.7748268561" cy="-25.4478295459" r="1" style="fill:#c7c0c3" /><circle cx="52.8332126997" cy="-13.3162231796" r="1" style="fill:#5f5b5c" /><circle cx="-12.8003685331" cy="-52.2678380534" r="4.0" style="fill:#bbb9c1" /><circle cx="87.4905512737" cy="-14.472087817" r="1" style="fill:#cf7f8b" /><circle cx="94.9606169688" cy="-11.1487826946" r="1" style="fill:#c26973" /><circle cx="57.6922160979" cy="-7.25209869362" r="1" style="fill:#7c7273" /><circle cx="45.6502875839" cy="45.6681154007" r="1" style="fill:#b6b09c" /><circle cx="115.412863494" cy="39.1679139787" r="1" style="fill:#834225" /><circle cx="44.3086458001" cy="56.2202345028" r="1" style="fill:#c2bc98" /><circle cx="67.2749135969" cy="-12.5873143773" r="1" style="fill:#b49399" /><circle cx="28.1362545267" cy="50.1329439513" r="1" style="fill:#b9b9ab" /><circle cx="54.4339086644" cy="33.8934639346" r="1" style="fill:#c5b8a9" /><circle cx="109.972627162" cy="4.55373971686" r="1" style="fill:#5b2624" /><circle cx="52.5400812811" cy="16.7267532572" r="5.64796905222" style="fill:#b6afac" /><circle cx="-64.3428140012" cy="-39.674543242" r="1" style="fill:#96aec9" /><circle cx="62.2980819326" cy="-10.2184932594" r="3.93530997305" style="fill:#c3a9ad" /><circle cx="43.3706982573" cy="32.0961359182" r="3.26347305389" style="fill:#bdbab6" /><circle cx="105.828347973" cy="-7.77916082381" r="1" style="fill:#b44f56" /><circle cx="-46.9739182207" cy="-39.7942245784" r="1" style="fill:#adb4c3" /><circle cx="48.2207685172" cy="-28.401383484" r="1.81818181818" style="fill:#494446" /><circle cx="66.7268629437" cy="-4.88165722648" r="1" style="fill:#d4b0b2" /><circle cx="76.9108399682" cy="28.9602929706" r="1" style="fill:#ca9f89" /><circle cx="56.4745064464" cy="66.8975379657" r="1" style="fill:#aca16b" /><circle cx="38.7823679089" cy="-33.8980359211" r="7.22906403941" style="fill:#a7a5a7" /><circle cx="12.8832189792" cy="-50.1252439187" r="7.93008279669" style="fill:#b0aeb1" /><circle cx="-89.7050837262" cy="-37.7458873857" r="1" style="fill:#5c8fae" /><circle cx="85.0303294016" cy="-8.56530494886" r="1" style="fill:#87575b" /><circle cx="118.458974132" cy="-12.8598079886" r="1" style="fill:#a2323d" /><circle cx="-10.6243428021" cy="-51.6139803395" r="7.27602905569" style="fill:#b1afb4" /><circle cx="25.0735085036" cy="-44.2982304825" r="8.25038880249" style="fill:#b3b2b3" /><circle cx="76.4964267219" cy="7.03650410942" r="1" style="fill:#dba5a0" /><circle cx="63.8450926261" cy="76.5128800955" r="1" style="fill:#9f9250" /><circle cx="69.1440226003" cy="1.41281607228" r="5.20255863539" style="fill:#251e1e" /><circle cx="-3.81432029759" cy="-51.2235939864" r="8.47870182556" style="fill:#aaa9ac" /><circle cx="70.1341684605" cy="-9.46786892413" r="1" style="fill:#c69ca2" /><circle cx="-15.8804812048" cy="-51.1766396342" r="7.44608399546" style="fill:#b4b2b9" /><circle cx="77.3662300517" cy="-7.62134392594" r="1" style="fill:#b18084" /><circle cx="51.4243563571" cy="-23.6144748565" r="7.05111402359" style="fill:#bbaeb3" /><circle cx="53.7542637996" cy="-20.507324418" r="4.61722488038" style="fill:#c2b3b8" /><circle cx="29.1723429969" cy="-42.066727462" r="8.40312278211" style="fill:#b6b4b6" /><circle cx="-115.434528915" cy="-40.8633545099" r="1" style="fill:#3189b4" /><circle cx="-62.7093094063" cy="-39.973015714" r="1" style="fill:#8194ab" /><circle cx="75.77313674" cy="-80.3001533429" r="2.69480519481" style="fill:#893676" /><circle cx="43.9292490651" cy="-58.4636930613" r="1" style="fill:#d4a3cf" /><circle cx="85.105889455" cy="116.378147726" r="3.75" style="fill:#b1a00a" /><circle cx="125.647401466" cy="7.22389990365" r="4.10994764398" style="fill:#972a24" /><circle cx="-52.6413232165" cy="95.7532725168" r="4.8275862069" style="fill:#31752f" /><circle cx="113.503264686" cy="-2.41799444741" r="4.75524475524" style="fill:#d74e51" /><circle cx="72.5551643884" cy="101.479088416" r="1" style="fill:#dbcc37" /><circle cx="56.7998901103" cy="63.977686726" r="1" style="fill:#ccbe83" /><circle cx="-97.0801199459" cy="-43.2145691517" r="1" style="fill:#61acde" /><circle cx="-67.3788101055" cy="-28.8784000075" r="6.39423076923" style="fill:#96b2c4" /><circle cx="-51.4189433638" cy="68.0175462234" r="1" style="fill:#73b27a" /><circle cx="74.0085484777" cy="37.316927523" r="4.70588235294" style="fill:#bc997e" /><circle cx="93.4557749266" cy="-17.5372649048" r="3.6974789916" style="fill:#733f48" /><circle cx="119.656253515" cy="-0.134032665409" r="3.86920980926" style="fill:#742323" /><circle cx="107.252602177" cy="-43.2395274816" r="3.90243902439" style="fill:#b93f6c" /><circle cx="98.8109475315" cy="-2.73318376527" r="2.90220820189" style="fill:#b55d5f" /><circle cx="-94.1397207643" cy="12.9273750084" r="1.78832116788" style="fill:#203b38" /><circle cx="-57.9355285761" cy="-25.683269087" r="4.98886414254" style="fill:#bccdd9" /><circle cx="-56.9724652963" cy="-19.1809334237" r="6.35332252836" style="fill:#dcedf5" /><circle cx="-61.6771356486" cy="-46.0628007417" r="2.04946996466" style="fill:#465060" /><circle cx="-111.990045322" cy="41.6310142886" r="1" style="fill:#267c5f" /><circle cx="93.4572504264" cy="-37.2704605064" r="3.44023323615" style="fill:#d76a92" /><circle cx="117.270409642" cy="49.8433213855" r="4.34673366834" style="fill:#dc7331" /><circle cx="-60.5131381555" cy="-26.3446819755" r="6.05263157895" style="fill:#abbfcc" /><circle cx="-112.292853146" cy="-51.8021135638" r="1" style="fill:#3b9ee3" /><circle cx="108.463873764" cy="-32.781245527" r="4.63007159905" style="fill:#d84f75" /><circle cx="-96.1245341092" cy="-53.114374767" r="1.47727272727" style="fill:#3c6a96" /><circle cx="-53.8455720003" cy="-11.9840774128" r="5.51792828685" style="fill:#eff9fc" /><circle cx="126.494902735" cy="25.8191943636" r="6.41148325359" style="fill:#b44125" /><circle cx="80.909139737" cy="97.5867714902" r="1" style="fill:#c3ab2d" /><circle cx="63.4648698217" cy="-56.7661951673" r="1.27906976744" style="fill:#ca83b5" /><circle cx="81.3075705182" cy="81.5200413843" r="2.32081911263" style="fill:#88722f" /><circle cx="109.190744591" cy="59.109265586" r="3.18181818182" style="fill:#b76f2f" /><circle cx="43.1272081854" cy="-31.7265294967" r="1.50943396226" style="fill:#ddd6da" /><circle cx="10.1149138329" cy="131.460051181" r="1" style="fill:#6fab1f" /><circle cx="71.1044168722" cy="-88.4358750818" r="1" style="fill:#64245b" /><circle cx="38.9813922811" cy="-41.1476248496" r="2.67100977199" style="fill:#b0a4ad" /><circle cx="61.3077040017" cy="-72.653846575" r="7.04724409449" style="fill:#96528b" /><circle cx="-99.3778936531" cy="-76.9723436628" r="2.32081911263" style="fill:#162f5b" /><circle cx="-69.4564503924" cy="-34.4322170968" r="5.26315789474" style="fill:#758ea2" /><circle cx="127.957625241" cy="13.3442063644" r="2.99065420561" style="fill:#d13c2c" /><circle cx="-59.0239747785" cy="-23.6650538255" r="5.98930481283" style="fill:#cde1ed" /><circle cx="101.621706804" cy="36.8802161946" r="1.96428571429" style="fill:#cf7f56" /><circle cx="45.7099420874" cy="35.1819191576" r="1" style="fill:#c8c2b8" /><circle cx="50.1521660848" cy="88.3349754751" r="1" style="fill:#a8a951" /><circle cx="82.1535462653" cy="-50.389429952" r="4.49877750611" style="fill:#4b283a" /><circle cx="-65.1998097624" cy="-36.7758995017" r="2.90220820189" style="fill:#657687" /><circle cx="109.763816446" cy="-17.2515784595" r="5.09803921569" style="fill:#a03e4d" /><circle cx="70.0335124923" cy="22.157324434" r="1.41221374046" style="fill:#937b70" /><circle cx="-121.806810477" cy="-55.4002457726" r="5.02212389381" style="fill:#228cd5" /><circle cx="-47.4079244742" cy="69.2245073841" r="1.37931034483" style="fill:#558058" /><circle cx="-100.259091461" cy="-56.7904752178" r="2.87974683544" style="fill:#4281be" /><circle cx="16.6754570645" cy="-71.1534433124" r="4.47174447174" style="fill:#1b171d" /><circle cx="-64.7901954892" cy="-30.5416847062" r="4.51219512195" style="fill:#b9d6ec" /><circle cx="-114.753594051" cy="-69.7507064724" r="2.07746478873" style="fill:#154b86" /><circle cx="33.5456435821" cy="-48.3524582334" r="2.34693877551" style="fill:#998b98" /><circle cx="69.0959237326" cy="-42.3360451565" r="4.0" style="fill:#7c5569" /><circle cx="-122.541372802" cy="-60.0977338448" r="1" style="fill:#186fb3" /><circle cx="-65.8717801014" cy="-28.7475225001" r="5.66473988439" style="fill:#8ba3b2" /><circle cx="122.158100422" cy="1.78891004098" r="3.55300859599" style="fill:#4e1615" /><circle cx="-70.944168933" cy="-34.7348592389" r="4.33249370277" style="fill:#a1c6e3" /><circle cx="43.7659612002" cy="95.2838709723" r="1" style="fill:#4f5325" /><circle cx="85.9790292451" cy="115.577402067" r="6.76724137931" style="fill:#ceb90c" /><circle cx="69.3165186383" cy="-62.595503182" r="2.34693877551" style="fill:#b1649a" /><circle cx="-67.2963843543" cy="-13.781657355" r="1" style="fill:#cff5fe" /><circle cx="-13.9186778924" cy="-48.7221844401" r="7.62658227848" style="fill:#fdfdfe" /><circle cx="-22.5085022347" cy="-52.6612588421" r="1" style="fill:#9c9ba7" /><circle cx="68.4466930758" cy="-13.6713476293" r="1" style="fill:#f8c7d0" /><circle cx="-39.0007344425" cy="-33.1323223724" r="9.16635791034" style="fill:#fcfcff" /><circle cx="-22.9523549012" cy="-45.4057855494" r="5.0" style="fill:#f6f6f8" /><circle cx="-44.8832173002" cy="-22.2977129148" r="5.0" style="fill:#fefeff" /><circle cx="37.1279608472" cy="-37.4305311546" r="4.31818181818" style="fill:#fef7fc" /><circle cx="-36.1103047373" cy="-36.2293910559" r="9.34268185802" style="fill:#fbfbfe" /><circle cx="59.9186990808" cy="100.706016708" r="1" style="fill:#f8f651" /><circle cx="-44.9215019805" cy="-32.2131313531" r="1" style="fill:#dde2ea" /><circle cx="-51.2862161357" cy="-9.32049864175" r="8.45254470426" style="fill:#f7fbfc" /><circle cx="-43.0704430622" cy="26.4657295698" r="8.84259259259" style="fill:#fdfefd" /><circle cx="-47.3506807652" cy="-26.0589840881" r="2.57425742574" style="fill:#ebf0f5" /><circle cx="61.9789758786" cy="-12.1652155793" r="1" style="fill:#fddbe2" /><circle cx="50.0130079986" cy="82.624886561" r="1" style="fill:#f9f685" /><circle cx="55.1961029201" cy="-16.0239503977" r="1" style="fill:#fdeaef" /><circle cx="-49.5937267283" cy="-22.116426438" r="5.96774193548" style="fill:#eff6fa" /><circle cx="-23.9746669119" cy="95.2113459484" r="1" style="fill:#7fc566" /><circle cx="-26.9051531593" cy="42.8706531033" r="8.76577070762" style="fill:#fcfdfc" /><circle cx="-72.7472463994" cy="-27.1562213294" r="1" style="fill:#b7e5fd" /><circle cx="-94.3518476914" cy="-41.0216284296" r="1" style="fill:#6cb6e6" /><circle cx="-59.8019020778" cy="-6.71007392206" r="1" style="fill:#e4fcfe" /><circle cx="92.187804643" cy="-12.7854288862" r="1" style="fill:#e5828f" /><circle cx="-80.8604414595" cy="-34.9526419608" r="1" style="fill:#96cef2" /><circle cx="-49.6980618963" cy="-19.4119803141" r="7.56756756757" style="fill:#f4f9fc" /><circle cx="117.104917446" cy="-7.81701990351" r="3.64406779661" style="fill:#da4750" /><circle cx="-51.6045193105" cy="-1.62088369478" r="5.08733624454" style="fill:#fafefe" /><circle cx="96.8970547587" cy="-2.29494046647" r="1" style="fill:#c86a6c" /><circle cx="-21.9586469749" cy="66.7168411579" r="1" style="fill:#ccf3c2" /><circle cx="-32.7392582127" cy="103.891884564" r="1" style="fill:#5fb249" /><circle cx="-43.4084396514" cy="-46.9137493436" r="1" style="fill:#525560" /><circle cx="51.4787991496" cy="14.5681481869" r="1.44486692015" style="fill:#fdf7f4" /><circle cx="41.2944850155" cy="66.7442475099" r="1" style="fill:#fdfbb5" /><circle cx="-51.023288711" cy="-12.0927415682" r="7.82608695652" style="fill:#f8fdfe" /><circle cx="-29.4825492594" cy="-41.6275944199" r="8.65107913669" style="fill:#f9fafc" /><circle cx="85.9600058766" cy="-22.6327736898" r="1.90647482014" style="fill:#f394ab" /><circle cx="7.96920600947" cy="60.0660789272" r="1" style="fill:#f3fee3" /><circle cx="-20.8346766116" cy="78.3823155499" r="1" style="fill:#a6d895" /><circle cx="107.072097397" cy="7.62266096389" r="1" style="fill:#a84e47" /><circle cx="-41.8359563738" cy="-51.9541443071" r="1.41221374046" style="fill:#3f414b" /><circle cx="-41.9319691235" cy="-38.0672015107" r="1" style="fill:#bec2cb" /><circle cx="-85.9966486705" cy="-78.1668358373" r="1" style="fill:#4065bd" /><circle cx="-114.900440983" cy="-49.8910181805" r="1" style="fill:#3baaf0" /><circle cx="-40.9579687979" cy="-47.6932938587" r="1" style="fill:#787c8a" /><circle cx="75.4040000522" cy="-15.1081137725" r="1" style="fill:#eeaeba" /><circle cx="-10.794478247" cy="-120.679417798" r="7.21534653465" style="fill:#351a5b" /><circle cx="-14.5797756236" cy="-118.597564647" r="4.09448818898" style="fill:#251442" /><circle cx="-17.6177090163" cy="-125.103498119" r="6.03873239437" style="fill:#401d7c" /><circle cx="61.8491533309" cy="-60.6736166064" r="1" style="fill:#56364e" /><circle cx="10.1338534434" cy="-102.973540204" r="1" style="fill:#623a7d" /><circle cx="-12.3541099963" cy="91.3464278828" r="1" style="fill:#212d1a" /><circle cx="91.3464204073" cy="107.601280276" r="1" style="fill:#fed616" /><circle cx="88.9521570701" cy="82.7698974599" r="1" style="fill:#554318" /><circle cx="86.1139643359" cy="78.5365242869" r="1" style="fill:#725b26" /><circle cx="134.12528493" cy="-1.42297152439" r="4.60431654676" style="fill:#d62123" /><circle cx="51.3566382183" cy="120.645961403" r="1" style="fill:#202306" /><circle cx="37.819929331" cy="-87.7091925977" r="1.50943396226" style="fill:#653a6a" /><circle cx="17.4804819021" cy="-104.129566021" r="1" style="fill:#2a1735" /><circle cx="94.7624078645" cy="-27.7614739031" r="7.25274725275" style="fill:#281419" /><circle cx="70.0423334682" cy="16.3307670423" r="1" style="fill:#c7a49b" /><circle cx="77.5578318008" cy="6.18894542362" r="1" style="fill:#9e7572" /><circle cx="4.58875168393" cy="-116.156137914" r="5.02212389381" style="fill:#452164" /><circle cx="-10.6222603871" cy="-118.348803213" r="6.41719745223" style="fill:#311953" /><circle cx="87.6333178297" cy="16.2100221185" r="1" style="fill:#81574e" /><circle cx="32.5526919781" cy="-105.18829697" r="4.55205811138" style="fill:#4c2257" /><circle cx="36.6869629459" cy="-98.4871265436" r="3.64406779661" style="fill:#572b60" /><circle cx="-10.0574445905" cy="-120.268560864" r="4.04761904762" style="fill:#422171" /><circle cx="14.0419475347" cy="-111.383979844" r="5.16129032258" style="fill:#4e2666" /><circle cx="-15.5173968673" cy="-113.769419857" r="1" style="fill:#593596" /><circle cx="88.4325968997" cy="-40.6524557319" r="7.76564051639" style="fill:#2c1720" /><circle cx="-18.8786558947" cy="-124.464162149" r="6.29934210526" style="fill:#2c1557" /><circle cx="-19.1493728008" cy="-127.923208234" r="4.61722488038" style="fill:#311565" /><circle cx="-16.8841182098" cy="-121.651785268" r="6.3474025974" style="fill:#472384" /><circle cx="116.361092862" cy="-8.5555223227" r="1" style="fill:#be3f48" /><circle cx="116.604175702" cy="-12.4240391341" r="1" style="fill:#692229" /><circle cx="-15.9318060114" cy="-120.592794754" r="6.65178571429" style="fill:#2a154d" /><circle cx="12.9534789238" cy="-92.5434218412" r="1" style="fill:#754f8c" /><circle cx="87.1496452298" cy="-38.3545952864" r="7.61652542373" style="fill:#321b24" /><circle cx="99.43756559" cy="93.2759278175" r="1" style="fill:#3c2d08" /><circle cx="17.012506842" cy="-105.357865673" r="4.140625" style="fill:#59306f" /><circle cx="91.2754174002" cy="-10.8758966981" r="1" style="fill:#6b3e43" /><circle cx="17.6385564807" cy="-109.888536688" r="2.62295081967" style="fill:#351a43" /><circle cx="85.6764192776" cy="93.7407530934" r="4.95515695067" style="fill:#fad239" /><circle cx="130.467324125" cy="-1.77174818313" r="1.81818181818" style="fill:#af2224" /><circle cx="118.162864808" cy="-9.56545248422" r="1" style="fill:#922d35" /><circle cx="-1.87771585461" cy="-115.086978376" r="3.49710982659" style="fill:#4c2873" /><circle cx="17.3839627356" cy="-114.897123451" r="3.42105263158" style="fill:#3e1b51" /><circle cx="-18.9731182613" cy="-127.609176398" r="5.30271398747" style="fill:#381771" /><circle cx="130.063600885" cy="2.13063573463" r="1" style="fill:#561211" /><circle cx="124.697500684" cy="22.7590417068" r="1" style="fill:#37140c" /><circle cx="110.299205633" cy="4.85007025551" r="1" style="fill:#4a1f1d" /><circle cx="92.6976170338" cy="-8.08106553434" r="2.5" style="fill:#201213" /><circle cx="-17.065922218" cy="-119.068371697" r="5.41751527495" style="fill:#4e2a8d" /><circle cx="93.6660862467" cy="78.8525596748" r="1" style="fill:#9a752a" /><circle cx="2.03903470477" cy="-117.049053179" r="5.87912087912" style="fill:#3e1e5c" /><circle cx="90.7621375814" cy="-28.726004664" r="6.53312788906" style="fill:#3c2129" /><circle cx="131.936197399" cy="0.207206894943" r="1" style="fill:#781515" /><circle cx="56.9372715528" cy="-61.4417832519" r="1" style="fill:#724b6a" /><circle cx="91.0749142237" cy="-10.7096238145" r="2.39864864865" style="fill:#553236" /><circle cx="-41.7138016851" cy="71.9302953476" r="2.47491638796" style="fill:#162016" /><circle cx="56.3400967803" cy="22.0554428496" r="1" style="fill:#ecdcd3" /><circle cx="-5.28375835815" cy="-112.310458172" r="1.50943396226" style="fill:#532f7f" /><circle cx="98.8498961534" cy="-10.5791521271" r="6.30541871921" style="fill:#31191b" /><circle cx="147.606424279" cy="21.0085021437" r="2.90220820189" style="fill:#200400" /><circle cx="46.1717107051" cy="-88.1394181317" r="1" style="fill:#442345" /><circle cx="100.468997152" cy="-15.6547977352" r="5.45454545455" style="fill:#3a1c20" /><circle cx="94.27052588" cy="-22.3553807276" r="4.64285714286" style="fill:#48262e" /><circle cx="-16.8871145063" cy="81.6379641025" r="4.10994764398" style="fill:#10150e" /><circle cx="-10.9241689823" cy="-120.192784759" r="5.46370967742" style="fill:#3b1d65" /><circle cx="-59.5204870645" cy="-5.83965140988" r="3.42105263158" style="fill:#e5fcff" /><circle cx="-79.8681677412" cy="-40.507099094" r="1.47727272727" style="fill:#81afd5" /><circle cx="-118.430458866" cy="-64.9380476889" r="1" style="fill:#1c6fbc" /><circle cx="79.9595680595" cy="100.580450824" r="7.02380952381" style="fill:#f4d934" /><circle cx="-69.2722848672" cy="-22.7936357506" r="1" style="fill:#c4edfe" /><circle cx="-43.2965806934" cy="-30.4445404238" r="1.63568773234" style="fill:#eaedf1" /><circle cx="77.7283143992" cy="54.2742064699" r="1" style="fill:#e8bc80" /><circle cx="-54.3157822655" cy="-26.5962099403" r="1.87725631769" style="fill:#e3f2fd" /><circle cx="40.7691628786" cy="31.5997750541" r="5.53571428571" style="fill:#f6f4f2" /><circle cx="65.4499878142" cy="87.6479950997" r="1" style="fill:#eddd60" /><circle cx="-71.4873470764" cy="-31.0876622181" r="3.73259052925" style="fill:#b6e1fd" /><circle cx="-59.447843126" cy="-32.3192450387" r="1" style="fill:#cee5fa" /><circle cx="-96.1493103895" cy="-47.2713360862" r="2.99065420561" style="fill:#65b1ec" /><circle cx="71.9366335501" cy="49.6431084078" r="1" style="fill:#f0ca96" /><circle cx="102.599685209" cy="80.2622598523" r="1" style="fill:#e9a52e" /><circle cx="7.34566969779" cy="-50.9601887726" r="3.53448275862" style="fill:#faf7fb" /><circle cx="40.481284551" cy="35.7750535075" r="1.03585657371" style="fill:#f3f0e9" /><circle cx="58.5036098197" cy="79.2182168619" r="1" style="fill:#eee17a" /><circle cx="82.7574650459" cy="102.217359518" r="7.02774108322" style="fill:#f5d72d" /><circle cx="-76.0689027912" cy="-39.7622960464" r="1.63568773234" style="fill:#91bde2" /><circle cx="-34.3955989238" cy="-39.8056304629" r="7.97661870504" style="fill:#f2f3f8" /><circle cx="-83.6177415842" cy="-39.1274830759" r="2.34693877551" style="fill:#90cefa" /><circle cx="-55.3804344359" cy="-6.34007427833" r="3.93530997305" style="fill:#f0fdfe" /><circle cx="-106.709848867" cy="-53.229684566" r="2.32081911263" style="fill:#3a82bc" /><circle cx="-15.5654048684" cy="-51.894210173" r="5.77067669173" style="fill:#f4f2fc" /><circle cx="78.0732831747" cy="98.6975366646" r="6.37096774194" style="fill:#f6dc3b" /><circle cx="-69.6460975555" cy="-37.1034530986" r="1" style="fill:#a4c7e6" /><circle cx="64.7487763486" cy="69.2735531755" r="1" style="fill:#5e5433" /><circle cx="89.1151714028" cy="105.984049281" r="1" style="fill:#f3cf1c" /><circle cx="90.2953382411" cy="66.5651602732" r="1" style="fill:#e2ab55" /><circle cx="85.6106841023" cy="104.007693077" r="6.41148325359" style="fill:#f4d425" /><circle cx="92.5151438558" cy="65.4043465061" r="1" style="fill:#f5b559" /><circle cx="-52.4383272685" cy="1.8641097712" r="3.18181818182" style="fill:#eff5f5" /><circle cx="-96.0114773084" cy="-47.4279005836" r="2.57425742574" style="fill:#5392c3" /><circle cx="-89.895020887" cy="-43.7673939125" r="2.74193548387" style="fill:#7ac0f5" /><circle cx="49.7061825468" cy="54.2246340337" r="1" style="fill:#f9ecbe" /><circle cx="-65.1005973878" cy="-12.354016982" r="1" style="fill:#d5f7ff" /><circle cx="71.667031254" cy="92.8455903375" r="5.17167381974" style="fill:#f4df50" /><circle cx="-47.5245872755" cy="-31.2321819245" r="5.55335968379" style="fill:#ecf3fd" /><circle cx="46.4491101124" cy="47.5174479933" r="1" style="fill:#f9f0d0" /><circle cx="84.5545565811" cy="60.7276254198" r="1" style="fill:#e6b469" /><circle cx="-89.2094100242" cy="-44.5233598694" r="2.87974683544" style="fill:#68a2cf" /><circle cx="-54.1193188592" cy="-31.3950736453" r="1" style="fill:#dbeafa" /><circle cx="63.0839339945" cy="85.0423576857" r="3.6974789916" style="fill:#f2e36a" /><circle cx="-40.9904506319" cy="-36.0236492942" r="5.70610687023" style="fill:#ecf0f7" /><circle cx="-35.9221295416" cy="-38.6237389046" r="7.12643678161" style="fill:#f5f6fc" /><circle cx="43.0274759585" cy="44.0367079448" r="2.64705882353" style="fill:#fbf4de" /><circle cx="42.6974757017" cy="37.5708222888" r="2.26804123711" style="fill:#fcf7eb" /><circle cx="-44.6914008868" cy="-32.1940297991" r="6.19932432432" style="fill:#f0f5fd" /><circle cx="-57.9488219216" cy="-33.2046041694" r="1" style="fill:#c7dbef" /><circle cx="-77.550864901" cy="-34.7771937294" r="3.95161290323" style="fill:#a4d9fc" /><circle cx="75.276700958" cy="95.7074514324" r="4.6682464455" style="fill:#f7de45" /><circle cx="65.3289420029" cy="44.2777979989" r="1" style="fill:#f7d8af" /><circle cx="75.3817568905" cy="96.6661957924" r="2.54966887417" style="fill:#f1da42" /><circle cx="98.6401470616" cy="70.174479278" r="1.93548387097" style="fill:#f4ad46" /><circle cx="-104.335232256" cy="-50.7982049797" r="2.67100977199" style="fill:#4da3e5" /><circle cx="-16.1457982527" cy="-48.9631390058" r="7.82818532819" style="fill:#f5f4f8" /><circle cx="-109.742420308" cy="-53.6759028395" r="3.83561643836" style="fill:#3c94d8" /><circle cx="53.5271384545" cy="72.7788057253" r="1" style="fill:#efe48e" /><circle cx="68.2250565191" cy="89.4618447976" r="3.80165289256" style="fill:#f6e35c" /><circle cx="-116.744390886" cy="-60.4742156805" r="2.99065420561" style="fill:#2683d2" /><circle cx="-64.4372318939" cy="-35.48412188" r="1.47727272727" style="fill:#b5d2ec" /><circle cx="48.105194759" cy="65.3405696082" r="1" style="fill:#f1e9a6" /><circle cx="-9.93035711897" cy="-50.607836206" r="6.64679582712" style="fill:#f1f0f4" /><circle cx="57.9873284195" cy="61.9749110197" r="1" style="fill:#847a56" /><circle cx="27.8968674595" cy="57.4975368634" r="2.47491638796" style="fill:#9c9e88" /><circle cx="20.1644954932" cy="54.844362949" r="2.04946996466" style="fill:#989a8d" /><circle cx="59.4801156836" cy="63.4241800302" r="1" style="fill:#90845a" /><circle cx="44.413369136" cy="57.8840782754" r="6.38263665595" style="fill:#827e64" /><circle cx="19.0934644731" cy="56.5908423511" r="1" style="fill:#919486" /><circle cx="31.8779372612" cy="58.6197318827" r="1.84782608696" style="fill:#6b6b59" /><circle cx="24.1824252135" cy="54.4341583498" r="6.21848739496" style="fill:#9c9d8e" /><circle cx="94.8752564967" cy="78.0054882215" r="1" style="fill:#5e4619" /><circle cx="37.6657256226" cy="57.2864546287" r="4.06332453826" style="fill:#98967b" /><circle cx="45.1327110976" cy="57.8258179187" r="4.03183023873" style="fill:#8f8a6d" /><circle cx="30.9790904176" cy="56.6368199307" r="1" style="fill:#b3b399" /><circle cx="40.9537192278" cy="63.0687371345" r="1.99288256228" style="fill:#5c5b45" /><circle cx="26.700958755" cy="55.0596521412" r="5.60546875" style="fill:#9a9b8a" /><circle cx="36.9020574204" cy="53.0374196456" r="6.52241112828" style="fill:#a3a18b" /><circle cx="33.0039881868" cy="56.0992458258" r="6.31147540984" style="fill:#81816d" /><circle cx="23.7474353397" cy="53.0588455192" r="4.15584415584" style="fill:#9e9f92" /><circle cx="37.1943744875" cy="52.7554957986" r="4.40298507463" style="fill:#a09e88" /><circle cx="60.5441445738" cy="76.6675889545" r="3.20241691843" style="fill:#312e19" /><circle cx="37.8628886947" cy="54.1113858011" r="3.55300859599" style="fill:#a7a48c" /><circle cx="103.638650357" cy="82.5167500374" r="1" style="fill:#4e370d" /><circle cx="36.4282587525" cy="57.0179841842" r="6.53846153846" style="fill:#87866f" /><circle cx="65.7656987555" cy="86.1590082583" r="2.16027874564" style="fill:#25220f" /><circle cx="34.3752086304" cy="54.7685856878" r="4.77958236659" style="fill:#9c9b85" /><circle cx="31.7695314279" cy="57.2240781337" r="6.26245847176" style="fill:#898a74" /><circle cx="86.8486778037" cy="82.7704799647" r="1" style="fill:#866d28" /><circle cx="36.0773172013" cy="56.4053056727" r="4.68085106383" style="fill:#8e8d76" /><circle cx="27.4772148319" cy="52.8026461478" r="2.92452830189" style="fill:#a2a293" /><circle cx="24.7756618545" cy="57.0081514229" r="1.57303370787" style="fill:#8a8c7b" /><circle cx="25.8697291529" cy="55.4907690295" r="6.03873239437" style="fill:#979987" /><circle cx="46.3946550779" cy="56.6617475225" r="5.09803921569" style="fill:#878268" /><circle cx="95.5379702068" cy="89.7285640026" r="2.69480519481" style="fill:#816418" /><circle cx="39.3691506186" cy="56.9140829695" r="3.03405572755" style="fill:#929076" /><circle cx="30.0654113273" cy="55.4679187237" r="5.3893442623" style="fill:#959582" /><circle cx="73.2439990461" cy="67.7999996303" r="1" style="fill:#726139" /><circle cx="48.990472833" cy="60.4339879665" r="2.74193548387" style="fill:#787356" /><circle cx="39.9046914535" cy="65.6853501427" r="2.16027874564" style="fill:#51503b" /><circle cx="31.0598758654" cy="52.2999853239" r="5.64796905222" style="fill:#a5a593" /><circle cx="78.2665259321" cy="73.2278216227" r="1" style="fill:#8d763c" /><circle cx="43.69973405" cy="62.3736983756" r="1.63568773234" style="fill:#68654c" /><circle cx="79.6348567709" cy="70.7063694989" r="1" style="fill:#66552c" /><circle cx="45.5583352528" cy="70.8023199694" r="2.94670846395" style="fill:#3a3926" /><circle cx="98.4893766432" cy="91.2123924704" r="1" style="fill:#755812" /><circle cx="21.3234248986" cy="58.7287466585" r="4.21593830334" style="fill:#797b6c" /><circle cx="32.1622068636" cy="55.5598355231" r="5.33195020747" style="fill:#93937e" /><circle cx="51.1683306512" cy="67.9873133413" r="2.44966442953" style="fill:#48452f" /><circle cx="72.708808527" cy="103.49002556" r="1" style="fill:#171605" /><circle cx="29.4175572686" cy="53.1944849166" r="5.12987012987" style="fill:#a0a08f" /><circle cx="31.2654148618" cy="53.8517617953" r="4.27480916031" style="fill:#aaaa95" /><circle cx="21.5951930343" cy="57.2477018811" r="1.63568773234" style="fill:#828476" /><circle cx="37.4992380015" cy="51.4818876524" r="7.07792207792" style="fill:#a7a590" /><circle cx="38.8881742811" cy="57.2167125413" r="1" style="fill:#9d9b7f" /><circle cx="50.6421034732" cy="57.9421187126" r="1" style="fill:#a19975" /><circle cx="46.0883114962" cy="57.4715320985" r="1" style="fill:#989374" /><circle cx="42.2539160909" cy="59.0599489518" r="5.74669187146" style="fill:#7c7960" /><circle cx="21.9809693543" cy="58.5805315014" r="1" style="fill:#717365" /><circle cx="30.8734536839" cy="55.9525218459" r="4.96644295302" style="fill:#8f907c" /><circle cx="39.6427100886" cy="55.5488084259" r="1.54135338346" style="fill:#a3a085" /><circle cx="56.3754062564" cy="73.1722109542" r="1" style="fill:#787245" /><circle cx="53.1903460679" cy="62.4878998314" r="1" style="fill:#989067" /><circle cx="35.7161412687" cy="51.8959373192" r="7.72267206478" style="fill:#a4a28f" /><circle cx="34.4159272998" cy="54.5410671213" r="4.51219512195" style="fill:#989882" /><circle cx="30.1051213333" cy="54.9394537029" r="4.83944954128" style="fill:#9f9f8b" /><circle cx="59.4355017569" cy="7.42759823434" r="6.60120845921" style="fill:#f1dcd9" /><circle cx="-7.94364338832" cy="79.415975454" r="1" style="fill:#c7f2aa" /><circle cx="-13.6296092467" cy="87.9009646245" r="1" style="fill:#afeb8f" /><circle cx="34.7093601335" cy="45.4005045262" r="5.87155963303" style="fill:#f8f6e6" /><circle cx="85.6191259465" cy="46.6041811602" r="1" style="fill:#f3b67f" /><circle cx="-15.8339375576" cy="92.3964265117" r="1" style="fill:#98d678" /><circle cx="-16.796938441" cy="-131.690415508" r="1" style="fill:#36136f" /><circle cx="46.0219171317" cy="72.9061818777" r="1" style="fill:#f7f49e" /><circle cx="125.310205475" cy="-11.3157444966" r="1" style="fill:#6d1a21" /><circle cx="61.3665630805" cy="39.9668017984" r="1" style="fill:#fbe1c0" /><circle cx="94.6423332949" cy="-2.27978161583" r="3.28358208955" style="fill:#eb8284" /><circle cx="52.582769177" cy="20.1885646823" r="7.5935828877" style="fill:#f5ebe6" /><circle cx="-38.9976579228" cy="-36.3871922379" r="4.60431654676" style="fill:#dbdde3" /><circle cx="132.452776416" cy="23.0618792558" r="2.71844660194" style="fill:#ce3c20" /><circle cx="60.1513950242" cy="7.08126009082" r="7.91086350975" style="fill:#f9e2df" /><circle cx="12.8314442457" cy="64.3158508511" r="2.5" style="fill:#ecf8d2" /><circle cx="-1.74158162578" cy="73.6590262429" r="1" style="fill:#c2dda9" /><circle cx="112.581194615" cy="40.0970947721" r="1" style="fill:#e87b47" /><circle cx="50.6120812526" cy="24.3822876392" r="8.33948339483" style="fill:#fdf4ed" /><circle cx="14.2422969924" cy="62.4409095106" r="2.90220820189" style="fill:#e2eccb" /><circle cx="74.4853142434" cy="9.27952901774" r="3.38235294118" style="fill:#dbaaa4" /><circle cx="-0.533332645248" cy="72.1114271086" r="2.7652733119" style="fill:#daf6bf" /><circle cx="124.122228937" cy="23.3196862861" r="3.55300859599" style="fill:#e55536" /><circle cx="-39.1520592418" cy="-49.3988243163" r="1" style="fill:#a3a6bb" /><circle cx="47.4985161162" cy="32.2438468854" r="6.05263157895" style="fill:#efe7dd" /><circle cx="75.9639966757" cy="30.5404739267" r="1" style="fill:#8f7261" /><circle cx="-43.6481577882" cy="-37.2423627187" r="3.49710982659" style="fill:#e2e8f4" /><circle cx="58.7500606889" cy="-3.36413356665" r="6.98795180723" style="fill:#fde6e7" /><circle cx="7.45569723503" cy="-90.9064452282" r="1" style="fill:#7e5998" /><circle cx="114.521805039" cy="18.101585014" r="1" style="fill:#984233" /><circle cx="73.883800019" cy="33.9782060969" r="1.90647482014" style="fill:#f5c8a8" /><circle cx="-11.2619683894" cy="-52.3441269062" r="1.37931034483" style="fill:#f4f2fb" /><circle cx="-51.4893212206" cy="-46.2254446046" r="1" style="fill:#c8d6f8" /><circle cx="99.852214547" cy="41.4076154522" r="1.60447761194" style="fill:#ef9864" /><circle cx="78.4955918742" cy="-23.0014375948" r="1.96428571429" style="fill:#f8a9bf" /><circle cx="-65.4261832407" cy="-66.8891205366" r="1" style="fill:#6477b2" /><circle cx="-58.0435720607" cy="-57.7909184886" r="1" style="fill:#97a9de" /><circle cx="60.7927947372" cy="99.8009854144" r="1" style="fill:#f2ee50" /><circle cx="108.421988186" cy="7.78874182968" r="2.69480519481" style="fill:#c25850" /><circle cx="0.858425187951" cy="-72.5842097615" r="1" style="fill:#9884ab" /><circle cx="81.1910996253" cy="-39.9947069724" r="1.63568773234" style="fill:#d57ea4" /><circle cx="-41.6585607521" cy="-40.1076733358" r="3.96782841823" style="fill:#cacedb" /><circle cx="60.3383388213" cy="10.2857321373" r="5.04405286344" style="fill:#e8d2ce" /><circle cx="105.730106148" cy="0.143539999772" r="1.44486692015" style="fill:#e96767" /><circle cx="-19.6176519554" cy="112.705307418" r="1" style="fill:#70c546" /><circle cx="6.37137585523" cy="68.856609174" r="5.03311258278" style="fill:#d4e6ba" /><circle cx="70.9300702911" cy="-5.45613718584" r="3.36283185841" style="fill:#f8c3c7" /><circle cx="86.3808770741" cy="-7.12085815395" r="3.30357142857" style="fill:#f299a0" /><circle cx="91.6605604402" cy="11.296167677" r="3.78453038674" style="fill:#c2796f" /><circle cx="65.2972539126" cy="-2.53651315155" r="4.70588235294" style="fill:#fbd4d6" /><circle cx="41.2119805597" cy="35.4647367753" r="6.78571428571" style="fill:#fdfaf2" /><circle cx="66.8987022088" cy="-1.05574526804" r="2.29452054795" style="fill:#e2bcbc" /><circle cx="52.0386579397" cy="84.4528843516" r="1" style="fill:#f5f17c" /><circle cx="99.1209469357" cy="-55.4928423165" r="1" style="fill:#a03a6c" /><circle cx="-59.9897288947" cy="-61.8125635886" r="2.04946996466" style="fill:#7f90c7" /><circle cx="-39.0158396531" cy="-45.1901483336" r="1.31274131274" style="fill:#b9bccd" /><circle cx="55.0016155392" cy="16.5991838708" r="8.31712789828" style="fill:#fceee9" /><circle cx="49.5959072242" cy="35.1560608032" r="7.46335963923" style="fill:#f9eede" /><circle cx="79.3413837459" cy="10.1000503025" r="2.44966442953" style="fill:#c9948d" /><circle cx="88.4838387481" cy="-49.33880027" r="1" style="fill:#bf5d8c" /><circle cx="65.8665562196" cy="-47.0946092929" r="1" style="fill:#db97bf" /><circle cx="-59.1134417789" cy="-77.0032890192" r="1" style="fill:#4b538e" /><circle cx="54.3220148626" cy="-48.5701114243" r="1" style="fill:#f6bde5" /><circle cx="-52.778241941" cy="-53.9776152583" r="1" style="fill:#b0bfed" /><circle cx="-49.8328512755" cy="50.2923405118" r="1" style="fill:#a8d5b3" /><circle cx="-9.4854414981" cy="113.860562645" r="3.03405572755" style="fill:#5b9134" /><circle cx="-38.4752967973" cy="56.7713230167" r="6.47335423197" style="fill:#303a30" /><circle cx="-65.2328989123" cy="-14.358411627" r="1.72794117647" style="fill:#ceeff8" /><circle cx="-53.784387351" cy="8.61875884221" r="1" style="fill:#686d6d" /><circle cx="82.7335749812" cy="55.2233230835" r="2.13286713287" style="fill:#9b794e" /><circle cx="-31.8596568384" cy="72.2708689579" r="6.45110410095" style="fill:#1a2419" /><circle cx="-36.2562071813" cy="81.2156680129" r="1" style="fill:#5f9359" /><circle cx="91.530617603" cy="62.922843241" r="4.75524475524" style="fill:#805f32" /><circle cx="0.00479780814061" cy="119.184943433" r="2.92452830189" style="fill:#73b036" /><circle cx="-30.0640153356" cy="72.4698589488" r="1" style="fill:#98cb91" /><circle cx="-95.7633163199" cy="19.6571510993" r="6.03873239437" style="fill:#0b1613" /><circle cx="68.4065219164" cy="52.093651787" r="1" style="fill:#a68f6a" /><circle cx="-122.302578025" cy="29.4760165973" r="6.43423137876" style="fill:#020a08" /><circle cx="25.0076405737" cy="43.314504051" r="9.022589053" style="fill:#fefefe" /><circle cx="86.3875227951" cy="57.096720957" r="2.92452830189" style="fill:#684f30" /><circle cx="119.54509677" cy="65.720473096" r="4.12532637076" style="fill:#5f340c" /><circle cx="107.561939284" cy="66.1635120889" r="5.32224532225" style="fill:#6d4519" /><circle cx="-0.251765000522" cy="110.595013866" r="3.11926605505" style="fill:#82ba49" /><circle cx="-42.6890793439" cy="57.495625041" r="6.77650429799" style="fill:#273228" /><circle cx="-69.9595916192" cy="-19.3671871348" r="1.75824175824" style="fill:#bfe8f7" /><circle cx="69.8010744944" cy="50.9307969282" r="4.40298507463" style="fill:#816e52" /><circle cx="87.716759515" cy="59.8371081887" r="3.24324324324" style="fill:#8d6b3d" /><circle cx="73.3414568064" cy="52.6682485947" r="2.47491638796" style="fill:#715f43" /><circle cx="-59.5206220407" cy="22.6267239443" r="1" style="fill:#4f5c58" /><circle cx="-62.6645925372" cy="-46.1516088565" r="6.25" style="fill:#020202" /><circle cx="-9.21176805512" cy="108.453394926" r="3.49710982659" style="fill:#6ca543" /><circle cx="43.1656948952" cy="43.1860308737" r="1" style="fill:#8b877c" /><circle cx="-31.2613703498" cy="143.630867679" r="1" style="fill:#1d5c02" /><circle cx="-88.968482688" cy="2.04009799104" r="3.98395721925" style="fill:#132020" /><circle cx="-55.6842271457" cy="-10.1611118526" r="2.1875" style="fill:#ebf9fc" /><circle cx="-78.9650511404" cy="10.8615498304" r="1" style="fill:#618b85" /><circle cx="-1.12213276815" cy="124.863691888" r="4.60431654676" style="fill:#63a128" /><circle cx="-72.0411496614" cy="-27.9525142987" r="1" style="fill:#afdaf1" /><circle cx="-72.2658969459" cy="30.141850954" r="1" style="fill:#79a997" /><circle cx="-74.042732863" cy="8.29670891038" r="1" style="fill:#8bb9b4" /><circle cx="-61.2989109959" cy="-10.3230019948" r="2.34693877551" style="fill:#dcf6fb" /><circle cx="-48.3747141428" cy="71.416814425" r="6.61654135338" style="fill:#121d13" /><circle cx="128.905987994" cy="60.9972317228" r="2.47491638796" style="fill:#4d2405" /><circle cx="-1.25046403376" cy="130.580018998" r="5.5" style="fill:#57931c" /><circle cx="-10.8714149771" cy="121.68632931" r="1" style="fill:#487d22" /><circle cx="48.6019283257" cy="46.6533113062" r="1" style="fill:#aca48e" /><circle cx="-88.3904335381" cy="60.182414478" r="6.65178571429" style="fill:#07120c" /><circle cx="134.255145978" cy="47.6207560188" r="2.96875" style="fill:#351404" /><circle cx="-2.84992393091" cy="139.022482996" r="1.72794117647" style="fill:#48860e" /><circle cx="-31.3286313317" cy="95.6764161845" r="1" style="fill:#48793c" /><circle cx="-49.7154285057" cy="-13.8737968416" r="3.42105263158" style="fill:#f8fbfc" /><circle cx="100.125010115" cy="65.8393038216" r="4.51219512195" style="fill:#795324" /><circle cx="-18.0470235652" cy="87.5032375777" r="1.17647058824" style="fill:#8abe73" /><circle cx="63.3700454246" cy="47.0202792139" r="2.67100977199" style="fill:#8c7c63" /><circle cx="-26.5698678306" cy="87.0987379346" r="1" style="fill:#74ab65" /><circle cx="102.937569417" cy="51.3372260446" r="1" style="fill:#412916" /><circle cx="-66.1573118934" cy="22.3015623265" r="1" style="fill:#b7e4d6" /><circle cx="-34.9947576959" cy="113.829283284" r="1" style="fill:#1e4114" /><circle cx="-72.9388823208" cy="-17.2231563741" r="1" style="fill:#9fc8d4" /><circle cx="-43.5139663473" cy="49.2091648479" r="5.79439252336" style="fill:#39433b" /><circle cx="-50.0176389271" cy="56.5309270098" r="7.01195219124" style="fill:#202b22" /><circle cx="141.546435853" cy="20.0171383534" r="1" style="fill:#1c0501" /><circle cx="-12.9676381813" cy="141.291098309" r="1" style="fill:#357409" /><circle cx="-39.0152040976" cy="49.5125445424" r="4.77958236659" style="fill:#434d45" /><circle cx="99.1296064779" cy="56.6177503371" r="1" style="fill:#593c20" /><circle cx="-18.8991654135" cy="116.5318439" r="1" style="fill:#345e1e" /><circle cx="54.6998229565" cy="13.3957056589" r="6.69117647059" style="fill:#968f8d" /><circle cx="-95.8698140186" cy="-40.1641398808" r="1" style="fill:#39627b" /><circle cx="-85.6758632128" cy="-36.9407767958" r="1" style="fill:#4c7086" /><circle cx="-30.658104931" cy="-44.7750329787" r="1" style="fill:#97979e" /><circle cx="57.4775850615" cy="29.534855047" r="2.07746478873" style="fill:#847a71" /><circle cx="-52.4386852416" cy="-31.1576046835" r="1" style="fill:#7e868e" /><circle cx="51.6553105013" cy="32.796097767" r="1" style="fill:#484440" /><circle cx="17.6517187025" cy="-48.5825131853" r="4.52554744526" style="fill:#858486" /><circle cx="53.7255180873" cy="26.3632332313" r="5.98214285714" style="fill:#928a84" /><circle cx="-48.7710041398" cy="-37.3143606364" r="1" style="fill:#2d2f32" /><circle cx="54.0886011182" cy="2.01720173766" r="7.77448071217" style="fill:#8a8585" /><circle cx="53.6029009803" cy="1.04131485665" r="7.44318181818" style="fill:#878282" /><circle cx="-67.1114245086" cy="-32.7365834879" r="1" style="fill:#738898" /><circle cx="53.1012158395" cy="0.677297873382" r="7.59615384615" style="fill:#848080" /><circle cx="-46.8360726108" cy="-34.0283985965" r="1" style="fill:#8c9198" /><circle cx="-61.9621382444" cy="-34.2919478597" r="1" style="fill:#5e6b77" /><circle cx="55.0425489954" cy="-6.99388111712" r="6.03174603175" style="fill:#9a9293" /><circle cx="65.9346005012" cy="36.5244756777" r="1" style="fill:#a58f7b" /><circle cx="55.3703340936" cy="75.900758307" r="1" style="fill:#8f8950" /><circle cx="-76.1546729757" cy="-34.7719184929" r="1" style="fill:#5f7b8f" /><circle cx="106.51913661" cy="54.2156966656" r="1" style="fill:#7f4e26" /><circle cx="67.5062774205" cy="102.764778887" r="3.53448275862" style="fill:#878224" /><circle cx="45.8749588788" cy="30.9531667859" r="1.50943396226" style="fill:#928f8a" /><circle cx="71.9384731758" cy="112.913384151" r="1" style="fill:#858015" /><circle cx="52.0883415887" cy="49.4116128929" r="1" style="fill:#918871" /><circle cx="55.3574808606" cy="-11.5101216875" r="1.72794117647" style="fill:#8f8587" /><circle cx="54.8816762783" cy="6.3603664595" r="7.88334901223" style="fill:#847e7d" /><circle cx="41.2192433513" cy="-33.1513638229" r="4.77958236659" style="fill:#979396" /><circle cx="-41.5333898153" cy="-35.8250231073" r="1" style="fill:#898c90" /><circle cx="-45.9542140439" cy="-26.6811072888" r="1" style="fill:#545557" /><circle cx="52.2823608174" cy="-11.3516805584" r="6.65676077266" style="fill:#969192" /><circle cx="55.7488792159" cy="8.71862270962" r="6.73439767779" style="fill:#918988" /><circle cx="-58.7462314272" cy="-30.2180642394" r="1.44486692015" style="fill:#6a757f" /><circle cx="79.9756289889" cy="43.8968260379" r="1" style="fill:#775d45" /><circle cx="54.0358706481" cy="26.3425700822" r="1" style="fill:#968d87" /><circle cx="45.0335188277" cy="29.6836961142" r="1" style="fill:#74726f" /><circle cx="54.0345135534" cy="16.1498646365" r="7.71805273834" style="fill:#98918f" /><circle cx="53.0791617938" cy="0.828560582061" r="6.01769911504" style="fill:#7e7b7b" /><circle cx="-71.3970769599" cy="-44.0812739009" r="1" style="fill:#3e4d5e" /><circle cx="95.9378587512" cy="52.4090553466" r="1" style="fill:#90633a" /><circle cx="-66.5455441528" cy="-37.4662555611" r="1" style="fill:#505f6d" /><circle cx="56.488064349" cy="8.306723589" r="3.42105263158" style="fill:#958c8a" /><circle cx="52.2493288344" cy="-11.2210889967" r="5.82560296846" style="fill:#908b8c" /><circle cx="56.8908424459" cy="10.9972397368" r="5.81005586592" style="fill:#8a817f" /><circle cx="54.3970920653" cy="18.4850496415" r="6.86629526462" style="fill:#8e8784" /><circle cx="49.00968821" cy="63.3086741594" r="2.04946996466" style="fill:#8d8762" /><circle cx="58.0014396615" cy="83.4027870071" r="2.85714285714" style="fill:#898342" /><circle cx="54.1745086076" cy="17.9422171212" r="5.22292993631" style="fill:#9e9793" /><circle cx="56.2235830102" cy="12.3316520571" r="5.87912087912" style="fill:#908886" /><circle cx="77.4536005066" cy="41.9265539752" r="1" style="fill:#95775c" /><circle cx="-81.626231063" cy="-52.1574557593" r="1" style="fill:#2a3b50" /><circle cx="41.1723453951" cy="33.6117292482" r="1" style="fill:#666562" /><circle cx="73.9917110644" cy="39.8194802173" r="1" style="fill:#846c57" /><circle cx="53.2706946671" cy="19.691655308" r="5.98930481283" style="fill:#9b9490" /><circle cx="51.655762298" cy="-12.429285636" r="6.10726643599" style="fill:#938f90" /><circle cx="53.475897172" cy="-10.8304563369" r="4.95515695067" style="fill:#9c9596" /><circle cx="53.8798277333" cy="23.6042283847" r="4.40298507463" style="fill:#8d8580" /><circle cx="52.9778539093" cy="-4.55100453556" r="6.3768115942" style="fill:#8c8888" /><circle cx="48.0190653425" cy="70.6671212555" r="1" style="fill:#827f54" /><circle cx="62.7631362406" cy="92.874583999" r="4.09448818898" style="fill:#898334" /><circle cx="55.3046189384" cy="0.513184387398" r="1" style="fill:#a19999" /><circle cx="-55.0164844191" cy="-29.5216166297" r="1.50943396226" style="fill:#757e86" /><circle cx="10.7571277417" cy="-64.9182571324" r="1" style="fill:#b39fbd" /><circle cx="-93.3906859693" cy="-42.1413463349" r="1" style="fill:#558db3" /><circle cx="50.6892462222" cy="43.410988191" r="5.21276595745" style="fill:#6b6659" /><circle cx="68.0954332102" cy="47.0988946295" r="5.84103512015" style="fill:#42392c" /><circle cx="-48.2285617525" cy="-20.4390680245" r="5.41751527495" style="fill:#898b8c" /><circle cx="99.5376457893" cy="20.8181129578" r="1" style="fill:#7c483c" /><circle cx="30.6590802583" cy="70.9606606838" r="1" style="fill:#979c71" /><circle cx="55.2328092031" cy="10.3077090614" r="2.34693877551" style="fill:#c0b6b4" /><circle cx="-84.5157631244" cy="-33.9106056437" r="3.62606232295" style="fill:#6b9ab5" /><circle cx="-75.7467569301" cy="-28.5510160131" r="3.40175953079" style="fill:#86adc2" /><circle cx="73.0537138633" cy="52.3180940365" r="1" style="fill:#2c251a" /><circle cx="-56.8125769812" cy="-19.6385911053" r="1" style="fill:#43494b" /><circle cx="54.0480782235" cy="12.2606399161" r="5.21276595745" style="fill:#ada6a4" /><circle cx="-61.7627765674" cy="-25.7804861803" r="6.01063829787" style="fill:#91a3ae" /><circle cx="48.7278619325" cy="39.896850997" r="4.6682464455" style="fill:#8e887b" /><circle cx="-78.9709243235" cy="-33.2057607991" r="1" style="fill:#6a8fa5" /><circle cx="-50.62934958" cy="-17.9767945401" r="6.82203389831" style="fill:#a0a4a6" /><circle cx="42.2564553001" cy="66.5653386301" r="1" style="fill:#c5c28c" /><circle cx="69.4852097328" cy="2.8075485863" r="5.82560296846" style="fill:#d4acaa" /><circle cx="-56.8321189603" cy="-21.1481518506" r="2.81150159744" style="fill:#a3b0b6" /><circle cx="70.0148297763" cy="49.3153821967" r="4.60431654676" style="fill:#383024" /><circle cx="-0.960583330788" cy="-73.2007431308" r="1" style="fill:#9f8bb5" /><circle cx="22.9674114967" cy="72.0412165973" r="3.42105263158" style="fill:#acb687" /><circle cx="-60.5880711381" cy="-22.9970458505" r="4.140625" style="fill:#6d7a81" /><circle cx="-54.9983807953" cy="-5.45115804256" r="3.28358208955" style="fill:#55595a" /><circle cx="5.08530078706" cy="50.1555028924" r="7.15549936789" style="fill:#9b9b9b" /><circle cx="68.7097297058" cy="43.6755814962" r="6.28712871287" style="fill:#4b4033" /><circle cx="-63.8883626505" cy="-25.869715554" r="4.65558194774" style="fill:#7f929c" /><circle cx="55.8697513723" cy="48.965623356" r="4.89795918367" style="fill:#635c4b" /><circle cx="-84.939048878" cy="-38.6633140664" r="1.81818181818" style="fill:#577e99" /><circle cx="53.0769233741" cy="5.76335879705" r="1" style="fill:#d1cbca" /><circle cx="48.7316821137" cy="29.9714794945" r="5.04405286344" style="fill:#7d7974" /><circle cx="69.1748504141" cy="42.2500587078" r="5.78651685393" style="fill:#55483a" /><circle cx="41.2168666217" cy="40.521401397" r="4.57831325301" style="fill:#a6a399" /><circle cx="-51.5896971475" cy="-18.9557173791" r="5.37987679671" style="fill:#8f9497" /><circle cx="55.2294617597" cy="3.92543385183" r="3.6797752809" style="fill:#b6adac" /><circle cx="-89.3714509466" cy="-42.7720589009" r="1" style="fill:#3a5a72" /><circle cx="-60.9526764933" cy="-24.7618259427" r="5.35123966942" style="fill:#8a9ba4" /><circle cx="23.989662412" cy="63.2585766148" r="2.59868421053" style="fill:#b7bc9b" /><circle cx="-92.4221485747" cy="-38.7007559014" r="1.63568773234" style="fill:#629fc5" /><circle cx="-84.4276113812" cy="-33.2959362339" r="3.95161290323" style="fill:#74a7c4" /><circle cx="-63.7405156474" cy="-27.1943989266" r="4.04761904762" style="fill:#9db4c3" /><circle cx="-99.2039680115" cy="-48.3114528285" r="3.30357142857" style="fill:#427ba7" /><circle cx="53.1824028541" cy="7.55115567158" r="1" style="fill:#c6c0bf" /><circle cx="48.8195835854" cy="47.5430881341" r="3.38235294118" style="fill:#797363" /><circle cx="-55.310777521" cy="-19.9213547613" r="3.18181818182" style="fill:#5e6467" /><circle cx="99.2691713221" cy="22.4589189666" r="4.375" style="fill:#995a49" /><circle cx="-49.3275058231" cy="-15.9232868828" r="4.55205811138" style="fill:#7f8182" /><circle cx="26.0909814321" cy="63.6290550055" r="2.52491694352" style="fill:#a0a485" /><circle cx="-86.0213479444" cy="-40.5687497285" r="1" style="fill:#496c85" /><circle cx="69.4694026141" cy="3.08753816074" r="2.57425742574" style="fill:#c8a3a1" /><circle cx="-50.8175278313" cy="-2.88301132015" r="4.73067915691" style="fill:#6d6e6e" /><circle cx="57.6686632768" cy="78.1982644728" r="1" style="fill:#c0b665" /><circle cx="46.9755927781" cy="33.7773002281" r="5.20255863539" style="fill:#97928b" /><circle cx="-62.769548426" cy="-26.2902667842" r="5.77861163227" style="fill:#96abb8" /><circle cx="-99.7510594801" cy="-47.4222542011" r="2.32081911263" style="fill:#396d92" /><circle cx="-62.677452037" cy="-25.8586205959" r="3.85245901639" style="fill:#768690" /><circle cx="58.4486398826" cy="44.3662061668" r="5.5268389662" style="fill:#5a5245" /><circle cx="69.9078338753" cy="2.8829700635" r="1" style="fill:#b18f8d" /><circle cx="30.7931080902" cy="66.6053664818" r="2.34693877551" style="fill:#858868" /><circle cx="-68.1475764322" cy="-27.1416414564" r="1" style="fill:#5f717c" /><circle cx="-57.3744588453" cy="-21.7984669611" r="1" style="fill:#adbbc3" /><circle cx="-74.9315039665" cy="-28.2482004464" r="3.6974789916" style="fill:#7ca0b2" /><circle cx="40.3812032789" cy="72.2047413339" r="1" style="fill:#777750" /><circle cx="48.5708800523" cy="-38.4120589138" r="6.79487179487" style="fill:#7d6e78" /><circle cx="57.2372178288" cy="-20.108240103" r="3.36283185841" style="fill:#76696d" /><circle cx="80.0083777059" cy="-12.4569296096" r="1" style="fill:#a26f77" /><circle cx="-63.9451286113" cy="-62.390619759" r="1" style="fill:#586792" /><circle cx="61.4230697619" cy="29.9035564085" r="2.10526315789" style="fill:#a9988a" /><circle cx="60.5910940092" cy="-46.228389209" r="1" style="fill:#a57a95" /><circle cx="75.3076990326" cy="-56.7422334984" r="1" style="fill:#95537b" /><circle cx="23.260661562" cy="49.9403953726" r="1" style="fill:#a0a199" /><circle cx="55.0518139532" cy="-24.117520751" r="7.460496614" style="fill:#ac9aa1" /><circle cx="-35.1825765307" cy="-61.476813099" r="1" style="fill:#6b6b87" /><circle cx="60.7746684762" cy="-38.3638002429" r="2.7652733119" style="fill:#b88fa5" /><circle cx="55.1712265587" cy="-21.9727210751" r="7.3714953271" style="fill:#b5a4aa" /><circle cx="-12.1858323327" cy="56.3413777928" r="1" style="fill:#8d9589" /><circle cx="64.0483682062" cy="48.4149399677" r="1" style="fill:#a08e6f" /><circle cx="-33.8388639209" cy="54.7539610435" r="1" style="fill:#718472" /><circle cx="19.160443085" cy="-56.4575941569" r="2.90220820189" style="fill:#998d9c" /><circle cx="91.9899525656" cy="33.0927914662" r="1" style="fill:#a26e55" /><circle cx="8.12627483259" cy="55.6897025798" r="1" style="fill:#979a91" /><circle cx="68.1246309929" cy="65.7205920848" r="1" style="fill:#a8945d" /><circle cx="57.1555097642" cy="-20.068259116" r="6.62668665667" style="fill:#97878c" /><circle cx="-52.5842763903" cy="55.1416899117" r="1" style="fill:#516e57" /><circle cx="61.203197513" cy="14.0249265428" r="3.85245901639" style="fill:#b6a49f" /><circle cx="-61.3861873546" cy="58.8899476004" r="1" style="fill:#3c5c44" /><circle cx="31.90805756" cy="-50.2772835833" r="6.66666666667" style="fill:#a393a2" /><circle cx="-51.2000078549" cy="-59.9714338605" r="1" style="fill:#6d759a" /><circle cx="41.3247929434" cy="36.3456412852" r="1" style="fill:#aaa8a2" /><circle cx="61.7632618713" cy="18.7224077727" r="3.51585014409" style="fill:#af9c95" /><circle cx="69.5539723565" cy="-46.6609344059" r="1" style="fill:#b97b9e" /><circle cx="28.9716417051" cy="-112.483464408" r="4.68085106383" style="fill:#0c050e" /><circle cx="-19.5666790748" cy="-62.3790473446" r="1" style="fill:#7e7990" /><circle cx="-44.1092447531" cy="55.304419969" r="1" style="fill:#627b65" /><circle cx="55.3155575181" cy="-22.8456280128" r="7.85100286533" style="fill:#b19fa6" /><circle cx="56.2750749687" cy="-26.7978311171" r="7.60892667375" style="fill:#83737a" /><circle cx="63.0438054086" cy="52.6155550152" r="3.34319526627" style="fill:#b7a37c" /><circle cx="65.3371772914" cy="59.8423518458" r="1" style="fill:#b39e6e" /><circle cx="52.2394530669" cy="-29.3024718076" r="7.71805273834" style="fill:#a7979f" /><circle cx="60.4878974614" cy="35.0188575317" r="2.5" style="fill:#b8a593" /><circle cx="-42.1875870825" cy="-58.0891679087" r="1" style="fill:#7e82a2" /><circle cx="55.8444126379" cy="-22.6775733189" r="7.00399467377" style="fill:#9c8c92" /><circle cx="89.2146756928" cy="-12.1124512706" r="1" style="fill:#985b63" /><circle cx="61.7553539566" cy="44.0523734147" r="3.30357142857" style="fill:#b7a387" /><circle cx="52.0005376022" cy="-34.8218779803" r="5.5" style="fill:#887781" /><circle cx="53.5805986606" cy="-26.7752781089" r="7.70408163265" style="fill:#a4949b" /><circle cx="59.0248006041" cy="-17.7984267273" r="1.99288256228" style="fill:#6b5f62" /><circle cx="53.9925898384" cy="-27.331023452" r="7.22222222222" style="fill:#bca8b1" /><circle cx="66.9812641974" cy="-50.5591975397" r="1" style="fill:#9c6788" /><circle cx="62.3361814538" cy="45.1378409831" r="2.10526315789" style="fill:#aa977c" /><circle cx="54.3038820818" cy="-25.921409003" r="6.83988764045" style="fill:#a09097" /><circle cx="-23.9851210947" cy="-59.1755382172" r="1" style="fill:#9390a7" /><circle cx="55.2477920877" cy="-27.1355716267" r="6.08013937282" style="fill:#918087" /><circle cx="-22.3292098347" cy="55.6076139447" r="1" style="fill:#818d7f" /><circle cx="59.9955498301" cy="10.8828698425" r="4.95515695067" style="fill:#887b79" /><circle cx="46.1835349276" cy="-86.0868379953" r="2.74193548387" style="fill:#190d19" /><circle cx="-74.3972724412" cy="-66.1438552403" r="1" style="fill:#455988" /><circle cx="-10.632748689" cy="-61.8911791398" r="1.47727272727" style="fill:#8b8598" /><circle cx="59.9983495789" cy="-10.3803500456" r="5.18201284797" style="fill:#8d7e80" /><circle cx="58.1059577482" cy="-38.5272886901" r="1.50943396226" style="fill:#c09aaf" /><circle cx="58.994677093" cy="-31.5732995496" r="1" style="fill:#604f57" /><circle cx="64.0642707801" cy="-30.5965449934" r="2.44966442953" style="fill:#ae8a99" /><circle cx="74.7724241838" cy="-13.9469295798" r="1" style="fill:#ab7f87" /><circle cx="27.9400843127" cy="-51.5746791714" r="3.71508379888" style="fill:#a799a8" /><circle cx="51.8683810528" cy="-49.360943745" r="1" style="fill:#332830" /><circle cx="49.5204479526" cy="-51.98719279" r="1" style="fill:#4b3a47" /><circle cx="76.592307868" cy="-50.1894078231" r="1" style="fill:#af668e" /><circle cx="-14.5066530908" cy="-78.1236414915" r="1" style="fill:#ac98d7" /><circle cx="-46.993405639" cy="-67.4130350149" r="1" style="fill:#8a8fcb" /><circle cx="-73.514094042" cy="-36.3435969509" r="7.01591511936" style="fill:#a6d1f4" /><circle cx="-111.57684869" cy="-40.7054827244" r="1" style="fill:#44a7d9" /><circle cx="-74.9927380982" cy="-45.433430646" r="2.96875" style="fill:#92bcea" /><circle cx="-43.7162428807" cy="-71.3426982732" r="3.90243902439" style="fill:#7d7fbd" /><circle cx="-74.4927015418" cy="-39.3839308438" r="7.40484429066" style="fill:#96c0e4" /><circle cx="-75.055280576" cy="-37.762306907" r="7.16624685139" style="fill:#98c4e7" /><circle cx="1.56547433558" cy="59.7830529448" r="1" style="fill:#a7af9e" /><circle cx="98.4396065116" cy="1.20300960412" r="1" style="fill:#944d4c" /><circle cx="65.1818349814" cy="-76.7613646598" r="1" style="fill:#de6dca" /><circle cx="-81.3454366974" cy="-40.1644134498" r="1" style="fill:#90c8f4" /><circle cx="-90.7500068632" cy="-67.5419005428" r="2.10526315789" style="fill:#416db2" /><circle cx="-73.759261392" cy="-37.0041302313" r="5.98930481283" style="fill:#a2cdf0" /><circle cx="-73.6170126367" cy="-44.870195244" r="7.26941747573" style="fill:#86abd3" /><circle cx="-82.4024731348" cy="-47.4238447913" r="1" style="fill:#7cb0e3" /><circle cx="51.8595804422" cy="-54.0526267086" r="1" style="fill:#9d7594" /><circle cx="-88.0181293577" cy="-55.3237954191" r="1" style="fill:#6094d1" /><circle cx="-43.3584135155" cy="-86.1740760885" r="1" style="fill:#5d59a6" /><circle cx="-80.6808328015" cy="-60.8167451056" r="1" style="fill:#5c82bd" /><circle cx="-102.122196489" cy="-34.9423306202" r="1" style="fill:#376c84" /><circle cx="-99.672083321" cy="-38.8135294643" r="1" style="fill:#62b6e4" /><circle cx="-85.0962021697" cy="54.2433993392" r="1" style="fill:#49956c" /><circle cx="-73.4889734639" cy="-44.759596398" r="5.69789674952" style="fill:#7e9fc5" /><circle cx="-74.8708860617" cy="-42.7744432136" r="7.18397997497" style="fill:#8eb7df" /><circle cx="-96.6336503072" cy="-73.9106899323" r="2.26804123711" style="fill:#305da9" /><circle cx="-73.7114448359" cy="-36.960995278" r="6.76724137931" style="fill:#a3cef1" /><circle cx="-74.2098802237" cy="-37.2917658893" r="6.73913043478" style="fill:#a0ccef" /><circle cx="82.9988062876" cy="-70.9836617349" r="1" style="fill:#d155a9" /><circle cx="-73.3218065748" cy="-44.5840558678" r="7.66839378238" style="fill:#81a4ca" /><circle cx="-82.8144668699" cy="6.93745460712" r="1" style="fill:#6ea5a1" /><circle cx="-77.8248126966" cy="-91.846709115" r="1" style="fill:#2c3e95" /><circle cx="26.012395409" cy="-87.0782472085" r="1" style="fill:#b072c2" /><circle cx="-68.4792012259" cy="-43.7529232417" r="1" style="fill:#97b6dc" /><circle cx="-74.0954321075" cy="-39.205380258" r="6.08013937282" style="fill:#9bc6eb" /><circle cx="73.0071155343" cy="87.9999153999" r="2.5" style="fill:#b29f3f" /><circle cx="105.469871053" cy="35.8262883883" r="1" style="fill:#bc6d48" /><circle cx="-105.74734802" cy="-67.5028060696" r="1" style="fill:#3075c6" /><circle cx="-69.3492952223" cy="-35.1140469782" r="1" style="fill:#44525e" /><circle cx="-38.9532999918" cy="-47.2321993081" r="1" style="fill:#9396a6" /><circle cx="-30.948183656" cy="-64.7368199277" r="1" style="fill:#b9b5e8" /><circle cx="-32.9967936643" cy="-83.5558206444" r="2.10526315789" style="fill:#766cb4" /><circle cx="-72.64294193" cy="-49.059545338" r="2.94670846395" style="fill:#7796bf" /><circle cx="-74.3184006603" cy="-37.123937914" r="6.48985959438" style="fill:#9ecaec" /><circle cx="-94.2398405665" cy="-40.0292020643" r="1" style="fill:#4e83a5" /><circle cx="-73.4863027204" cy="-35.9830025005" r="7.12643678161" style="fill:#a7d4f6" /><circle cx="-74.1514800507" cy="-42.6373731035" r="7.62908324552" style="fill:#89afd5" /><circle cx="-73.8105280117" cy="-36.9436800133" r="8.10606060606" style="fill:#a4d0f3" /><circle cx="-122.327199134" cy="-44.4515635353" r="1" style="fill:#2ca5e1" /><circle cx="-94.8496644033" cy="-62.9975031455" r="1" style="fill:#4881c9" /><circle cx="-80.767878334" cy="-53.1204080353" r="1" style="fill:#729ed6" /><circle cx="-73.8625345047" cy="31.4099613829" r="1" style="fill:#669382" /><circle cx="-74.7852562118" cy="-40.4846545745" r="7.77448071217" style="fill:#92bce2" /><circle cx="-74.1801458876" cy="-45.582141155" r="6.52241112828" style="fill:#8ab0db" /><circle cx="68.601883364" cy="89.7957049392" r="1" style="fill:#968a37" /><circle cx="52.5986726491" cy="69.3042361454" r="1" style="fill:#aba36b" /><circle cx="-73.2643282846" cy="-44.1153195649" r="7.34356552538" style="fill:#85a8ce" /><circle cx="28.7146669579" cy="-78.1307912669" r="1" style="fill:#cd91d9" /><circle cx="-56.964350794" cy="-27.4058931496" r="1" style="fill:#a5b3be" /><circle cx="-73.77400229" cy="-42.5719107086" r="7.36225087925" style="fill:#8eb4db" /><circle cx="80.0298477303" cy="-31.9223564099" r="1" style="fill:#966074" /><circle cx="-78.580108226" cy="78.8238673793" r="1" style="fill:#368c4b" /><circle cx="-6.95497218349" cy="-49.5231383159" r="9.85017978426" style="fill:#fefeff" /><circle cx="62.6660956081" cy="85.3213021044" r="3.47826086957" style="fill:#faeb6e" /><circle cx="-53.3940267657" cy="-12.4318068374" r="5.29288702929" style="fill:#ecf6f8" /><circle cx="-41.0000395625" cy="-33.6205998154" r="1" style="fill:#c3c5c9" /><circle cx="-40.8476765121" cy="-40.6482780673" r="1" style="fill:#56585d" /><circle cx="-14.267510259" cy="-49.9623506022" r="1" style="fill:#818183" /><circle cx="135.506074314" cy="-50.4936721484" r="1" style="fill:#ee0c59" /><circle cx="41.6961451379" cy="-63.8947530629" r="1" style="fill:#efb0ec" /><circle cx="35.6979001643" cy="38.6607900044" r="1" style="fill:#a9a9a5" /><circle cx="-41.1805482512" cy="-30.1423995245" r="5.66473988439" style="fill:#fcfdfe" /><circle cx="-51.9403838531" cy="-14.1883483964" r="1" style="fill:#d9e0e2" /><circle cx="-54.4219183422" cy="-10.2849966366" r="1.69741697417" style="fill:#e4eff1" /><circle cx="95.7733378801" cy="73.0814749851" r="1" style="fill:#8e682a" /><circle cx="91.8541559336" cy="65.6545693644" r="1" style="fill:#ce994c" /><circle cx="90.527815808" cy="91.2530737304" r="1" style="fill:#f7c735" /><circle cx="20.5880219846" cy="46.0150776756" r="8.63966142684" style="fill:#fdfdfc" /><circle cx="44.2260728179" cy="66.8845134273" r="1" style="fill:#f9f4ad" /><circle cx="75.0477120512" cy="23.894376952" r="1" style="fill:#f8c6b1" /><circle cx="74.032336309" cy="88.6330780529" r="3.85245901639" style="fill:#f9de55" /><circle cx="-51.247567254" cy="-10.7214324242" r="6.19932432432" style="fill:#f7fcfd" /><circle cx="-51.8877577816" cy="-13.333686464" r="6.75324675325" style="fill:#f2f9fb" /><circle cx="49.4151190844" cy="11.9879781772" r="1" style="fill:#f3f1f1" /><circle cx="53.4775084543" cy="78.0867785867" r="1" style="fill:#f9f089" /><circle cx="36.6026016864" cy="54.9987977524" r="1" style="fill:#fcf9d3" /><circle cx="43.8425336737" cy="24.4201310152" r="5.04405286344" style="fill:#f9f9f9" /><circle cx="111.49650598" cy="7.79823023825" r="1" style="fill:#51221f" /><circle cx="27.1548282844" cy="48.2988404398" r="1" style="fill:#fdfdf0" /><circle cx="82.7637006207" cy="37.5594488516" r="1" style="fill:#eab18a" /><circle cx="-49.6597875807" cy="-12.3337627455" r="3.78453038674" style="fill:#b3b5b6" /><circle cx="90.0836267624" cy="-33.7380341732" r="1" style="fill:#8d4b62" /><circle cx="11.5157628238" cy="52.7542884463" r="6.28712871287" style="fill:#a0a29b" /><circle cx="49.8988097249" cy="-72.5454255848" r="1" style="fill:#985e94" /><circle cx="67.732721047" cy="-53.8413764218" r="1" style="fill:#c17ba8" /><circle cx="-6.74372592695" cy="51.4731004089" r="7.66112266112" style="fill:#a8aaa6" /><circle cx="-48.5846023817" cy="15.2763014259" r="6.22483221477" style="fill:#b1b2b2" /><circle cx="-63.5960437427" cy="-34.9505808104" r="1" style="fill:#434d56" /><circle cx="61.9680800676" cy="-21.0049765179" r="1" style="fill:#ad929a" /><circle cx="77.4661219151" cy="-41.6200910765" r="4.03183023873" style="fill:#965d78" /><circle cx="66.7230992138" cy="51.2692181703" r="1" style="fill:#d3b88b" /><circle cx="-27.9855608452" cy="45.1494307635" r="5.57086614173" style="fill:#9fa49f" /><circle cx="-51.7850588518" cy="-3.21520829404" r="7.00399467377" style="fill:#a7aaaa" /><circle cx="24.7075503671" cy="46.7666209727" r="2.1875" style="fill:#90908c" /><circle cx="-85.1500987875" cy="-22.8308431719" r="1" style="fill:#5e8998" /><circle cx="-38.5139570279" cy="-34.0225555842" r="2.62295081967" style="fill:#dfe0e2" /><circle cx="-43.9150361878" cy="-27.9927195854" r="3.45930232558" style="fill:#d2d4d7" /><circle cx="-139.921362526" cy="-40.8475117433" r="1" style="fill:#06739b" /><circle cx="29.6472244819" cy="67.4667958821" r="1" style="fill:#9da17b" /><circle cx="-39.0855192445" cy="36.2762964439" r="6.20573355818" style="fill:#9ca29e" /><circle cx="11.883625653" cy="51.4576005289" r="5.29288702929" style="fill:#959692" /><circle cx="-70.735834706" cy="-23.4317865375" r="1" style="fill:#809da9" /><circle cx="-66.5015208311" cy="-37.897070049" r="1" style="fill:#1d2328" /><circle cx="3.76299364136" cy="51.0863851258" r="5.35123966942" style="fill:#9d9e9c" /><circle cx="109.756029572" cy="16.6024888983" r="1" style="fill:#c55e4d" /><circle cx="-46.1079717782" cy="-24.0696575728" r="4.57831325301" style="fill:#dadcde" /><circle cx="-46.8276991812" cy="-21.4574050851" r="4.06332453826" style="fill:#bbbcbd" /><circle cx="-67.28479904" cy="-18.0813909254" r="1" style="fill:#95b1ba" /><circle cx="-48.9065906544" cy="-17.3609858123" r="2.99065420561" style="fill:#c5c8c9" /><circle cx="-46.7110244888" cy="-41.5023483425" r="1" style="fill:#6e737e" /><circle cx="-48.2600594592" cy="-19.1019725979" r="3.01242236025" style="fill:#cacdce" /><circle cx="-10.3026745587" cy="50.6126653125" r="7.48883928571" style="fill:#aaaca9" /><circle cx="-28.5331773646" cy="42.2877495414" r="5.84103512015" style="fill:#9fa19f" /><circle cx="1.22069665205" cy="53.4625186947" r="6.36510500808" style="fill:#a3a6a0" /><circle cx="76.8514932388" cy="-48.0579880862" r="1.60447761194" style="fill:#ad678c" /><circle cx="53.768007855" cy="-30.7925877131" r="1" style="fill:#b6a0ab" /><circle cx="-46.7963984875" cy="-22.716319302" r="4.43069306931" style="fill:#cfd1d3" /><circle cx="-42.6614208033" cy="30.4757265561" r="6.36510500808" style="fill:#9a9d9b" /><circle cx="59.3399237863" cy="-52.5497415679" r="1" style="fill:#d798c3" /><circle cx="-35.1293016049" cy="36.9846476443" r="7.5884244373" style="fill:#aeb0ae" /><circle cx="19.1479975417" cy="94.8302843815" r="1" style="fill:#879e54" /><circle cx="-46.8230917039" cy="-23.130542489" r="3.20241691843" style="fill:#bec0c2" /><circle cx="2.36730347032" cy="50.3661249186" r="4.88636363636" style="fill:#a4a4a4" /><circle cx="-42.6236307197" cy="-33.7274721736" r="1" style="fill:#808286" /><circle cx="-48.6797722169" cy="19.4075586602" r="6.80397727273" style="fill:#a4a8a6" /><circle cx="62.7929908838" cy="-41.2620270896" r="1" style="fill:#a47b92" /><circle cx="-51.221897319" cy="14.5359167524" r="5.66473988439" style="fill:#a0a5a4" /><circle cx="-47.5793654033" cy="-19.8831130179" r="2.42424242424" style="fill:#c2c4c5" /><circle cx="-59.8574337402" cy="-34.1120957664" r="1" style="fill:#58626c" /><circle cx="-24.3433300539" cy="45.2305091015" r="7.11907810499" style="fill:#acaeab" /><circle cx="118.802037004" cy="17.1424311051" r="1" style="fill:#a64131" /><circle cx="5.64413599166" cy="52.6522972182" r="6.75324675325" style="fill:#a6a8a3" /><circle cx="-45.6421497759" cy="-26.6850286504" r="3.78453038674" style="fill:#aaacaf" /><circle cx="-140.091149566" cy="-41.7375896105" r="3.88586956522" style="fill:#045675" /><circle cx="-47.8313616477" cy="-21.8896361749" r="2.74193548387" style="fill:#b6b8ba" /><circle cx="-44.802313472" cy="-26.4242053035" r="4.140625" style="fill:#d6d8da" /><circle cx="3.91210918585" cy="53.4992481196" r="6.68630338733" style="fill:#9c9f99" /><circle cx="9.18513994333" cy="51.4630173188" r="6.57012195122" style="fill:#a1a39f" /><circle cx="-108.38850776" cy="-31.7463173685" r="1" style="fill:#316e85" /><circle cx="-3.86053714662" cy="52.3031966162" r="7.32142857143" style="fill:#989b97" /><circle cx="78.0328272398" cy="47.8409869134" r="1" style="fill:#ad8b65" /><circle cx="86.5984685204" cy="68.6081857234" r="1" style="fill:#a27e40" /></svg>
In [228]:
import json

def coloursToJson(colours):
    colours2 = [(list(colour[0]), colour[1]) for colour in colours]
    return json.dumps(colours2)

def jsonToColours(string):
    data = json.loads(string)
    return [(np.array(d[0]), d[1]) for d in data]
In [229]:
from peewee import *
from playhouse.sqlite_ext import SqliteExtDatabase
import datetime

class ColoursField(TextField):
#     db_field = 'colour'

    def db_value(self, value):
        return coloursToJson(value)

    def python_value(self, value):
        return jsonToColours(value) # convert str to UUID

db = SqliteExtDatabase('images.db')

class BaseModel(Model):
    class Meta:
        database = db
        
class Emotion(BaseModel):
    name = CharField(unique=True)
        
class Group(BaseModel):
    name = CharField(unique=True)

class Artwork(BaseModel):
    author = CharField()
    age = SmallIntegerField(index=True)
    gender = FixedCharField(max_length=1) # we should not really use this one
    group = ForeignKeyField(Group, related_name='artworks', index=True)
    emotion = ForeignKeyField(Emotion, related_name='artworks', index=True)
    created_date = DateTimeField(default=datetime.datetime.now)
    filename = CharField()
    colours = ColoursField() # serialised colours + percentages: [([r,g,b], percentage), ...]

db.connect()
db.create_tables([Emotion, Group, Artwork])
In [230]:
import random
from PIL import Image

emos = ["anger","contempt","disgust","fear","joy","sadness","surprise"]
emotions = []
for emo in emos:
    emotion = Emotion(name=emo)
    emotion.save()
    emotions.append(emotion)

# # Generate some random data:
for i in range(4,8):
    group = Group.create(name='Groep %s' % i)
    group.save()
    
#     some images:
    for j in range(20):
        genders = ['m','f','u']
        img = Artwork()
        img.gender = random.choice(genders)
        img.author = "%s %s%s" %  (img.gender, i,j)
        img.age = i + 4 + random.choice([-1,0,0,0,0,1,1,2])
        img.group = group
        img.emotion = random.choice(emotions)
        img.filename = random.choice(files)
        img.colours = getColoursForImageByClusters(Image.open(img.filename))
        img.save()
        print(img.author)
    

# # No need to set `is_published` or `created_date` since they
# # will just use the default values we specified.
# Tweet.create(user=charlie, message='My first tweet')
m 40
u 41
f 42
f 43
u 44
u 45
f 46
f 47
m 48
f 49
m 410
m 411
f 412
m 413
m 414
f 415
f 416
u 417
f 418
m 419
f 50
f 51
m 52
f 53
u 54
f 55
u 56
f 57
u 58
m 59
u 510
f 511
u 512
m 513
u 514
u 515
u 516
u 517
f 518
m 519
m 60
f 61
f 62
f 63
m 64
m 65
f 66
u 67
f 68
u 69
u 610
m 611
m 612
f 613
m 614
f 615
u 616
u 617
f 618
m 619
u 70
u 71
f 72
f 73
m 74
u 75
m 76
f 77
f 78
u 79
f 710
f 711
u 712
f 713
f 714
u 715
f 716
m 717
m 718
u 719
In [211]:
 
Out[211]:
'[[[179.9060773480663, 181.53867403314916, 182.0331491712707], 1.6088888888888888], [[141.23, 75.99, 98.315], 0.8888888888888888], [[160.1976149914821, 162.10732538330495, 155.62862010221465], 2.6933333333333334], [[152.99333333333334, 94.78, 148.60666666666665], 0.6622222222222223], [[193.77777777777777, 123.0, 168.3939393939394], 0.44], [[168.1039501039501, 170.13617463617464, 166.88149688149687], 4.275555555555556], [[177.01677852348993, 178.6778523489933, 178.19463087248323], 2.648888888888889], [[67.04918032786885, 77.21311475409836, 86.59016393442623], 0.5466666666666666], [[173.30769230769232, 146.56410256410257, 154.9102564102564], 0.3466666666666667], [[150.82228116710874, 93.60212201591511, 120.54111405835543], 1.6755555555555555], [[211.6315789473684, 184.57894736842104, 139.3684210526316], 0.1688888888888889], [[159.63188976377953, 164.77165354330708, 159.78543307086613], 2.2577777777777777], [[167.3994673768309, 170.4247669773635, 170.61517976031956], 3.3377777777777777], [[144.29965156794424, 144.44947735191639, 140.27177700348432], 1.28], [[94.23636363636363, 137.83636363636364, 152.38181818181818], 0.24444444444444444], [[223.64262295081969, 224.61639344262295, 226.7934426229508], 1.3555555555555556], [[210.8168604651163, 212.86627906976744, 215.2906976744186], 1.528888888888889], [[6.594936708860759, 115.18987341772151, 155.60759493670886], 0.3466666666666667], [[157.35576923076923, 161.35576923076923, 123.125], 0.4622222222222222], [[156.63006756756758, 162.0185810810811, 158.1689189189189], 2.6355555555555554], [[149.6058091286307, 150.80705394190872, 146.56639004149378], 2.1244444444444444], [[128.13698630136986, 157.04109589041096, 169.75342465753425], 0.32], [[29.6, 35.005, 40.295], 0.8844444444444445], [[157.73553719008265, 158.5702479338843, 156.62809917355372], 2.151111111111111], [[197.83333333333334, 94.44791666666667, 77.14583333333333], 0.4266666666666667], [[218.34698795180722, 220.7710843373494, 222.83132530120483], 1.8444444444444446], [[187.10290237467018, 188.79419525065964, 189.97097625329815], 1.6844444444444444], [[149.91836734693877, 177.42857142857142, 186.6326530612245], 0.24], [[197.8785046728972, 200.45794392523365, 201.70404984423675], 1.4266666666666667], [[110.91764705882353, 115.76470588235294, 126.74117647058823], 0.7688888888888888], [[202.83540372670808, 205.35403726708074, 206.77018633540374], 1.431111111111111], [[170.44977678571428, 172.41852678571428, 169.57254464285714], 3.982222222222222], [[159.3807763401109, 161.01293900184842, 159.4898336414048], 2.4044444444444446], [[163.50565428109854, 166.2697899838449, 160.48949919224555], 2.7511111111111113], [[173.92164179104478, 103.23880597014926, 140.9589552238806], 1.191111111111111], [[182.7078651685393, 160.85393258426967, 171.7078651685393], 0.4], [[207.13366336633663, 209.55940594059405, 211.4009900990099], 1.7955555555555556], [[154.0241935483871, 157.85806451612902, 155.58709677419355], 2.7511111111111113], [[215.15384615384616, 152.19230769230768, 195.76923076923077], 0.2311111111111111], [[174.42550911039658, 176.2036441586281, 174.82636655948554], 4.1466666666666665], [[135.30208333333334, 158.20833333333334, 84.25520833333333], 0.8533333333333334], [[190.00302114803625, 192.4320241691843, 194.32628398791542], 1.471111111111111], [[164.51732101616628, 164.8337182448037, 164.13856812933025], 1.9555555555555555], [[128.25698324022346, 130.3631284916201, 134.0949720670391], 0.8044444444444444], [[164.157223796034, 168.20396600566573, 166.73796033994336], 3.128888888888889], [[164.8181818181818, 123.38842975206612, 146.38842975206612], 0.5422222222222223], [[160.0853889943074, 165.45351043643265, 164.0360531309298], 2.3066666666666666], [[194.1851851851852, 196.1077441077441, 197.27609427609428], 1.32], [[88.30882352941177, 98.70588235294117, 108.88235294117646], 0.5777777777777777], [[172.02560819462227, 174.33802816901408, 171.95774647887325], 3.471111111111111], [[166.6216216216216, 65.90090090090091, 49.932432432432435], 0.9866666666666667], [[166.16450216450215, 168.14141414141415, 163.17460317460316], 3.08], [[170.20994475138122, 172.6988950276243, 175.2403314917127], 1.6088888888888888], [[4.489130434782608, 86.18478260869566, 117.40760869565217], 1.6355555555555557], [[182.05501618122977, 184.92556634304208, 186.9190938511327], 1.3777777777777778], [[214.34375, 216.5078125, 218.75], 1.7066666666666668], [[156.8822652757079, 159.3800298062593, 153.575260804769], 3.017777777777778], [[161.99851851851852, 163.22962962962964, 159.51407407407407], 2.9155555555555557], [[49.36231884057971, 110.3913043478261, 133.20289855072463], 0.29333333333333333], [[152.9632265717675, 155.12692763938315, 151.33333333333334], 3.7333333333333334], [[173.9673913043478, 139.66304347826087, 101.71739130434783], 0.4088888888888889], [[162.08, 126.77, 64.05], 0.4444444444444444]]'