项目5 教学资源 项目5 图 像 处 理 本项目基于Python语言,借助PyQt5开发图形,调用StableDiffusionXL模型进行智能图像处理的操作,实现AI作画功能。 5.1总体设计 本部分包括整体框架和系统流程。 5.1.1整体框架 整体框架如图51所示。 图51整体框架 5.1.2系统流程 系统流程如图52所示。 图52系统流程 5.2开发环境 本节主要介绍PyQt5的安装过程,给出所需要的环境配置并介绍大模型API的申请步骤。 5.2.1安装PyQt5 在命令行中输入“pip install PyQt5”语句,使用pip命令在线安装PyQt5,如图53所示。 图53安装PyQt5 在命令行中输入“pip install PyQt5tools”语句,安装PyQt5的常用工具,如图54所示。 图54安装PyQt5常用工具 在命令行中输入“pip list”语句,检查是否已有PyQt5,若存在于列表中则证明安装成功,如图55所示。 图55检查PyQt5安装 5.2.2环境配置 在PyCharm中,依次单击File→Settings→Tools→External Tools→Add,实现添加外部工具,如图56所示。 图56添加外部工具 根据安装资源在磁盘中的具体位置,分别完成对Qt Designer、PyUIC和PyRCC外部工具的配置,如图57~图59所示。 图57配置Qt Designer 图58配置PyUIC 图59配置PyRCC 依次单击Tools→External Tools→Qt Designer,打开PyQt5界面,如图510所示; PyQt5设计界面如图511所示。 图510打开PyQt5界面 图511PyQt5设计界面 5.2.3大模型API申请 百度智能云千帆大模型API申请参见1.2.4节。 应用创建成功后,默认开通所有API的调用权限,无须申请授权。然后根据APIKey和SecretKey,使用Python方法获取access_token,相关代码如下。 import requests import json def main(): url = "https://aip.baidubce.com/oauth/2.0/token?client_id=【ApIKey】&client_secret=【SecretKey】&grant_type=client_credentials" payload = json.dumps("") headers = { 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request("POST", url, headers=headers, data=payload) return response.json().get("access_token") if __name__ == '__main__': access_token = main() print(access_token) 预期功能根据用户输入的文本生成图像,所以需要调用StableDiffusionX大模型API,相关代码如下。 import requests import json API_KEY = "x0GOpviGV6M878f9ITBVz5dH" SECRET_KEY = "ZhrsqslDZEj6NiSBQ1BTLRAYHGpf9rT3" def main(): url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/text2image/sd_xl?access_token=" + get_access_token() payload = json.dumps({ "size": "1024x1024", "n": 1, "steps": 20, "sampler_index": "Euler a" }) headers = { 'Content-Type': 'application/json', 'Accept': 'application/json' } response = requests.request("POST", url, headers=headers, data=payload) print(response.text) def get_access_token(): url = "https://aip.baidubce.com/oauth/2.0/token" params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY} return str(requests.post(url, params=params).json().get("access_token")) if __name__ == '__main__': main() 5.3系统实现 图512文件结构 本项目使用PyCharm和PyQt5构建后端与前端系统,文件结构如图512所示。 5.3.1PyQt5组件初始化与绑定机制 定义PyQt5的QWidget类之后完成对界面中控件的布局及绑定设置(初始化在dialog.py中完成),相关代码见“代码文件51”。 5.3.2PyQt5槽函数的定义 当程序触发某种状态或者发生某种事件时会发出一个信号,若程序想捕获这个信号,需要执行相应的逻辑代码,这个过程会用到“槽”,“槽”实际上是一个函数,当信号发射后,执行与之绑定的槽函数,故在槽函数中完成与信号相对应的功能设置,实现参数的传递。 图像处理槽函数(以图像去雾功能为例)相关代码见“代码文件52”。 5.3.3主函数 主函数相关代码如下。 if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) #有且只有一个QApplication对象 my = Master() #实例化Master对象 my.show() #展示窗口 sys.exit(app.exec_()) #程序进行循环等待状态,直到关闭窗口 5.4功能测试 本部分包括图像处理功能测试及图像生成功能测试。 5.4.1图像处理功能测试 运行主程序,进入系统初始界面,如图513所示。 图513系统初始界面 单击“导入图像”按钮,在本地导入.png或.jpg格式的图像,如图514所示。 图514导入图像 色彩增强原始图像如图515所示。 图515色彩增强原始图像 单击“色彩增强”按钮,处理结果显示在原始图像的位置,图像如果发生变化,说明色彩增强功能有效果,处理后的图像将自动保存在images文件夹中,如图516所示。 图516色彩增强处理结果 图像对比度增强原始图像如图517所示。 图517图像对比度增强原始图像 单击“对比度增强”按钮,处理结果显示在原始图像的位置,图像如果发生明显的变化,说明对比度增强功能有效果,处理后的图像将自动保存在images文件夹中,如图518所示。 图518对比度增强处理结果 图像去雾原始图像如图519所示。 图519图像去雾原始图像 单击“图像去雾”按钮,处理结果显示在原始图像的位置,图像如果发生明显的变化,说明去雾功能的效果较为明显,处理过的图像自动保存在images文件夹中,如图520所示。 图520图像去雾处理结果 黑白图像上色原始图像如图521所示。 图521黑白图像上色原始图像 单击“黑白图像上色”按钮,处理结果显示在原始图像的位置,图像如果发生明显的变化,说明黑白图像上色功能有效果,处理后的图像将自动保存在images文件夹中。 随机风格转换原始图像如图522所示。 图522随机风格转换原始图像 单击“随机风格转换”按钮,处理结果显示在原始图像的位置,展示风格转换的结果自动保存在images文件夹中,如图523~图525所示。 图523随机风格转换结果(风格: color_pencil) 图524随机风格转换结果(风格: lavender) 图525随机风格转换结果(风格: scream) 5.4.2图像生成功能测试 在界面下方的输入框中,输入图像描述,然后单击“AI作画”按钮,调用大模型生成的图像显示在画面上方的空白区域中,AI作画结果如图526~图528所示。 图526高耸大楼 图527蓝色海洋 图528卡拉瓦乔巴洛克风格