diff --git a/main_windows/main_window.py b/main_windows/main_window.py index fff6693..2a2e1c5 100644 --- a/main_windows/main_window.py +++ b/main_windows/main_window.py @@ -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() diff --git a/main_windows/ui_main_window.py b/main_windows/ui_main_window.py index 83b11cf..d9ab537 100644 --- a/main_windows/ui_main_window.py +++ b/main_windows/ui_main_window.py @@ -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", "图像风格迁移")) diff --git a/nst/Models.py b/nst/Models.py index 6b2eab8..2341a2f 100644 --- a/nst/Models.py +++ b/nst/Models.py @@ -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') diff --git a/sub_windows/sub_window_9.py b/sub_windows/sub_window_9.py new file mode 100644 index 0000000..6ed20a6 --- /dev/null +++ b/sub_windows/sub_window_9.py @@ -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 diff --git a/sub_windows/ui_sub_window_9.py b/sub_windows/ui_sub_window_9.py new file mode 100644 index 0000000..c80ad9a --- /dev/null +++ b/sub_windows/ui_sub_window_9.py @@ -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", "结果图片预览"))