1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

怎么利用Python实现一键将头像转成动漫风?

Python制作UI界面的框架 – PyQt5

Python的应用范围非常广泛,在工作中我们也经常需要用到Python这门语言。比如,将平常的头像照片转换成具有动漫风格的风格。最近在Github上有一个将头像转化成动漫风格的项目,对于一些没有太多技术背景的同学来说,可能会不知道如何使用这个项目。不过,小编为大家制作了一个UI界面,只需一键点击,就可以让头像照片转化成动漫风格。

怎么利用Python实现一键将头像转成动漫风?

UI界面的制作

Python编程语言有很多的UI界面编程框架可供选择,可以根据自己的需要来决定采用哪个框架。在这里,小编使用的是PyQt5的框架。因为它支持手动绘制控件,并且可以动态加载。我们可以在Pycharm中添加QtDesigner作为外部工具,以便进行界面设计并生成ui文件。

首先,点击菜单栏的“File”->“Settings”,进入设置界面。在左侧选中“Tools”,然后在右侧的“External Tools”中点击“+”号,添加外部工具。可以参考以下填写信息:

  • Name:可以自定义
  • program:QtDesigner的安装路径,小编这里引用的是Anaconda下面安装的PyQt5-tools的相关文件
  • parameter:不填
  • directory:不填

添加完成后,我们就可以在Pycharm的菜单栏中找到QtDesigner,并使用它来绘制控件。在界面左侧,我们能看到一系列的控件,例如PushButton(按钮)、LineEdit(文本编辑框)、Label(标签)、HorizontalLine(水平线)以及GraphicsView(绘画)。我们可以将这些控件拖拽到界面中进行UI的设计。

代码逻辑

在点击“选择图片”按钮后,我们可以使用以下代码来实现图片上传的功能。

#选择本地图片上传
def openImage(self):
    global imgNamepath #将图片路径设置为全局变量,方便其他地方引用
    imgNamepath, imgType = QFileDialog.getOpenFileName(self.ui,"选择图片","D:","*.jpg;;*.png;;All Files(*)")
    img = QtGui.QPixmap(imgNamepath).scaled(self.ui.label_4.size(), aspectMode=Qt.KeepAspectRatio)
    print("img:", img.width(), img.height())
    self.ui.label_4.setFixedSize(img.width(), img.height())
    #在label控件上显示选择的图片
    self.ui.label_4.setPixmap(img)
    self.ui.label_4.repaint()
    #显示所选图片的路径
    self.ui.lineEdit.setText(imgNamepath)

同样地,当我们点击“保存”按钮的时候,可以使用以下代码来实现图片保存到本地。

#保存图片
def saveImage(self):
    img = self.ui.label_5.pixmap().toImage()
    fpath, ftype = QFileDialog.getSaveFileName(self.ui, "保存", "D:", "*.jpg;;*.png;;All Files(*)")
    img.save(fpath)

当我们点击“开始”按钮的时候,便尝试将上传的图片转换成动漫风格。下面的代码实现了这个功能。

def startAction(self):
    net = Generator()
    net.load_state_dict(torch.load("./weights/face_paint_512_v2.pt", map_location="cpu"))
    net.to("cpu").eval()
    image = self.load_image(imgNamepath)
    print("开始加载图片.......")
    with torch.no_grad():
        image = to_tensor(image).unsqueeze(0) * 2 - 1
        out = net(image.to("cpu"), False).cpu()
        out = out.squeeze(0).clip(-1, 1) * 0.5 + 0.5
        out = to_pil_image(out)
        image_name = imgNamepath.split(".")[0]
        out.save(image_name + "_animegan" + ".png")
    print("图片保存成功!!")
    imgShow = QtGui.QPixmap(image_name + "_animegan" + ".png").scaled(self.ui.label_5.size(), aspectMode=Qt.KeepAspectRatio)
    self.ui.label_5.setFixedSize(imgShow.width(), imgShow.height())
    self.ui.label_5.setScaledContents(True)
    self.ui.label_5.setPixmap(imgShow)
    print(f"image saved:{image_name}")

代码中我们引用了一个预先训练完成的神经网络,并且默认的是使用电脑的CPU来跑这个模型。因此,整个运行过程需要一些时间,具体的时间取决于不同电脑的硬件配置。

界面运行和打包

最后,我们需要将UI界面运行起来并打包成exe可执行文件。当然,代码中也使用了外部的第三方文件,所以整个打包过程也比较复杂。在下一篇文章中,小编会详细讲解如何操作。

以上就是对头像照片转化为动漫风格的功能的实现方式的总结。希望能为读者们带来帮助。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7204.html