Python深度学习实现DIY专属个人表情包【免费源码】
在现代社交媒体的时代,表情包已经成为了人们日常生活中不可或缺的一部分。表情包可以用来表达情感、传递信息,甚至成为一种文化符号。然而,随着表情包的日益普及,大量的表情包已经不能满足人们的需求,许多人开始尝试制作自己的表情包,以满足个性化的需求。制作自己的表情包不仅能够满足个性化需求,还能够锻炼自己的创造力和表现力。本文将为大家详细介绍如何利用深度学习零成本制作专属自己的表情包,让你也能成为一个炫酷的表情包制作大师!
制作表情包的第一步是选择获取人脸特,将人脸五官等个人专属特征通过深度学习绘制获得。制作表情包的第二步是选择一张背景图片,将获取到的五官等信息处理放置背景图中。总之,制作自己的表情包不仅能够满足个性化需求,还能够锻炼自己的创造力和表现力。通过阅读本文,大家可以掌握利用深度学习技术+python实现DIY专属个人表情包的制作,最终效果如图:
深度学习实现DIY专属个人表情包的技术路线分为以下几个部分:
(1)通过U2NET深度学习模型实现从照片中提取人脸信息,并绘制成素描图像;
(2)处理构建表情包背景图;
(3)对素描生成图像和表情包背景图做处理,生成结果;
其中的程序操作流程:
首先运行u2net_portrait_test生成照片素描图,并缩放至和表情包背景图统一尺寸;然后通过画图板将素描图人脸区域复制到背景图人脸,最后对其进行基本处理。
具体功能的形成分为以下几个部分介绍,最终代码也会免费放置文末,供大家学习参考。
一、项目环境要求
项目使用的深度学习模型框架为Pytorch。具体的版本号关系如下:
torch 1.8.1+cu111
torch-encoding 1.2.2b20211110
torchfile 0.1.0
torchgeometry 0.1.2
torchlight 1.0
torchnet 0.0.4
torchsample 0.1.3
torchtext 0.6.0
torchvision 0.9.1+cu111
二、人脸素描图像生成
人脸五官等特征的绘制通过深度学习模型U2NET实现,最终模型可生成五官素描照。
2.1 U2NET模型基本介绍
2.2 U2NET代码介绍
U2NET测试代码主要分为读取文件路径、测试图片读入、加载模型和生成结果几个部分。
(1)定义测试图片路径、结果保存路径和读取模型代码如下:
image_dir = './test_data/test_portrait_images/portrait_im'
prediction_dir = './test_data/test_portrait_images/portrait_results'
if(not os.path.exists(prediction_dir)):
os.mkdir(prediction_dir)
model_dir = './saved_models/u2net_portrait/u2net_portrait.pth'
img_name_list = glob.glob(image_dir+'/*')
print("Number of images: ", len(img_name_list))
(2)数据读入代码如下:
test_salobj_dataset = SalObjDataset(img_name_list = img_name_list,
lbl_name_list = [],
transform=transforms.Compose([RescaleT(256),
ToTensorLab(flag=0)])
test_salobj_dataloader = DataLoader(test_salobj_dataset,
batch_size=1,
shuffle=False,
num_workers=1)
(3)加载模型文件,变为测试模式:
net = U2NET(3,1)
net.load_state_dict(torch.load(model_dir))
if torch.cuda.is_available():
net.cuda()
net.eval()
(4)提取特征并生成结果,保存结果:
for i_test, data_test in enumerate(test_salobj_dataloader):
print("inferencing:",img_name_list[i_test].split(os.sep)[-1])
inputs_test = data_test['image']
inputs_test = inputs_test.type(torch.FloatTensor)
if torch.cuda.is_available():
inputs_test = Variable(inputs_test.cuda())
else: