添加了图像风格迁移的功能

modified:   main_windows/main_window.py
	modified:   main_windows/ui_main_window.py
	modified:   nst/Models.py
	new file:   sub_windows/sub_window_9.py
	new file:   sub_windows/ui_sub_window_9.py
master
shawn-sheep 2 years ago
parent b0d76f9add
commit f4865ef6ab

@ -13,11 +13,11 @@ from sub_windows import sub_window_5
from sub_windows import sub_window_6
from sub_windows import sub_window_7
from sub_windows import sub_window_8
from sub_windows import sub_window_9
from sub_windows import sub_window_10
class MainWindow(QMainWindow):
def __init__(self):
super().__init__(parent=None)
# 布局初始化
@ -32,13 +32,14 @@ class MainWindow(QMainWindow):
self.sub_window_6_ = None # DCT图像压缩
self.sub_window_7_ = None # Canny边缘检测
self.sub_window_8_ = None # 人脸检测实例
self.sub_window_9_ = None # 图像风格迁移
self.sub_window_10_ = None # 关于页面
# 多线程
pass
# 信号与槽定义
self.signal_and_slot()
# 图标
self.setWindowIcon(QIcon('./static/icon.ico'))
self.setWindowIcon(QIcon("./static/icon.ico"))
def signal_and_slot(self):
self.ui.pushButton_1.clicked.connect(self.pushButton_1)
@ -49,6 +50,7 @@ class MainWindow(QMainWindow):
self.ui.pushButton_6.clicked.connect(self.pushButton_6)
self.ui.pushButton_7.clicked.connect(self.pushButton_7)
self.ui.pushButton_8.clicked.connect(self.pushButton_8)
self.ui.pushButton_9.clicked.connect(self.pushButton_9)
self.ui.pushButton_10.clicked.connect(self.pushButton_10)
def pushButton_1(self):
@ -82,7 +84,11 @@ class MainWindow(QMainWindow):
def pushButton_8(self):
self.sub_window_8_ = sub_window_8.SubWindow()
self.sub_window_8_.show()
def pushButton_9(self):
self.sub_window_9_ = sub_window_9.SubWindow()
self.sub_window_9_.show()
def pushButton_10(self):
self.sub_window_10_ = sub_window_10.SubWindow()
self.sub_window_10_.show()

@ -8,6 +8,9 @@
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
@ -56,6 +59,14 @@ class Ui_Form(object):
self.pushButton_10.setGeometry(QtCore.QRect(560, 430, 111, 71))
self.pushButton_10.setObjectName("pushButton_10")
# Add new groupBox and pushButton
self.groupBox_3 = QtWidgets.QGroupBox(Form)
self.groupBox_3.setGeometry(QtCore.QRect(30, 400, 331, 131))
self.groupBox_3.setObjectName("groupBox_3")
self.pushButton_9 = QtWidgets.QPushButton(self.groupBox_3)
self.pushButton_9.setGeometry(QtCore.QRect(110, 30, 111, 71))
self.pushButton_9.setObjectName("pushButton_11")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
@ -74,4 +85,6 @@ class Ui_Form(object):
self.pushButton_5.setText(_translate("Form", "直方图变换"))
self.pushButton_7.setText(_translate("Form", "边缘检测"))
self.pushButton_10.setText(_translate("Form", "关于"))
# Translate new groupBox and pushButton
self.groupBox_3.setTitle(_translate("Form", "高级功能"))
self.pushButton_9.setText(_translate("Form", "图像风格迁移"))

