Python深度学习实现DIY专属个人表情包

news2024/11/14 15:29:58

引言:

在现代社交媒体的时代,表情包已经成为了人们日常生活中不可或缺的一部分。表情包可以用来表达情感、传递信息,甚至成为一种文化符号。然而,随着表情包的日益普及,大量的表情包已经不能满足人们的需求,许多人开始尝试制作自己的表情包,以满足个性化的需求。制作自己的表情包不仅能够满足个性化需求,还能够锻炼自己的创造力和表现力。本文将为大家详细介绍如何利用深度学习零成本制作专属自己的表情包,让你也能成为一个炫酷的表情包制作大师!
制作表情包的第一步是选择获取人脸特,将人脸五官等个人专属特征通过深度学习绘制获得。制作表情包的第二步是选择一张背景图片,将获取到的五官等信息处理放置背景图中。总之,制作自己的表情包不仅能够满足个性化需求,还能够锻炼自己的创造力和表现力。通过阅读本文,大家可以掌握利用深度学习技术+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:
        inputs_test = Variable(inputs_test)
    d1,d2,d3,d4,d5,d6,d7= net(inputs_test)
    pred = 1.0 - d1[:,0,:,:]
    pred = normPRED(pred)
    save_output(img_name_list[i_test],pred,prediction_dir)
    del d1,d2,d3,d4,d5,d6,d7

最终生成的素描图像如下:
在这里插入图片描述

三、构建表情包

表情包的构建可以简单通过画图板构建。当然,也可以使用一些更高级的图片编辑软件来进行处理。比如,Photoshop、GIMP、Pixlr等软件都是非常好用的图片编辑工具,它们可以帮助你进行裁剪、调整颜色、添加文字等操作,使得你的表情包更加生动有趣。

(1)首先,找到一个表情包背景图,如下:

在这里插入图片描述

(2)使用画图板对生成的素描图像缩放和表情包背景统一尺寸:

在这里插入图片描述

(3)使用画图对其脸部区域进行裁剪复制:

在这里插入图片描述

(4)将复制得到的人脸区域粘贴到表情包背景图中:

在这里插入图片描述

(5)去除多余的边角等,并保存图像,最终可生成专属个人表情包:

在这里插入图片描述

(6)二次加工:

如果你想要制作动态表情包,那么你需要使用一些GIF制作工具。比如,GIFmaker、GIF Brewery、GIF Animator等工具都是非常好用的GIF制作软件,它们可以帮助你将多张图片合成为一个GIF动图,从而制作出生动的表情包。同时也可以尝试将不同的素材进行组合,添加一些有趣的文字或者特效,从而制作出独一无二的表情包。创意和想象力是制作表情包的灵魂,只有你敢于尝试、敢于创新,才能够制作出真正有趣、有用的表情包。
在这里插入图片描述

让我们一起来尝试这个有趣的表情包自制项目吧!

完整代码:https://gitcode.net/qq_42279468/python-emotion.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/431916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何对图片批量重命名?

对于爱好摄影的朋友们来说,不管是手机还是相机拍摄的照片,在导入电脑后,它们的文件名通常都是一串长长的乱码。这不仅会导致桌面看起来杂乱无章,还会给我们查找图片带来很多不便,有时候丢失几张图片都发现不了。不过&a…

7、在vscode上利用cmake构建多文件C++工程

文章目录 (1)创建如下工程文件夹:其中头文件放在include文件夹中,源文件放在src文件夹中(2)在vscode上打开工程文件夹,在对应的文件夹内建立相应的文件1)目录结构2)各文件…

【C语言督学训练营 第十一天】三篇文章吃透数据结构中的线性表(二)----- 链表的增删改查与销毁

文章目录 前言一、链表1.基本介绍2.增删改查原理与实战 总结与源码 前言 谭浩强老师说过:“指针是c语言的灵魂”,今天说到的链表就是由C语言的灵魂所筑,学会了链表之后可以使用链表轻松实现树、图等数据结构,可以轻松化解考研数据…

《无线神经调节的微创技术治疗慢性顽固性疼痛:初步观察报告》

**全文概况 **:该文件讨论了一种新型无线和微创神经调节设备,用于治疗之前曾经失败的患者慢性顽固性疼痛。该设备通过经皮植入的电极远程控制,进行高频背根节神经刺激或周围神经刺激。该系统对于患有腰腿疼痛的患者有重要潜力,因为…

车载 Android开发面试习题整合~

随着车联网技术的不断发展和普及,越来越多的汽车厂商开始使用 Android 操作系统作为车载娱乐和信息娱乐系统的核心。在这个趋势下,车载 Android 应用开发程序员的需求也日益增加。 像一些车企大厂在广招这方面的技术人才。给原本处于落寞的Android 开发行…

PTA:C课程设计(7)

山东大学(威海)2022级大一下C习题集(7)函数题7-6-1 递增的整数序列链表的插入7-6-2 查找学生链表7-6-3 统计专业人数7-6-4 建立学生信息链表编程题7-7-1 查找书籍7-7-2 找出总分最高的学生函数题 7-6-1 递增的整数序列链表的插入…

五子棋透明棋盘界面设计(C语言)

