Ejemplo n.º 1
0
def generate_avatar(seed):
    """
    Generate avatar. If not seed is give, a random one is created.
    """
    if seed:
        random.seed(seed)

    def r(enum_):
        return random.choice(list(enum_))

    avatar = pa.PyAvataaar(
        style=pa.AvatarStyle.CIRCLE,
        # style=pa.AvatarStyle.TRANSPARENT,
        skin_color=r(pa.SkinColor),
        hair_color=r(pa.HairColor),
        facial_hair_type=r(pa.FacialHairType),
        facial_hair_color=r(pa.HairColor),
        top_type=r(pa.TopType),
        hat_color=r(pa.Color),
        mouth_type=r(pa.MouthType),
        eye_type=r(pa.EyesType),
        eyebrow_type=r(pa.EyebrowType),
        nose_type=r(pa.NoseType),
        accessories_type=r(pa.AccessoriesType),
        clothe_type=r(pa.ClotheType),
        clothe_color=r(pa.Color),
        clothe_graphic_type=r(pa.ClotheGraphicType),
    )
    return avatar
Ejemplo n.º 2
0
def avatarGenerator():

    current = time.strftime("%Y%m%d%H%M%S")
    filename = 'module002/static/{}.png'.format(current)

    def r(enum_):
        return random.choice(list(enum_))

    avatar = pa.PyAvataaar(
        style=pa.AvatarStyle.CIRCLE,
        skin_color=r(list(pa.SkinColor)),
        hair_color=r(list(pa.HairColor)),
        facial_hair_type=r(list(pa.FacialHairType)),
        facial_hair_color=r(pa.HairColor),
        top_type=r(pa.TopType),
        hat_color=r(pa.Color),
        mouth_type=r(pa.MouthType),
        eye_type=r(pa.EyesType),
        eyebrow_type=r(pa.EyebrowType),
        nose_type=r(pa.NoseType),
        accessories_type=r(pa.AccessoriesType),
        clothe_type=r(pa.ClotheType),
        clothe_color=r(pa.Color),
        clothe_graphic_type=r(pa.ClotheGraphicType),
    )
    #avatar = pa.PyAvataaar()
    avatar.render_png_file(filename)
    return current
Ejemplo n.º 4
0
def test_create_all():
    with tempfile.TemporaryDirectory() as tmp_dir_name:
        for attr, value in attrs.items():
            print(f"Rendering {attr}")
            attributes = {}
            if isinstance(value, dict):
                new_value = value.pop(attr)
                attributes.update(value)
                value = new_value

            for attr_type in value:
                attributes.update({
                    attr: attr_type,
                })
                avatar = pa.PyAvataaar(**attributes)
                avatar_file = pathlib.Path(tmp_dir_name).joinpath(
                    f'{attr_type.name.lower()}.png')
                avatar.render_png_file(str(avatar_file))
                assert avatar_file.exists()
Ejemplo n.º 5
0
def test_create_all_locally():
    output_dir = pathlib.Path(__file__).parent.joinpath('out')

    for attr, value in attrs.items():
        print(f"Rendering {attr}")
        attr_types_dir = output_dir.joinpath(attr)
        attr_types_dir.mkdir(parents=True, exist_ok=True)
        attributes = {}
        if isinstance(value, dict):
            new_value = value.pop(attr)
            attributes.update(value)
            value = new_value

        for attr_type in value:
            attributes.update({
                attr: attr_type,
            })
            avatar = pa.PyAvataaar(**attributes)
            avatar.render_png_file(
                str(attr_types_dir.joinpath(f'{attr_type.name.lower()}.png')))
            avatar.render_svg_file(
                str(attr_types_dir.joinpath(f'{attr_type.name.lower()}.svg')))