@ -9,7 +9,7 @@ import torchvision.models as models
import copy
import time
import re
from tools import Tool
from nst.tools import Tool
tl = Tool()
@ -70,7 +70,7 @@ class StyleLoss(ContentLoss):
class Transfer(object):
def __init__(
self, fn_content, fn_style, model_path=r"weights/squeezenet1_0-a815701f.pth"
self, fn_content, fn_style, model_path=r"nst/weights/squeezenet1_0-a815701f.pth"
):
"""usage:
net = Transfer('picasso.jpg','dancing.jpg')

@ -0,0 +1,87 @@
import cv2
from PyQt5.QtCore import pyqtSignal, QThread
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5 import QtWidgets, QtGui
from PyQt5 import QtCore, QtGui, QtWidgets
from nst import Models
import time
import numpy as np
# 子窗口布局
from sub_windows import ui_sub_window_9
class SubWindow(QMainWindow):
def __init__(self):
super().__init__(parent=None)
self.ui = ui_sub_window_9.Ui_Form()
self.ui.setupUi(self)
self.ui_init()
self.file_path = None
self.style_path = None
def ui_init(self):
# print("子窗口9初始化")
self.ui.pushButton_open_style.clicked.connect(self.open_style)
self.ui.pushButton_open_file.clicked.connect(self.open_file)
self.ui.pushButton_generate.clicked.connect(self.generate)
def open_file(self):
# Open a file dialog and display the selected image
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.ReadOnly
fileName, _ = QtWidgets.QFileDialog.getOpenFileName(
self,
"QFileDialog.getOpenFileName()",
"",
"All Files (*);;Python Files (*.py)",
options=options,
)
if fileName:
self.file_path = fileName
pixmap = QtGui.QPixmap(fileName)
scaled_pixmap = pixmap.scaled(
self.ui.label_image_1.size(), QtCore.Qt.KeepAspectRatio
)
self.ui.label_image_1.setPixmap(scaled_pixmap)
def open_style(self):
# Open a file dialog and display the selected style image
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.ReadOnly
fileName, _ = QtWidgets.QFileDialog.getOpenFileName(
self,
"QFileDialog.getOpenFileName()",
"",
"All Files (*);;Python Files (*.py)",
options=options,
)
if fileName:
self.style_path = fileName
pixmap = QtGui.QPixmap(fileName)
scaled_pixmap = pixmap.scaled(
self.ui.label_image_2.size(), QtCore.Qt.KeepAspectRatio
)
self.ui.label_image_2.setPixmap(scaled_pixmap)
def generate(self):
print("generating")
ph = "nst/weights/vgg19-dcbb9e9d.pth"
transfer = Models.Transfer(self.file_path, self.style_path, ph)
t = time.time()
dt, img = transfer.fit()
print(time.time() - t)
# print(dt,img)
img = np.array(img)[:, :, ::-1]
img = np.require(img, np.uint8, 'C')
qimage = QImage(img.data, img.shape[1], img.shape[0], QImage.Format_RGB888)
pixmap = QPixmap.fromImage(qimage)
self.ui.label_image_3.setPixmap(pixmap)
pass

@ -0,0 +1,82 @@
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(1800, 700)
self.label_title = QtWidgets.QLabel(Form)
self.label_title.setGeometry(QtCore.QRect(800, 20, 200, 50))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(22)
font.setBold(True)
font.setWeight(75)
self.label_title.setFont(font)
self.label_title.setAlignment(QtCore.Qt.AlignCenter)
self.label_title.setObjectName("label_title")
self.pushButton_open_file = QtWidgets.QPushButton(Form)
self.pushButton_open_file.setGeometry(
QtCore.QRect(281, 620, 150, 28)
) # Adjusted button position
self.pushButton_open_file.setCheckable(False)
self.pushButton_open_file.setDefault(True)
self.pushButton_open_file.setObjectName("pushButton_open_file")
self.pushButton_open_style = QtWidgets.QPushButton(Form)
self.pushButton_open_style.setGeometry(
QtCore.QRect(831, 620, 150, 28)
) # Adjusted button position
self.pushButton_open_style.setCheckable(False)
self.pushButton_open_style.setDefault(True)
self.pushButton_open_style.setObjectName("pushButton_open_style")
self.pushButton_generate = QtWidgets.QPushButton(Form)
self.pushButton_generate.setGeometry(
QtCore.QRect(1381, 620, 150, 28)
) # Adjusted button position
self.pushButton_generate.setCheckable(False)
self.pushButton_generate.setDefault(True)
self.pushButton_generate.setObjectName("pushButton_generate")
self.label_image_1 = QtWidgets.QLabel(Form)
self.label_image_1.setGeometry(QtCore.QRect(100, 80, 512, 512))
self.label_image_1.setFont(font)
self.label_image_1.setFrameShape(QtWidgets.QFrame.Box)
self.label_image_1.setFrameShadow(QtWidgets.QFrame.Raised)
self.label_image_1.setScaledContents(False)
self.label_image_1.setAlignment(QtCore.Qt.AlignCenter)
self.label_image_1.setObjectName("label_image_1")
self.label_image_2 = QtWidgets.QLabel(Form)
self.label_image_2.setGeometry(QtCore.QRect(650, 80, 512, 512))
self.label_image_2.setFont(font)
self.label_image_2.setFrameShape(QtWidgets.QFrame.Box)
self.label_image_2.setFrameShadow(QtWidgets.QFrame.Raised)
self.label_image_2.setScaledContents(False)
self.label_image_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_image_2.setObjectName("label_image_2")
self.label_image_3 = QtWidgets.QLabel(Form)
self.label_image_3.setGeometry(QtCore.QRect(1200, 80, 512, 512))
self.label_image_3.setFont(font)
self.label_image_3.setFrameShape(QtWidgets.QFrame.Box)
self.label_image_3.setFrameShadow(QtWidgets.QFrame.Raised)
self.label_image_3.setScaledContents(False)
self.label_image_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_image_3.setObjectName("label_image_3")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "图像风格迁移"))
self.label_title.setText(_translate("Form", "图像风格迁移"))
self.pushButton_open_file.setText(_translate("Form", "打开原图片"))
self.pushButton_open_style.setText(_translate("Form", "打开风格图片"))
self.pushButton_generate.setText(_translate("Form", "生成风格迁移结果"))
self.label_image_1.setText(_translate("Form", "原图片预览"))
self.label_image_2.setText(_translate("Form", "风格图片预览"))
self.label_image_3.setText(_translate("Form", "结果图片预览"))
Loading…
Cancel
Save