五子棋透明棋盘设计,漂亮的界面制作。程序设置双人对奕,人机模式,对战演示三种模式。设置悔棋,记录功能,有禁手设置。另有复盘功能设置。 本文主要介绍透明的玻璃板那样的五子棋棋盘的制作。作为界面设计,…

「Bug」OpenCV读取图像为 None 分析

头一次遇到 OpenCV 无法读取图像,并且没有任何提示,首先怀疑的就是中文路径,因为大概率是这个地方出错的,但是修改完依旧是None,这就很苦恼了,分析了下出现None的原因,大概有以下三种情况&#…

ssm--MyBatis基础day01

1.MyBatis概述 1.1 ORM框架 对象关系映射&#xff08;Java中的对象 对应 数据库中的表&#xff09; 1.2 官网地址 mybatis 1.3 MyBatis Plus MyBatis-Plus (baomidou.com)官网 1.4 JPA Java 持久层API 2. MAVEN引入 2.1 配置maven 2.2 导入MyBatis <dependency>…

带你们偷瞄编程绕不开的C语言(三)

&#x1f929;本文作者&#xff1a;大家好&#xff0c;我是paperjie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 &#x1f970;内容专栏&#xff1a;这里是《C专栏》&#xff0c;笔者用重金(时间和精力)打造&#xff0c;基础知识一网打尽&#xff0c;希望可以帮到…

面试篇-学习Java多线程编程必备:深入理解volatile与synchronized

1. 概述 1.1 Volatile概述 Volatile是Java中的一种轻量级同步机制&#xff0c;用于保证变量的可见性和禁止指令重排。当一个变量被声明为Volatile类型时&#xff0c;任何修改该变量的操作都会立即被所有线程看到。也就是说&#xff0c;Volatile修饰的变量在每次修改时都会强制…

8080时序驱动液晶屏

一、TFT-LCD简介。 TFT-LCD&#xff08;thin film transistor-liquid crystal display&#xff09;即薄膜晶体管液晶显示器。液晶显示屏的每一个像素上都设置有一个薄膜晶体管&#xff08;TFT&#xff09;&#xff0c;每个像素都可以通过点脉冲直接控制&#xff0c;因而每个节点…

第一节 法学

目录 法学的概念法学的性质 实践性构成了法学的学问性质 法学的研究对象 1.法律制度问题&#xff08;X法律制度&#xff09;2. 社会现实或社会生活关系问题 (Y社会现实/社会关系)3.法律制度与社会现实之间如何对应的问题 &#xff08;Yf(x) f为什么函数&#xff09; 法学的概…

ChatGPT或要推出APP,OpenAI官宣为ChatGPT招募移动端开发工程师

文 | 兔子酱OpenAI官方招聘页面放出了英雄帖&#xff0c;他们正在为ChatGPT招聘移动端工程师&#xff1a;传送门&#xff1a;https://openai.com/careers/mobile-engineering-manager-chatgpt其中&#xff0c;跨iOS和Android的工程主管年薪为20至37万美元,总薪酬还包括慷慨的股…

ActiveMQ使用(五):在JavaScript中发送的MQTT消息在C#中变为字节数组

ActiveMQ使用(五):在JavaScript中发送的MQTT消息在C#中变为字节数组 1. 问题描述 ** C#中的代码: ** internal class Program{static void Main(string[] args){ConnectionFactory factory new ConnectionFactory("tcp://localhost:61616");IConnection connecti…

【数据结构与算法】程序员常用10种算法(分治算法)

一、分治算法介绍 在计算机科学中&#xff0c;分治法就是运用分治思想的一种很重要的算法。 分治&#xff0c;字面上的解释是“分而治之”&#xff0c;就是把一个复杂的问题分成两个或更多的相同或相似的子问题&#xff0c;再把子问题分成更小的子问题……直到最后子问题可以…

【DNS】域名解析服务

文章目录 1.DNS1.1 DNS定义1.2 DNS系统作用1.3 DNS解析过程 1.DNS 1.1 DNS定义 DNS是"域名系统"的英文缩写。它作为将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便地访问互联网。 DNS服务使用TCP和UDP的53端口&#xff0c;TCP的53端口用于连…

Java - 内部类

1、本地内部类 2、实例内部类 3、静态内部类 4、匿名内部类 首先&#xff0c;我要在这声明一下&#xff0c;内部类也是类&#xff0c;不管它是属于何种类型。 只要是类&#xff0c;就会有类的特性&#xff1a;继承 / 被继承&#xff0c;实现接口&#xff0c;套娃【内部类再套一…

JWT 鉴权插件上线!让你的 API 更安全!

API鉴权是保证API安全性和可用性的一项重要措施。通过API鉴权&#xff0c;系统可以对用户或者应用进行有效的身份认证和权限管理。 除了我们之前更新的 Basic Auth 鉴权插件&#xff0c;这次给大家带来 JWT 鉴权插件。 JSON Web Token是一种开放标准&#xff0c;可以让服务器生…

数字孪生智慧路桥怎么实现?

近年来&#xff0c;道路桥梁安全事故频发&#xff0c;直接影响到了行车人员的人身安全&#xff0c;并且对整个公路桥梁的稳定性产生了不良影响。因此对道路桥梁运行状态的实时监测、及时进行运行状态的预警、实现巡检运维智慧化&#xff0c;已成为桥梁道路管理重点关注的方面。…