项目5
教学资源






项目5

图 像 处 理




本项目基于Python语言,借助PyQt5开发图形,调用StableDiffusionXL模型进行智能图像处理的操作,实现AI作画功能。

5.1总体设计

本部分包括整体框架和系统流程。

5.1.1整体框架

整体框架如图51所示。



图51整体框架


5.1.2系统流程

系统流程如图52所示。



图52系统流程


5.2开发环境

本节主要介绍PyQt5的安装过程,给出所需要的环境配置并介绍大模型API的申请步骤。

5.2.1安装PyQt5 

在命令行中输入“pip install PyQt5”语句,使用pip命令在线安装PyQt5,如图53所示。



图53安装PyQt5


在命令行中输入“pip install PyQt5tools”语句,安装PyQt5的常用工具,如图54所示。



图54安装PyQt5常用工具


在命令行中输入“pip list”语句,检查是否已有PyQt5,若存在于列表中则证明安装成功,如图55所示。



图55检查PyQt5安装


5.2.2环境配置

在PyCharm中,依次单击File→Settings→Tools→External Tools→Add,实现添加外部工具,如图56所示。



图56添加外部工具


根据安装资源在磁盘中的具体位置,分别完成对Qt Designer、PyUIC和PyRCC外部工具的配置,如图57~图59所示。



图57配置Qt Designer





图58配置PyUIC





图59配置PyRCC



依次单击Tools→External Tools→Qt Designer,打开PyQt5界面,如图510所示; PyQt5设计界面如图511所示。



图510打开PyQt5界面





图511PyQt5设计界面


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)


预期功能根据用户输入的文本生成图像,所以需要调用StableDiffusionX大模型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系统实现




图512文件结构

本项目使用PyCharm和PyQt5构建后端与前端系统,文件结构如图512所示。

5.3.1PyQt5组件初始化与绑定机制


定义PyQt5的QWidget类之后完成对界面中控件的布局及绑定设置(初始化在dialog.py中完成),相关代码见“代码文件51”。

5.3.2PyQt5槽函数的定义

当程序触发某种状态或者发生某种事件时会发出一个信号,若程序想捕获这个信号,需要执行相应的逻辑代码,这个过程会用到“槽”,“槽”实际上是一个函数,当信号发射后,执行与之绑定的槽函数,故在槽函数中完成与信号相对应的功能设置,实现参数的传递。

图像处理槽函数(以图像去雾功能为例)相关代码见“代码文件52”。

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图像处理功能测试

运行主程序,进入系统初始界面,如图513所示。



图513系统初始界面


单击“导入图像”按钮,在本地导入.png或.jpg格式的图像,如图514所示。



图514导入图像


色彩增强原始图像如图515所示。



图515色彩增强原始图像


单击“色彩增强”按钮,处理结果显示在原始图像的位置,图像如果发生变化,说明色彩增强功能有效果,处理后的图像将自动保存在images文件夹中,如图516所示。



图516色彩增强处理结果


图像对比度增强原始图像如图517所示。



图517图像对比度增强原始图像


单击“对比度增强”按钮,处理结果显示在原始图像的位置,图像如果发生明显的变化,说明对比度增强功能有效果,处理后的图像将自动保存在images文件夹中,如图518所示。



图518对比度增强处理结果


图像去雾原始图像如图519所示。



图519图像去雾原始图像


单击“图像去雾”按钮,处理结果显示在原始图像的位置,图像如果发生明显的变化,说明去雾功能的效果较为明显,处理过的图像自动保存在images文件夹中,如图520所示。



图520图像去雾处理结果


黑白图像上色原始图像如图521所示。



图521黑白图像上色原始图像


单击“黑白图像上色”按钮,处理结果显示在原始图像的位置,图像如果发生明显的变化,说明黑白图像上色功能有效果,处理后的图像将自动保存在images文件夹中。

随机风格转换原始图像如图522所示。



图522随机风格转换原始图像


单击“随机风格转换”按钮,处理结果显示在原始图像的位置,展示风格转换的结果自动保存在images文件夹中,如图523~图525所示。



图523随机风格转换结果(风格: color_pencil)





图524随机风格转换结果(风格: lavender)





图525随机风格转换结果(风格: scream)


5.4.2图像生成功能测试

在界面下方的输入框中,输入图像描述,然后单击“AI作画”按钮,调用大模型生成的图像显示在画面上方的空白区域中,AI作画结果如图526~图528所示。



图526高耸大楼





图527蓝色海洋





图528卡拉瓦乔巴洛克风格