Ejemplo n.º 6
0
def generate_avatar_image():
    logging.info('Generating avatar image')
    custom_circle_colors = [
        'BLUE_01',
        'BLUE_02',
        'PASTEL_BLUE',
        'PASTEL_GREEN',
        'PASTEL_ORANGE',
        'PASTEL_RED',
        'PASTEL_YELLOW',
    ]
    custom_mouth_types = [
        'DEFAULT',
        'EATING',
        'GRIMACE',
        'SMILE',
        'TONGUE',
        'TWINKLE',
    ]
    custom_eyebrow_types = [
        'DEFAULT',
        'DEFAULT_NATURAL',
        'FLAT_NATURAL',
        'RAISED_EXCITED',
        'RAISED_EXCITED_NATURAL',
        'SAD_CONCERNED',
        'SAD_CONCERNED_NATURAL',
        'UNI_BROW_NATURAL',
        'UP_DOWN',
        'UP_DOWN_NATURAL',
        'FROWN_NATURAL',
    ]
    custom_eye_types = [
        'DEFAULT',
        'CLOSE',
        'EYE_ROLL',
        'HAPPY',
        'HEARTS',
        'SIDE',
        'SQUINT',
        'SURPRISED',
        'WINK',
        'WINK_WACKY',
    ]

    # pick a random value from default types
    def r(enum_):
        return random.choice(list(enum_))

    # Make a random customization selection from custom arrays
    def rc(customization, array):
        return eval("py_avataaars." + customization + "." +  random.choice(array))

    avatar = py_avataaars.PyAvataaar(
        style=py_avataaars.AvatarStyle.CIRCLE,
        background_color=rc("Color", custom_circle_colors),
        skin_color=r(py_avataaars.SkinColor),
        hair_color=r(py_avataaars.HairColor),
        facial_hair_type=r(py_avataaars.FacialHairType),
        facial_hair_color=r(py_avataaars.HairColor),
        top_type=r(py_avataaars.TopType),
        hat_color=r(py_avataaars.Color),
        mouth_type=rc("MouthType", custom_mouth_types),
        eye_type=rc("EyesType", custom_eye_types),
        eyebrow_type=rc("EyebrowType", custom_eyebrow_types),
        nose_type=r(py_avataaars.NoseType),
        accessories_type=r(py_avataaars.AccessoriesType),
        clothe_type=r(py_avataaars.ClotheType),
        clothe_color=r(py_avataaars.Color),
        clothe_graphic_type=r(py_avataaars.ClotheGraphicType),
    )

    try:
        avatar.render_png_file('avatar.png')
    except Exception as e:
        logging.ERROR('Could not write avatar file with error (boop): %s', e)
Ejemplo n.º 7
0
def image_file(tmpdir_factory):
    fn = tmpdir_factory.mktemp("data").join("img.png")
    avatar = pa.PyAvataaar(mouth_type=pa.MouthType.SMILE, )
    avatar.render_png_file(str(fn))
    return fn
