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
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
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()
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')))
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)
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
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
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