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

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
