★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>

1. 项目背景和demo效果

作为一个算法工程师,如何向别人展示你的工作成果是笔者经常遇到的问题。
很多时候,你训练出了一个模型,效果还不错,需要给别人演示,特别是给大老板(ji shu xiao bai)做汇报的时候。

这时候你总不能打开notebook,切换开发环境,运行一些命令然后焦急的等待结果吧。
特别是有时候还可能遇到程序崩掉的尴尬。

这时候,如果能把之前做好的模型做成推理模型,再配上一些简单的图形化操作界面来演示,那就不一样了。满满的逼格,是不是升值加薪有望了!

基于此,笔者就尝试着将一些现成的模型配上一些简单的界面来展示模型的预测效果。而paddleHub里面就有很多训练好的模型,可以直接调用。

本项目就尝试着将paddleHub里面的U2Net_Portrait模型, 一个可以检测人脸,并将人脸变成素描风格的模型封装到PyQt里面。通过简单的图形化操作就可以体验该模型的效果。

Demo效果如下:

在这里插入图片描述

怎么样,是不是看着还不错。比用notebook演示效果要好多了吧。

画图的速度也很快,是不是? 好吧,其实推理速度没有那么快。这里为了提高用户老爷的体验,做了一个小小的手脚: 先把需要推理文件批量处理好在给后面使用。

下面有详细的配方,教你怎么玩。

2. 模型简介

U2Net即U-square-Net是为显著性对象检测而设计的。因为该模型架构是一个两级嵌套的 U 结构,所以称为U Square。

而本项目中用到的U2Net_Portrait模型是基于U2Net的人脸画像生成模型。

点击下方PaddleHub上关于U2Net_Portrait可以查询改模型更详细的信息和使用API及相关参数。

另外大家也可以参考下面这个链接进行再行在线体验,本次主要演示如何进行windows桌面搭载演示。

PaddleHub U2Net_Portrait模型更多信息请点击: U2Net_Portrait模型介绍链接

在线体验请点击: 基于PaddleHub预训练模型的人脸素描(傻瓜式推理版):

3. 桌面版环境配置

需要用到以下工具:

  • PyQt5
  • PaddlePaddle: 没有GPU的电脑可以安装CPU版本
  • PaddleHub

在你本地的环境中依次运行相应的命令安装即可。

另外还需要下载U2Net_Portrait模型。可以在当前的环境中运行下面的命令进行安装:

$ hub install U2Net_Portrait==1.0.0

4. 界面设置与使用

4.1 UI界面

界面设计非常简单,只有必要两个按钮和标签。读者可以使用Qt自带的Designer可视化工具进行托拉拽方式即可完成。

这里笔者使用代码来生成。具体参考项目里面的img2drawing的ImageSelector类,实现的效果如下:

4.2 推理按钮事件设置说明

正常情况下,点击“开始画脸”按钮后开始推理,通过从选择图片按钮连接的事件中获取图片,并读取到内存后调用模型进行推理。

推理完成后并在label标签中显示推理结果。

实际操作中,由于小编的本地环境中没有GPU(Tai Qiong),CPU推理等待时间太长,体验较差,这里使用了一个“调整”方案:即先调用模型,将需要处理的所有文件一次性处理完成。

之后点击“开始画脸”按钮后直接从处理的结果中使用文件名获取已经生成的结果直接显示,极大的改善了用户体验!

同时,读者自行体验时,也可以将下面的代码注释打开,体验点击“开始画脸”时,调用模型生成推理结果,代码如下:

"""
# 由于本地环境中没有GPU,CPU推理等待时间太长,体验较差,不推荐使用
# from predictor import FaceDrawing
# img_obj = FaceDrawing(self.img_path)
# result = img_obj.drawing()
# print(result.shape)
# cv2.imwrite(result_file, result)
# print("save file succeed!")
#
# pixmap = QPixmap(result_file)
# self.image_label_drawing.setPixmap(pixmap)
# self.image_label_drawing.setScaledContents(True)  # 自适应图片大小
"""

'\n# 由于本地环境中没有GPU,CPU推理等待时间太长,体验较差,不推荐使用\n# from predictor import FaceDrawing\n# img_obj = FaceDrawing(self.img_path)\n# result = img_obj.drawing()\n# print(result.shape)\n# cv2.imwrite(result_file, result)\n# print("save file succeed!")\n#\n# pixmap = QPixmap(result_file)\n# self.image_label_drawing.setPixmap(pixmap)\n# self.image_label_drawing.setScaledContents(True)  # 自适应图片大小\n'

5. 总结

本项目通过一个简单的桌面窗体布局结合paddleHub的预训练模型,来展示一个具体AI应用,让更多人用更简单的方式体验AI的乐趣。
所有代码均上传至work目录下,欢迎各位自行下载到本地体验。

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