【githubgirl】通过生成对抗网络,快速实现妆容转移、一键上妆等功能

PSGAN,北航与国科大在 2019 年与 GitHub 开源的一项技术,可通过生成对抗网络,快速实现妆容转移、一键上妆等功能。

几天前,来自西安电子科技大学的一名学生为其实现了 C++ 版本,并构建了可在 Windows 上运行的 QT 软件,感兴趣的同学可以把玩研究一下。

Python:github.com/wtjiang98/PSGAN
C++:github.com/EdVince/PSGAN-NCNN

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用wxpython来制作妆容替换的GUI界面,实现如下步骤: 1. 导入wxpython库和其他需要用到的库 ``` import wx import cv2 import numpy as np ``` 2. 创建一个继承自wx.Frame的类,用于创建GUI界面 ``` class MakeupFrame(wx.Frame): def __init__(self, parent, title): super(MakeupFrame, self).__init__(parent, title=title, size=(800, 600)) self.InitUI() self.Centre() self.Show() ``` 3. 在InitUI()方法中添加GUI界面的各种组件,如按钮、文本框、图像显示器等 ``` def InitUI(self): # 创建一个垂直方向的BoxSizer来排列各种组件 vbox = wx.BoxSizer(wx.VERTICAL) # 创建一个水平方向的BoxSizer来放置“选择图片”按钮和文本框 hbox1 = wx.BoxSizer(wx.HORIZONTAL) st1 = wx.StaticText(self, label='选择图片:') hbox1.Add(st1, flag=wx.RIGHT, border=8) self.tc = wx.TextCtrl(self) hbox1.Add(self.tc, proportion=1) self.btn = wx.Button(self, label='选择') hbox1.Add(self.btn, flag=wx.LEFT, border=8) vbox.Add(hbox1, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10) # 创建一个水平方向的BoxSizer来放置“选择妆容”按钮和文本框 hbox2 = wx.BoxSizer(wx.HORIZONTAL) st2 = wx.StaticText(self, label='选择妆容:') hbox2.Add(st2, flag=wx.RIGHT, border=8) self.tc2 = wx.TextCtrl(self) hbox2.Add(self.tc2, proportion=1) self.btn2 = wx.Button(self, label='选择') hbox2.Add(self.btn2, flag=wx.LEFT, border=8) vbox.Add(hbox2, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10) # 创建一个水平方向的BoxSizer来放置“替换”按钮和图像显示器 hbox3 = wx.BoxSizer(wx.HORIZONTAL) self.btn3 = wx.Button(self, label='替换') hbox3.Add(self.btn3, flag=wx.RIGHT, border=8) self.imageCtrl = wx.StaticBitmap(self) hbox3.Add(self.imageCtrl, flag=wx.LEFT|wx.ALIGN_CENTER_VERTICAL, border=10) vbox.Add(hbox3, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10) self.SetSizer(vbox) ``` 4. 在__init__方法中为各种按钮绑定事件处理函数 ``` self.btn.Bind(wx.EVT_BUTTON, self.OnOpenFile) self.btn2.Bind(wx.EVT_BUTTON, self.OnOpenFile2) self.btn3.Bind(wx.EVT_BUTTON, self.OnReplace) ``` 5. 实现各种事件处理函数,例如选择图片、选择妆容、替换等 ``` def OnOpenFile(self, event): wildcard = "JPEG files (*.jpg)|*.jpg" dialog = wx.FileDialog(None, "Choose a file", wildcard=wildcard, style=wx.FD_OPEN) if dialog.ShowModal() == wx.ID_OK: self.tc.SetValue(dialog.GetPath()) dialog.Destroy() def OnOpenFile2(self, event): wildcard = "JPEG files (*.jpg)|*.jpg" dialog = wx.FileDialog(None, "Choose a file", wildcard=wildcard, style=wx.FD_OPEN) if dialog.ShowModal() == wx.ID_OK: self.tc2.SetValue(dialog.GetPath()) dialog.Destroy() def OnReplace(self, event): img_path = self.tc.GetValue() makeup_path = self.tc2.GetValue() # 读取图片和妆容 img = cv2.imread(img_path) makeup = cv2.imread(makeup_path) # 对妆容进行缩放,使其与图片大小相同 makeup = cv2.resize(makeup, (img.shape[1], img.shape[0])) # 将妆容图像的alpha通道作为掩码 mask = makeup[:, :, 3] / 255.0 mask = np.repeat(mask[:, :, np.newaxis], 3, axis=2) # 将妆容图像的RGB通道与掩码相乘,得到前景图像 fg = makeup[:, :, :3] * mask # 将原始图片和前景图像进行混合 bg = img * (1 - mask) img_with_makeup = bg + fg # 将混合后的图像显示在图像显示器中 height, width = img_with_makeup.shape[:2] img_with_makeup = cv2.cvtColor(img_with_makeup, cv2.COLOR_BGR2RGB) wximg = wx.Bitmap.FromBuffer(width, height, img_with_makeup) self.imageCtrl.SetBitmap(wximg) ``` 综上所述,以上就是使用wxpython制作妆容替换的GUI界面的大致流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值