Ejemplo n.º 8
0
def draw_avatar(base_picture):
    if base_picture is None or not check_if_defined(base_picture):
        return 'default_avatar.png'
    name, ext = os.path.splitext(base_picture['picPath'])
    avatar_name = "{name}_avatar.png".format(name=name)
    avatar_path = os.path.join(config.app.config['UPLOAD_FOLDER'], avatar_name)

    if (os.path.exists(avatar_path)):
        return avatar_name
    emotions = [
        'happy', 'surprised', 'fear', 'confused', 'sad', 'calm', 'disgusted',
        'angry'
    ]
    main_emotion = sorted(
        [(emotion, base_picture.get(emotion))
         for count, emotion in enumerate(emotions)
         if base_picture.get(emotion) and abs(base_picture.get(emotion)) >= 1],
        key=lambda emotion: emotion[1],
        reverse=True)[0]

    top = pa.TopType.LONG_HAIR_STRAIGHT if base_picture[
        'gender'] > 0 else pa.TopType.SHORT_HAIR_SHORT_FLAT

    #https://www.independent.co.uk/life-style/hair-colour-men-women-blonde-black-genetic-roots-dna-study-a8308301.html

    facial_hair_color = pa.FacialHairColor.BLONDE_GOLDEN if base_picture[
        'gender'] > 0 else pa.FacialHairColor.BROWN_DARK
    hair_color = pa.HairColor.BLONDE_GOLDEN if base_picture[
        'gender'] > 0 else pa.HairColor.BROWN_DARK

    options_eyes = {
        'happy': pa.EyesType.HAPPY,
        'surprised': pa.EyesType.SURPRISED,
        'fear': pa.EyesType.SURPRISED,
        'confused': pa.EyesType.DEFAULT,
        'sad': pa.EyesType.CRY,
        'calm': pa.EyesType.DEFAULT,
        'disgusted': pa.EyesType.DIZZY,
        'angry': pa.EyesType.SQUINT
    }

    options_eyebrow = {
        'happy': pa.EyebrowType.DEFAULT_NATURAL,
        'surprised': pa.EyebrowType.RAISED_EXCITED_NATURAL,
        'fear': pa.EyebrowType.RAISED_EXCITED_NATURAL,
        'confused': pa.EyebrowType.FROWN_NATURAL,
        'sad': pa.EyebrowType.SAD_CONCERNED_NATURAL,
        'calm': pa.EyebrowType.DEFAULT_NATURAL,
        'disgusted': pa.EyebrowType.FROWN_NATURAL,
        'angry': pa.EyebrowType.ANGRY_NATURAL
    }
    options_mouth = {
        'happy': pa.MouthType.SMILE,
        'surprised': pa.MouthType.SCREAM_OPEN,
        'fear': pa.MouthType.SCREAM_OPEN,
        'confused': pa.MouthType.CONCERNED,
        'sad': pa.MouthType.SAD,
        'calm': pa.MouthType.DEFAULT,
        'disgusted': pa.MouthType.GRIMACE,
        'angry': pa.MouthType.DISBELIEF
    }

    options_accessory = {
        'sunglasses': pa.AccessoriesType.SUNGLASSES,
        'eyeglasses': pa.AccessoriesType.PRESCRIPTION_01
    }

    options_facial_hair = {
        'beard': pa.FacialHairType.BEARD_LIGHT,
        'mustache': pa.FacialHairType.MOUSTACHE_MAGNUM
    }

    max_accessory = max(options_accessory, key=lambda k: base_picture[k])
    if base_picture[max_accessory] < 0:
        accessory = pa.AccessoriesType.DEFAULT
    else:
        accessory = options_accessory[max_accessory]

    max_facial_hair = max(options_facial_hair, key=lambda k: base_picture[k])
    if base_picture[max_facial_hair] < 0:
        facial_hair = pa.FacialHairType.DEFAULT
    else:
        facial_hair = options_facial_hair[max_facial_hair]

    avatar = pa.PyAvataaar(
        style=pa.AvatarStyle.TRANSPARENT,
        skin_color=pa.SkinColor.YELLOW,
        hair_color=hair_color,
        facial_hair_type=facial_hair,
        facial_hair_color=facial_hair_color,
        top_type=top,
        hat_color=pa.ClotheColor.BLACK,
        mouth_type=options_mouth[main_emotion[0]],
        eye_type=options_eyes[main_emotion[0]],
        eyebrow_type=options_eyebrow[main_emotion[0]],
        accessories_type=accessory,
        clothe_type=pa.ClotheType.SHIRT_CREW_NECK,
        clothe_color=pa.ClotheColor.HEATHER,
        clothe_graphic_type=pa.ClotheGraphicType.BAT,
    )

    avatar.render_png_file(avatar_path)
    return avatar_name
Ejemplo n.º 9
0
option_clothe_graphic_type = st.sidebar.selectbox(
    'Clothe graphic type',
    list_clothe_graphic_type,
    index=index_clothe_graphic_type)

# Creating the Avatar
# options provided in https://github.com/kebu/py-avataaars/blob/master/py_avataaars/__init__.py
avatar = pa.PyAvataaar(
    #style=pa.AvatarStyle.CIRCLE,
    style=eval('pa.AvatarStyle.%s' % option_style),
    skin_color=eval('pa.SkinColor.%s' % option_skin_color),
    top_type=eval('pa.TopType.SHORT_HAIR_SHORT_FLAT.%s' % option_top_type),
    hair_color=eval('pa.HairColor.%s' % option_hair_color),
    hat_color=eval('pa.ClotheColor.%s' % option_hat_color),
    facial_hair_type=eval('pa.FacialHairType.%s' % option_facial_hair_type),
    facial_hair_color=eval('pa.FacialHairColor.%s' % option_facial_hair_color),
    mouth_type=eval('pa.MouthType.%s' % option_mouth_type),
    eye_type=eval('pa.EyesType.%s' % option_eye_type),
    eyebrow_type=eval('pa.EyebrowType.%s' % option_eyebrow_type),
    nose_type=pa.NoseType.DEFAULT,
    accessories_type=eval('pa.AccessoriesType.%s' % option_accessories_type),
    clothe_type=eval('pa.ClotheType.%s' % option_clothe_type),
    clothe_color=eval('pa.ClotheColor.%s' % option_clothe_color),
    clothe_graphic_type=eval('pa.ClotheGraphicType.%s' %
                             option_clothe_graphic_type))


# Custom function for encoding and downloading avatar image
def imagedownload(filename):
    image_file = open(filename, 'rb')
    b64 = base64.b64encode(
        image_file.read()).decode()  # strings <-> bytes conversions