diff --git a/src/.idea/.gitignore b/src/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/src/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/src/.idea/.name b/src/.idea/.name new file mode 100644 index 0000000..11a5d8e --- /dev/null +++ b/src/.idea/.name @@ -0,0 +1 @@ +main.py \ No newline at end of file diff --git a/src/.idea/Image_Processing.iml b/src/.idea/Image_Processing.iml new file mode 100644 index 0000000..d0876a7 --- /dev/null +++ b/src/.idea/Image_Processing.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/.idea/inspectionProfiles/Project_Default.xml b/src/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..06bb031 --- /dev/null +++ b/src/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/src/.idea/inspectionProfiles/profiles_settings.xml b/src/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/src/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/src/.idea/misc.xml b/src/.idea/misc.xml new file mode 100644 index 0000000..75ab79f --- /dev/null +++ b/src/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/.idea/modules.xml b/src/.idea/modules.xml new file mode 100644 index 0000000..3cbc939 --- /dev/null +++ b/src/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000..18ef940 --- /dev/null +++ b/src/README.md @@ -0,0 +1,65 @@ +# 图像处理程序 + +这是一个基于opencv和pytorch的图像处理程序,实现了模糊、锐化、边缘检测等图像处理基本功能,提供了图像矫正等实际应用,以及基于深度学习的图像/视频风格迁移功能,采用pyqt5制作图形化用户界面。 + +## 项目背景 + +图像处理是计算机视觉领域的一个重要分支,它涉及到对图像进行各种操作,如滤波、增强、变换、分割、检测等,以达到改善图像质量、提取图像信息、增加图像效果等目的。图像处理的应用场景非常广泛,如医学影像、卫星遥感、人脸识别、数字水印等。 + +随着深度学习技术的发展,图像处理也出现了一些新的方法和应用,如风格迁移、超分辨率、图像生成等。这些方法利用深度神经网络来学习图像之间的映射关系或潜在特征,从而实现对图像的高级处理。 + +本项目是一个基于opencv和pytorch的图像处理程序,旨在结合传统的图像处理方法和深度学习方法,实现一些常见的图像处理功能和应用,并提供一个友好的图形化用户界面,方便用户使用。本项目可以作为一个学习和交流的平台,也可以作为一个实用的工具,为用户提供高效和高质量的图像处理服务。 + +## 功能特性 + +- 基本功能,包括图像缩放、图像调节、灰度化、二值化、反相、浮雕、模糊、锐化、边缘检测、旋转 +- 实际应用,利用高斯滤波和开闭运算计算矩形顶点,通过透视变化进行图像矫正 +- 高级功能,基于pytorch深度学习实现图像风格迁移,进一步改进后实现视频风格迁移 +- 图形界面,集成了多种功能,可以方便地打开、处理、刷新、保存图片,并直观地展现原图和处理后图片的差别 + +## 环境依赖 + +- Python 3.9 +- Anaconda + +## 部署步骤 + +1. 克隆项目到本地 + +```bash +git clone ssh +``` + +2. 配置Anaconda及pytorch + +参考以下博客: +https://blog.csdn.net/weixin_52836217/article/details/126674089 + +3. 安装依赖库 + +```bash +pip install -r requirements.txt +``` + +4. 运行主程序 + +```bash +python main.py +``` + +## 目录结构描述 + + +- UI:存放QtDesigner设计的ui文件及转化后的py文件 +- image:程序工作过程需要调用的图片 +- original:原图 +- sample:视频示例 +- style:风格图片 +- style.pth:训练后的风格模型 +- main.py: 主程序入口文件 +- README.md: 项目说明文件 + +## 贡献 +- 华东师范大学 张宜添 +- 华东师范大学 马鼎 +- 华东师范大学 张国帅 \ No newline at end of file diff --git a/src/UI/BaseAdjustDialog.py b/src/UI/BaseAdjustDialog.py new file mode 100644 index 0000000..c49cc7d --- /dev/null +++ b/src/UI/BaseAdjustDialog.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'BaseAdjustDialog.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_baseAdjustDialog(object): + def setupUi(self, baseAdjustDialog): + baseAdjustDialog.setObjectName("baseAdjustDialog") + baseAdjustDialog.resize(384, 424) + self.verticalLayout_2 = QtWidgets.QVBoxLayout(baseAdjustDialog) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.widget = QtWidgets.QWidget(baseAdjustDialog) + self.widget.setObjectName("widget") + self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget) + self.horizontalLayout.setObjectName("horizontalLayout") + self.bright = QtWidgets.QLabel(self.widget) + self.bright.setObjectName("bright") + self.horizontalLayout.addWidget(self.bright) + spacerItem = QtWidgets.QSpacerItem(280, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem) + self.brightLabel = QtWidgets.QLabel(self.widget) + self.brightLabel.setObjectName("brightLabel") + self.horizontalLayout.addWidget(self.brightLabel) + self.verticalLayout_2.addWidget(self.widget) + self.brightSlider = QtWidgets.QSlider(baseAdjustDialog) + self.brightSlider.setMinimum(-100) + self.brightSlider.setMaximum(100) + self.brightSlider.setOrientation(QtCore.Qt.Horizontal) + self.brightSlider.setObjectName("brightSlider") + self.verticalLayout_2.addWidget(self.brightSlider) + self.widget_2 = QtWidgets.QWidget(baseAdjustDialog) + self.widget_2.setObjectName("widget_2") + self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget_2) + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + self.contrast = QtWidgets.QLabel(self.widget_2) + self.contrast.setObjectName("contrast") + self.horizontalLayout_2.addWidget(self.contrast) + spacerItem1 = QtWidgets.QSpacerItem(267, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_2.addItem(spacerItem1) + self.contrastLabel = QtWidgets.QLabel(self.widget_2) + self.contrastLabel.setObjectName("contrastLabel") + self.horizontalLayout_2.addWidget(self.contrastLabel) + self.verticalLayout_2.addWidget(self.widget_2) + self.contrastSlider = QtWidgets.QSlider(baseAdjustDialog) + self.contrastSlider.setMinimum(-100) + self.contrastSlider.setMaximum(100) + self.contrastSlider.setOrientation(QtCore.Qt.Horizontal) + self.contrastSlider.setObjectName("contrastSlider") + self.verticalLayout_2.addWidget(self.contrastSlider) + self.widget_3 = QtWidgets.QWidget(baseAdjustDialog) + self.widget_3.setObjectName("widget_3") + self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.widget_3) + self.horizontalLayout_3.setObjectName("horizontalLayout_3") + self.saturability = QtWidgets.QLabel(self.widget_3) + self.saturability.setObjectName("saturability") + self.horizontalLayout_3.addWidget(self.saturability) + spacerItem2 = QtWidgets.QSpacerItem(267, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_3.addItem(spacerItem2) + self.saturabilityLabel = QtWidgets.QLabel(self.widget_3) + self.saturabilityLabel.setObjectName("saturabilityLabel") + self.horizontalLayout_3.addWidget(self.saturabilityLabel) + self.verticalLayout_2.addWidget(self.widget_3) + self.saturabilitySlider = QtWidgets.QSlider(baseAdjustDialog) + self.saturabilitySlider.setMinimum(-100) + self.saturabilitySlider.setMaximum(100) + self.saturabilitySlider.setOrientation(QtCore.Qt.Horizontal) + self.saturabilitySlider.setObjectName("saturabilitySlider") + self.verticalLayout_2.addWidget(self.saturabilitySlider) + self.widget_4 = QtWidgets.QWidget(baseAdjustDialog) + self.widget_4.setObjectName("widget_4") + self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.widget_4) + self.horizontalLayout_4.setObjectName("horizontalLayout_4") + self.warm = QtWidgets.QLabel(self.widget_4) + self.warm.setObjectName("warm") + self.horizontalLayout_4.addWidget(self.warm) + spacerItem3 = QtWidgets.QSpacerItem(267, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_4.addItem(spacerItem3) + self.warmLabel = QtWidgets.QLabel(self.widget_4) + self.warmLabel.setObjectName("warmLabel") + self.horizontalLayout_4.addWidget(self.warmLabel) + self.verticalLayout_2.addWidget(self.widget_4) + self.warmSlider = QtWidgets.QSlider(baseAdjustDialog) + self.warmSlider.setMinimum(-100) + self.warmSlider.setMaximum(100) + self.warmSlider.setOrientation(QtCore.Qt.Horizontal) + self.warmSlider.setObjectName("warmSlider") + self.verticalLayout_2.addWidget(self.warmSlider) + self.dialogBtnBox = QtWidgets.QDialogButtonBox(baseAdjustDialog) + self.dialogBtnBox.setOrientation(QtCore.Qt.Horizontal) + self.dialogBtnBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) + self.dialogBtnBox.setObjectName("dialogBtnBox") + self.verticalLayout_2.addWidget(self.dialogBtnBox) + + self.retranslateUi(baseAdjustDialog) + self.dialogBtnBox.accepted.connect(baseAdjustDialog.accept) # type: ignore + self.dialogBtnBox.rejected.connect(baseAdjustDialog.reject) # type: ignore + QtCore.QMetaObject.connectSlotsByName(baseAdjustDialog) + + def retranslateUi(self, baseAdjustDialog): + _translate = QtCore.QCoreApplication.translate + baseAdjustDialog.setWindowTitle(_translate("baseAdjustDialog", "基础调整")) + self.bright.setText(_translate("baseAdjustDialog", "亮度")) + self.brightLabel.setText(_translate("baseAdjustDialog", "0")) + self.contrast.setText(_translate("baseAdjustDialog", "对比度")) + self.contrastLabel.setText(_translate("baseAdjustDialog", "0")) + self.saturability.setText(_translate("baseAdjustDialog", "饱和度")) + self.saturabilityLabel.setText(_translate("baseAdjustDialog", "0")) + self.warm.setText(_translate("baseAdjustDialog", "暖色调")) + self.warmLabel.setText(_translate("baseAdjustDialog", "0")) diff --git a/src/UI/BaseAdjustDialog.ui b/src/UI/BaseAdjustDialog.ui new file mode 100644 index 0000000..4ac3749 --- /dev/null +++ b/src/UI/BaseAdjustDialog.ui @@ -0,0 +1,248 @@ + + + baseAdjustDialog + + + + 0 + 0 + 384 + 424 + + + + 基础调整 + + + + + + + + + 亮度 + + + + + + + Qt::Horizontal + + + + 280 + 20 + + + + + + + + 0 + + + + + + + + + + -100 + + + 100 + + + Qt::Horizontal + + + + + + + + + + 对比度 + + + + + + + Qt::Horizontal + + + + 267 + 20 + + + + + + + + 0 + + + + + + + + + + -100 + + + 100 + + + Qt::Horizontal + + + + + + + + + + 饱和度 + + + + + + + Qt::Horizontal + + + + 267 + 20 + + + + + + + + 0 + + + + + + + + + + -100 + + + 100 + + + Qt::Horizontal + + + + + + + + + + 暖色调 + + + + + + + Qt::Horizontal + + + + 267 + 20 + + + + + + + + 0 + + + + + + + + + + -100 + + + 100 + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + dialogBtnBox + accepted() + baseAdjustDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + dialogBtnBox + rejected() + baseAdjustDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/UI/ChangeColor.py b/src/UI/ChangeColor.py new file mode 100644 index 0000000..28a21d8 --- /dev/null +++ b/src/UI/ChangeColor.py @@ -0,0 +1,128 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'ChangeColor.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_Dialog(object): + def setupUi(self, Dialog): + Dialog.setObjectName("Dialog") + Dialog.resize(475, 419) + self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) + self.buttonBox.setGeometry(QtCore.QRect(-10, 340, 341, 32)) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) + self.buttonBox.setObjectName("buttonBox") + self.line = QtWidgets.QFrame(Dialog) + self.line.setGeometry(QtCore.QRect(30, 60, 20, 241)) + self.line.setFrameShape(QtWidgets.QFrame.VLine) + self.line.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line.setObjectName("line") + self.line_2 = QtWidgets.QFrame(Dialog) + self.line_2.setGeometry(QtCore.QRect(40, 50, 91, 16)) + self.line_2.setFrameShape(QtWidgets.QFrame.HLine) + self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_2.setObjectName("line_2") + self.line_3 = QtWidgets.QFrame(Dialog) + self.line_3.setGeometry(QtCore.QRect(120, 50, 20, 251)) + self.line_3.setFrameShape(QtWidgets.QFrame.VLine) + self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_3.setObjectName("line_3") + self.line_4 = QtWidgets.QFrame(Dialog) + self.line_4.setGeometry(QtCore.QRect(40, 290, 91, 16)) + self.line_4.setFrameShape(QtWidgets.QFrame.HLine) + self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_4.setObjectName("line_4") + self.line_5 = QtWidgets.QFrame(Dialog) + self.line_5.setGeometry(QtCore.QRect(320, 50, 20, 241)) + self.line_5.setFrameShape(QtWidgets.QFrame.VLine) + self.line_5.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_5.setObjectName("line_5") + self.line_6 = QtWidgets.QFrame(Dialog) + self.line_6.setGeometry(QtCore.QRect(400, 60, 41, 231)) + self.line_6.setFrameShape(QtWidgets.QFrame.VLine) + self.line_6.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_6.setObjectName("line_6") + self.line_7 = QtWidgets.QFrame(Dialog) + self.line_7.setGeometry(QtCore.QRect(330, 50, 91, 20)) + self.line_7.setFrameShape(QtWidgets.QFrame.HLine) + self.line_7.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_7.setObjectName("line_7") + self.line_8 = QtWidgets.QFrame(Dialog) + self.line_8.setGeometry(QtCore.QRect(330, 290, 91, 16)) + self.line_8.setFrameShape(QtWidgets.QFrame.HLine) + self.line_8.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_8.setObjectName("line_8") + self.widget = QtWidgets.QWidget(Dialog) + self.widget.setGeometry(QtCore.QRect(60, 50, 191, 241)) + self.widget.setObjectName("widget") + self.verticalLayout = QtWidgets.QVBoxLayout(self.widget) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setObjectName("verticalLayout") + self.checkBox = QtWidgets.QCheckBox(self.widget) + self.checkBox.setObjectName("checkBox") + self.verticalLayout.addWidget(self.checkBox) + self.checkBox_2 = QtWidgets.QCheckBox(self.widget) + self.checkBox_2.setObjectName("checkBox_2") + self.verticalLayout.addWidget(self.checkBox_2) + self.checkBox_3 = QtWidgets.QCheckBox(self.widget) + self.checkBox_3.setObjectName("checkBox_3") + self.verticalLayout.addWidget(self.checkBox_3) + self.widget1 = QtWidgets.QWidget(Dialog) + self.widget1.setGeometry(QtCore.QRect(350, 50, 191, 241)) + self.widget1.setObjectName("widget1") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget1) + self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.checkBox_4 = QtWidgets.QCheckBox(self.widget1) + self.checkBox_4.setObjectName("checkBox_4") + self.verticalLayout_2.addWidget(self.checkBox_4) + self.checkBox_5 = QtWidgets.QCheckBox(self.widget1) + self.checkBox_5.setObjectName("checkBox_5") + self.verticalLayout_2.addWidget(self.checkBox_5) + self.checkBox_6 = QtWidgets.QCheckBox(self.widget1) + self.checkBox_6.setObjectName("checkBox_6") + self.verticalLayout_2.addWidget(self.checkBox_6) + self.label = QtWidgets.QLabel(Dialog) + self.label.setGeometry(QtCore.QRect(150, 160, 221, 24)) + font = QtGui.QFont() + font.setFamily("Agency FB") + font.setPointSize(16) + self.label.setFont(font) + self.label.setObjectName("label") + self.buttonBox.raise_() + self.checkBox.raise_() + self.checkBox_2.raise_() + self.checkBox_3.raise_() + self.line.raise_() + self.line_2.raise_() + self.line_3.raise_() + self.line_4.raise_() + self.line_5.raise_() + self.line_6.raise_() + self.line_7.raise_() + self.line_8.raise_() + self.label.raise_() + + self.retranslateUi(Dialog) + self.buttonBox.accepted.connect(Dialog.accept) # type: ignore + self.buttonBox.rejected.connect(Dialog.reject) # type: ignore + QtCore.QMetaObject.connectSlotsByName(Dialog) + + def retranslateUi(self, Dialog): + _translate = QtCore.QCoreApplication.translate + Dialog.setWindowTitle(_translate("Dialog", "颜色变化")) + self.checkBox.setText(_translate("Dialog", "红色")) + self.checkBox_2.setText(_translate("Dialog", "蓝色")) + self.checkBox_3.setText(_translate("Dialog", "白色")) + self.checkBox_4.setText(_translate("Dialog", "红色")) + self.checkBox_5.setText(_translate("Dialog", "蓝色")) + self.checkBox_6.setText(_translate("Dialog", "白色")) + self.label.setText(_translate("Dialog", "--transferTo-->")) diff --git a/src/UI/ChangeColor.ui b/src/UI/ChangeColor.ui new file mode 100644 index 0000000..f844072 --- /dev/null +++ b/src/UI/ChangeColor.ui @@ -0,0 +1,271 @@ + + + Dialog + + + + 0 + 0 + 475 + 419 + + + + 颜色变化 + + + + + -10 + 340 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 30 + 60 + 20 + 241 + + + + Qt::Vertical + + + + + + 40 + 50 + 91 + 16 + + + + Qt::Horizontal + + + + + + 120 + 50 + 20 + 251 + + + + Qt::Vertical + + + + + + 40 + 290 + 91 + 16 + + + + Qt::Horizontal + + + + + + 320 + 50 + 20 + 241 + + + + Qt::Vertical + + + + + + 400 + 60 + 41 + 231 + + + + Qt::Vertical + + + + + + 330 + 50 + 91 + 20 + + + + Qt::Horizontal + + + + + + 330 + 290 + 91 + 16 + + + + Qt::Horizontal + + + + + + 60 + 50 + 191 + 241 + + + + + + + 红色 + + + + + + + 蓝色 + + + + + + + 白色 + + + + + + + + + 350 + 50 + 191 + 241 + + + + + + + 红色 + + + + + + + 蓝色 + + + + + + + 白色 + + + + + + + + + 150 + 160 + 221 + 24 + + + + + Agency FB + 16 + + + + --transferTo--> + + + buttonBox + checkBox + checkBox_2 + checkBox_3 + layoutWidget + line + line_2 + line_3 + line_4 + line_5 + line_6 + line_7 + line_8 + label + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/UI/SelectStyle.py b/src/UI/SelectStyle.py new file mode 100644 index 0000000..df355cd --- /dev/null +++ b/src/UI/SelectStyle.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'selectStyle.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_dialog(object): + def setupUi(self, dialog): + dialog.setObjectName("dialog") + dialog.resize(588, 437) + self.pushButton = QtWidgets.QPushButton(dialog) + self.pushButton.setGeometry(QtCore.QRect(120, 340, 91, 31)) + self.pushButton.setObjectName("pushButton") + self.pushButton_2 = QtWidgets.QPushButton(dialog) + self.pushButton_2.setGeometry(QtCore.QRect(360, 340, 101, 31)) + self.pushButton_2.setObjectName("pushButton_2") + self.layoutWidget = QtWidgets.QWidget(dialog) + self.layoutWidget.setGeometry(QtCore.QRect(30, 50, 531, 221)) + self.layoutWidget.setObjectName("layoutWidget") + self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget) + self.horizontalLayout.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout.setObjectName("horizontalLayout") + self.label = QtWidgets.QLabel(self.layoutWidget) + self.label.setObjectName("label") + self.horizontalLayout.addWidget(self.label) + self.label_2 = QtWidgets.QLabel(self.layoutWidget) + self.label_2.setObjectName("label_2") + self.horizontalLayout.addWidget(self.label_2) + self.textBrowser = QtWidgets.QTextBrowser(dialog) + self.textBrowser.setGeometry(QtCore.QRect(100, 278, 419, 41)) + self.textBrowser.setObjectName("textBrowser") + + self.retranslateUi(dialog) + QtCore.QMetaObject.connectSlotsByName(dialog) + + def retranslateUi(self, dialog): + _translate = QtCore.QCoreApplication.translate + dialog.setWindowTitle(_translate("dialog", "视频风格")) + self.pushButton.setText(_translate("dialog", "style1")) + self.pushButton_2.setText(_translate("dialog", "style2")) + self.label.setText(_translate("dialog", "style1")) + self.label_2.setText(_translate("dialog", "style2")) diff --git a/src/UI/SelectStyle.ui b/src/UI/SelectStyle.ui new file mode 100644 index 0000000..5640c6b --- /dev/null +++ b/src/UI/SelectStyle.ui @@ -0,0 +1,84 @@ + + + dialog + + + + 0 + 0 + 588 + 437 + + + + 视频风格 + + + + + 120 + 340 + 91 + 31 + + + + style1 + + + + + + 360 + 340 + 101 + 31 + + + + style2 + + + + + + 30 + 50 + 531 + 221 + + + + + + + style1 + + + + + + + style2 + + + + + + + + + 100 + 270 + 421 + 71 + + + + 生成视频,可能需要几分钟的时间,视频将保存在原目录下 + + + + + + diff --git a/src/UI/__pycache__/BaseAdjustDialog.cpython-310.pyc b/src/UI/__pycache__/BaseAdjustDialog.cpython-310.pyc new file mode 100644 index 0000000..242a1f6 Binary files /dev/null and b/src/UI/__pycache__/BaseAdjustDialog.cpython-310.pyc differ diff --git a/src/UI/__pycache__/ChangeColor.cpython-310.pyc b/src/UI/__pycache__/ChangeColor.cpython-310.pyc new file mode 100644 index 0000000..49e6c2b Binary files /dev/null and b/src/UI/__pycache__/ChangeColor.cpython-310.pyc differ diff --git a/src/UI/__pycache__/SelectStyle.cpython-310.pyc b/src/UI/__pycache__/SelectStyle.cpython-310.pyc new file mode 100644 index 0000000..11d6204 Binary files /dev/null and b/src/UI/__pycache__/SelectStyle.cpython-310.pyc differ diff --git a/src/UI/__pycache__/demo.cpython-310.pyc b/src/UI/__pycache__/demo.cpython-310.pyc new file mode 100644 index 0000000..80837aa Binary files /dev/null and b/src/UI/__pycache__/demo.cpython-310.pyc differ diff --git a/src/UI/__pycache__/setsize.cpython-310.pyc b/src/UI/__pycache__/setsize.cpython-310.pyc new file mode 100644 index 0000000..e94ef39 Binary files /dev/null and b/src/UI/__pycache__/setsize.cpython-310.pyc differ diff --git a/src/UI/demo.py b/src/UI/demo.py new file mode 100644 index 0000000..859ca46 --- /dev/null +++ b/src/UI/demo.py @@ -0,0 +1,185 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'demo.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1600, 900) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.layoutWidget = QtWidgets.QWidget(self.centralwidget) + self.layoutWidget.setGeometry(QtCore.QRect(210, 70, 1341, 561)) + self.layoutWidget.setObjectName("layoutWidget") + self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget) + self.horizontalLayout.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout.setObjectName("horizontalLayout") + self.line_4 = QtWidgets.QFrame(self.layoutWidget) + self.line_4.setFrameShape(QtWidgets.QFrame.VLine) + self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_4.setObjectName("line_4") + self.horizontalLayout.addWidget(self.line_4) + self.src_image = QtWidgets.QLabel(self.layoutWidget) + self.src_image.setMinimumSize(QtCore.QSize(281, 271)) + self.src_image.setText("") + self.src_image.setObjectName("src_image") + self.horizontalLayout.addWidget(self.src_image) + self.line = QtWidgets.QFrame(self.layoutWidget) + self.line.setFrameShape(QtWidgets.QFrame.VLine) + self.line.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line.setObjectName("line") + self.horizontalLayout.addWidget(self.line) + self.dest_image = QtWidgets.QLabel(self.layoutWidget) + self.dest_image.setMinimumSize(QtCore.QSize(311, 291)) + self.dest_image.setText("") + self.dest_image.setObjectName("dest_image") + self.horizontalLayout.addWidget(self.dest_image) + self.line_5 = QtWidgets.QFrame(self.layoutWidget) + self.line_5.setFrameShape(QtWidgets.QFrame.VLine) + self.line_5.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_5.setObjectName("line_5") + self.horizontalLayout.addWidget(self.line_5) + self.label_2 = QtWidgets.QLabel(self.centralwidget) + self.label_2.setGeometry(QtCore.QRect(1200, 690, 61, 21)) + self.label_2.setStyleSheet("Qlable{\n" +" font: 75 24pt \"Arial\";\n" +" rgb(170, 0, 0)\n" +"}") + self.label_2.setObjectName("label_2") + self.label = QtWidgets.QLabel(self.centralwidget) + self.label.setGeometry(QtCore.QRect(530, 690, 51, 21)) + self.label.setStyleSheet("Qlable{\n" +" font: 75 24pt \"Arial\";\n" +" rgb(170, 0, 0)\n" +"}") + self.label.setTextFormat(QtCore.Qt.AutoText) + self.label.setObjectName("label") + self.line_2 = QtWidgets.QFrame(self.centralwidget) + self.line_2.setGeometry(QtCore.QRect(210, 60, 1341, 21)) + self.line_2.setFrameShape(QtWidgets.QFrame.HLine) + self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_2.setObjectName("line_2") + self.line_3 = QtWidgets.QFrame(self.centralwidget) + self.line_3.setGeometry(QtCore.QRect(210, 630, 1341, 16)) + self.line_3.setFrameShape(QtWidgets.QFrame.HLine) + self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_3.setObjectName("line_3") + self.layoutWidget1 = QtWidgets.QWidget(self.centralwidget) + self.layoutWidget1.setGeometry(QtCore.QRect(40, 90, 121, 361)) + self.layoutWidget1.setObjectName("layoutWidget1") + self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget1) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setObjectName("verticalLayout") + self.pushButton = QtWidgets.QPushButton(self.layoutWidget1) + self.pushButton.setObjectName("pushButton") + self.verticalLayout.addWidget(self.pushButton) + self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget1) + self.pushButton_2.setObjectName("pushButton_2") + self.verticalLayout.addWidget(self.pushButton_2) + self.pushButton_3 = QtWidgets.QPushButton(self.layoutWidget1) + self.pushButton_3.setObjectName("pushButton_3") + self.verticalLayout.addWidget(self.pushButton_3) + self.pushButton_4 = QtWidgets.QPushButton(self.layoutWidget1) + self.pushButton_4.setObjectName("pushButton_4") + self.verticalLayout.addWidget(self.pushButton_4) + self.pushButton_5 = QtWidgets.QPushButton(self.layoutWidget1) + self.pushButton_5.setObjectName("pushButton_5") + self.verticalLayout.addWidget(self.pushButton_5) + self.pushButton_6 = QtWidgets.QPushButton(self.layoutWidget1) + self.pushButton_6.setObjectName("pushButton_6") + self.verticalLayout.addWidget(self.pushButton_6) + self.pushButton_7 = QtWidgets.QPushButton(self.layoutWidget1) + self.pushButton_7.setObjectName("pushButton_7") + self.verticalLayout.addWidget(self.pushButton_7) + self.pushButton_8 = QtWidgets.QPushButton(self.layoutWidget1) + self.pushButton_8.setObjectName("pushButton_8") + self.verticalLayout.addWidget(self.pushButton_8) + self.pushButton_9 = QtWidgets.QPushButton(self.layoutWidget1) + self.pushButton_9.setObjectName("pushButton_9") + self.verticalLayout.addWidget(self.pushButton_9) + self.pushButton_10 = QtWidgets.QPushButton(self.layoutWidget1) + self.pushButton_10.setObjectName("pushButton_10") + self.verticalLayout.addWidget(self.pushButton_10) + self.pushButton_11 = QtWidgets.QPushButton(self.centralwidget) + self.pushButton_11.setGeometry(QtCore.QRect(1450, 20, 109, 23)) + self.pushButton_11.setObjectName("pushButton_11") + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1600, 24)) + self.menubar.setObjectName("menubar") + self.menu = QtWidgets.QMenu(self.menubar) + self.menu.setObjectName("menu") + self.menug = QtWidgets.QMenu(self.menubar) + self.menug.setObjectName("menug") + self.menu_2 = QtWidgets.QMenu(self.menubar) + self.menu_2.setObjectName("menu_2") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + self.actionopen = QtWidgets.QAction(MainWindow) + self.actionopen.setObjectName("actionopen") + self.actionsave = QtWidgets.QAction(MainWindow) + self.actionsave.setObjectName("actionsave") + self.actiontansfer = QtWidgets.QAction(MainWindow) + self.actiontansfer.setObjectName("actiontansfer") + self.actionvideo = QtWidgets.QAction(MainWindow) + self.actionvideo.setObjectName("actionvideo") + self.actionCorrect = QtWidgets.QAction(MainWindow) + self.actionCorrect.setObjectName("actionCorrect") + self.actioncorrect_2 = QtWidgets.QAction(MainWindow) + self.actioncorrect_2.setObjectName("actioncorrect_2") + self.actionChangeColor = QtWidgets.QAction(MainWindow) + self.actionChangeColor.setObjectName("actionChangeColor") + self.menu.addAction(self.actionopen) + self.menu.addAction(self.actionsave) + self.menug.addAction(self.actiontansfer) + self.menug.addAction(self.actionvideo) + self.menu_2.addAction(self.actionCorrect) + self.menu_2.addAction(self.actioncorrect_2) + self.menu_2.addAction(self.actionChangeColor) + self.menubar.addAction(self.menu.menuAction()) + self.menubar.addAction(self.menu_2.menuAction()) + self.menubar.addAction(self.menug.menuAction()) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "图像处理程序")) + self.label_2.setText(_translate("MainWindow", "处理后")) + self.label.setText(_translate("MainWindow", "原图")) + self.pushButton.setText(_translate("MainWindow", "图像缩放")) + self.pushButton_2.setText(_translate("MainWindow", "图像调节")) + self.pushButton_3.setText(_translate("MainWindow", "灰度化")) + self.pushButton_4.setText(_translate("MainWindow", "二值化")) + self.pushButton_5.setText(_translate("MainWindow", "反相")) + self.pushButton_6.setText(_translate("MainWindow", "浮雕")) + self.pushButton_7.setText(_translate("MainWindow", "边缘检测")) + self.pushButton_8.setText(_translate("MainWindow", "模糊")) + self.pushButton_9.setText(_translate("MainWindow", "锐化")) + self.pushButton_10.setText(_translate("MainWindow", "旋转")) + self.pushButton_11.setText(_translate("MainWindow", "刷新")) + self.menu.setTitle(_translate("MainWindow", "文件")) + self.menug.setTitle(_translate("MainWindow", "高级功能")) + self.menu_2.setTitle(_translate("MainWindow", "实际应用")) + self.actionopen.setText(_translate("MainWindow", "打开图片")) + self.actionopen.setToolTip(_translate("MainWindow", "打开图片")) + self.actionsave.setText(_translate("MainWindow", "保存图片")) + self.actiontansfer.setText(_translate("MainWindow", "图像风格迁移")) + self.actionvideo.setText(_translate("MainWindow", "视频风格迁移")) + self.actionCorrect.setText(_translate("MainWindow", "证件矫正")) + self.actionCorrect.setToolTip(_translate("MainWindow", "证件矫正")) + self.actioncorrect_2.setText(_translate("MainWindow", "书页矫正")) + self.actioncorrect_2.setToolTip(_translate("MainWindow", "书页矫正")) + self.actionChangeColor.setText(_translate("MainWindow", "证件底色转换")) diff --git a/src/UI/demo.ui b/src/UI/demo.ui new file mode 100644 index 0000000..2cfa876 --- /dev/null +++ b/src/UI/demo.ui @@ -0,0 +1,322 @@ + + + MainWindow + + + + 0 + 0 + 1600 + 900 + + + + 图像处理程序 + + + + + + 210 + 70 + 1341 + 561 + + + + + + + Qt::Vertical + + + + + + + + 281 + 271 + + + + + + + + + + + Qt::Vertical + + + + + + + + 311 + 291 + + + + + + + + + + + Qt::Vertical + + + + + + + + + 1200 + 690 + 61 + 21 + + + + Qlable{ + font: 75 24pt "Arial"; + rgb(170, 0, 0) +} + + + 处理后 + + + + + + 530 + 690 + 51 + 21 + + + + Qlable{ + font: 75 24pt "Arial"; + rgb(170, 0, 0) +} + + + 原图 + + + Qt::AutoText + + + + + + 210 + 60 + 1341 + 21 + + + + Qt::Horizontal + + + + + + 210 + 630 + 1341 + 16 + + + + Qt::Horizontal + + + + + + 40 + 90 + 121 + 361 + + + + + + + 图像缩放 + + + + + + + 图像调节 + + + + + + + 灰度化 + + + + + + + 二值化 + + + + + + + 反相 + + + + + + + 浮雕 + + + + + + + 边缘检测 + + + + + + + 模糊 + + + + + + + 锐化 + + + + + + + 旋转 + + + + + + + + + 1450 + 20 + 109 + 23 + + + + 刷新 + + + + + + + 0 + 0 + 1600 + 24 + + + + + 文件 + + + + + + + 高级功能 + + + + + + + 实际应用 + + + + + + + + + + + + + 打开图片 + + + 打开图片 + + + + + 保存图片 + + + + + 图像风格迁移 + + + + + 视频风格迁移 + + + + + 证件矫正 + + + 证件矫正 + + + + + 书页矫正 + + + 书页矫正 + + + + + 证件底色转换 + + + + + + diff --git a/src/UI/setsize.py b/src/UI/setsize.py new file mode 100644 index 0000000..18f485f --- /dev/null +++ b/src/UI/setsize.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'setsize.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_Dialog(object): + def setupUi(self, Dialog): + Dialog.setObjectName("Dialog") + Dialog.resize(400, 300) + self.pushButton = QtWidgets.QPushButton(Dialog) + self.pushButton.setGeometry(QtCore.QRect(150, 190, 75, 23)) + self.pushButton.setObjectName("pushButton") + self.label = QtWidgets.QLabel(Dialog) + self.label.setGeometry(QtCore.QRect(80, 70, 54, 31)) + self.label.setObjectName("label") + self.label_2 = QtWidgets.QLabel(Dialog) + self.label_2.setGeometry(QtCore.QRect(80, 120, 54, 31)) + self.label_2.setObjectName("label_2") + self.lineEdit = QtWidgets.QLineEdit(Dialog) + self.lineEdit.setGeometry(QtCore.QRect(140, 70, 113, 20)) + self.lineEdit.setObjectName("lineEdit") + self.lineEdit_2 = QtWidgets.QLineEdit(Dialog) + self.lineEdit_2.setGeometry(QtCore.QRect(140, 130, 113, 20)) + self.lineEdit_2.setObjectName("lineEdit_2") + + self.retranslateUi(Dialog) + self.pushButton.clicked.connect(Dialog.close) # type: ignore + QtCore.QMetaObject.connectSlotsByName(Dialog) + + def retranslateUi(self, Dialog): + _translate = QtCore.QCoreApplication.translate + Dialog.setWindowTitle(_translate("Dialog", "大小调整")) + self.pushButton.setText(_translate("Dialog", "确定")) + self.label.setText(_translate("Dialog", "宽度:")) + self.label_2.setText(_translate("Dialog", "高度:")) diff --git a/src/UI/setsize.ui b/src/UI/setsize.ui new file mode 100644 index 0000000..f7abaa9 --- /dev/null +++ b/src/UI/setsize.ui @@ -0,0 +1,95 @@ + + + Dialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 150 + 190 + 75 + 23 + + + + 确定 + + + + + + 80 + 70 + 54 + 31 + + + + 宽度: + + + + + + 80 + 120 + 54 + 31 + + + + 高度: + + + + + + 140 + 70 + 113 + 20 + + + + + + + 140 + 130 + 113 + 20 + + + + + + + + pushButton + clicked() + Dialog + close() + + + 183 + 201 + + + 295 + 189 + + + + + diff --git a/src/Vgg16.py b/src/Vgg16.py new file mode 100644 index 0000000..1d791f4 --- /dev/null +++ b/src/Vgg16.py @@ -0,0 +1,38 @@ +from collections import namedtuple + +import torch +from torchvision import models + + +class Vgg16(torch.nn.Module): + def __init__(self, requires_grad=False): + super(Vgg16, self).__init__() + vgg_pretrained_features = models.vgg16(pretrained=True).features + self.slice1 = torch.nn.Sequential() + self.slice2 = torch.nn.Sequential() + self.slice3 = torch.nn.Sequential() + self.slice4 = torch.nn.Sequential() + for x in range(4): + self.slice1.add_module(str(x), vgg_pretrained_features[x]) + for x in range(4, 9): + self.slice2.add_module(str(x), vgg_pretrained_features[x]) + for x in range(9, 16): + self.slice3.add_module(str(x), vgg_pretrained_features[x]) + for x in range(16, 23): + self.slice4.add_module(str(x), vgg_pretrained_features[x]) + if not requires_grad: + for param in self.parameters(): + param.requires_grad = False + + def forward(self, X): + h = self.slice1(X) + h_relu1_2 = h + h = self.slice2(h) + h_relu2_2 = h + h = self.slice3(h) + h_relu3_3 = h + h = self.slice4(h) + h_relu4_3 = h + vgg_outputs = namedtuple("VggOutputs", ['relu1_2', 'relu2_2', 'relu3_3', 'relu4_3']) + out = vgg_outputs(h_relu1_2, h_relu2_2, h_relu3_3, h_relu4_3) + return out \ No newline at end of file diff --git a/src/__pycache__/change_color.cpython-310.pyc b/src/__pycache__/change_color.cpython-310.pyc new file mode 100644 index 0000000..e3e318c Binary files /dev/null and b/src/__pycache__/change_color.cpython-310.pyc differ diff --git a/src/__pycache__/correct.cpython-310.pyc b/src/__pycache__/correct.cpython-310.pyc new file mode 100644 index 0000000..8a7f7e1 Binary files /dev/null and b/src/__pycache__/correct.cpython-310.pyc differ diff --git a/src/__pycache__/image_trans.cpython-310.pyc b/src/__pycache__/image_trans.cpython-310.pyc new file mode 100644 index 0000000..8db1b24 Binary files /dev/null and b/src/__pycache__/image_trans.cpython-310.pyc differ diff --git a/src/__pycache__/transfer.cpython-310.pyc b/src/__pycache__/transfer.cpython-310.pyc new file mode 100644 index 0000000..d24d59b Binary files /dev/null and b/src/__pycache__/transfer.cpython-310.pyc differ diff --git a/src/__pycache__/transfer_net.cpython-310.pyc b/src/__pycache__/transfer_net.cpython-310.pyc new file mode 100644 index 0000000..48cdd52 Binary files /dev/null and b/src/__pycache__/transfer_net.cpython-310.pyc differ diff --git a/src/__pycache__/video.cpython-310.pyc b/src/__pycache__/video.cpython-310.pyc new file mode 100644 index 0000000..c033c8a Binary files /dev/null and b/src/__pycache__/video.cpython-310.pyc differ diff --git a/src/change_color.py b/src/change_color.py new file mode 100644 index 0000000..ab25fec --- /dev/null +++ b/src/change_color.py @@ -0,0 +1,69 @@ +import cv2 +import numpy as np +import os +from PIL import Image + + +def run2(img, src_type, dst_type): + cv2.imwrite("image/tmp_src.jpg", img) + # 输入 + in_path = "image/tmp_src.jpg" + # 输出 + out_path = "image/tmp_dst.jpg" + # 要替换的背景颜色 + color = "deepskyblue" + # 红:red、蓝:blue、黑:black、白:white + + # 去掉背景颜色 + os.system('backgroundremover -i "' + str(in_path) + '" -o "image/cg.jpg"') + # 加上背景颜色 + no_bg_image = Image.open("image/cg.jpg") + x, y = no_bg_image.size + new_image = Image.new('RGBA', no_bg_image.size, color=color) + new_image.paste(no_bg_image, (0, 0, x, y), no_bg_image) + new_image.save(out_path) + res = cv2.imread(out_path) + return res + + +def run(image, src_type, dst_type): + # 图像缩放 + img = cv2.resize(image, None, fx=1, fy=1) + rows, cols, channels = img.shape + # 图片转换为灰度图 + hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) + # 图片的二值化处理 + if src_type == 'r': + lower_red = np.array([0, 150, 50]) + upper_red = np.array([5, 255, 255]) + mask = cv2.inRange(hsv, lower_red, upper_red) + lower_red2 = np.array([175, 150, 50]) + upper_red2 = np.array([179, 255, 255]) + mask2 = cv2.inRange(hsv, lower_red2, upper_red2) + mask=cv2.bitwise_or(mask,mask2) + elif src_type == 'b': + lower_blue = np.array([90, 70, 70]) + upper_blue = np.array([110, 255, 255]) + mask = cv2.inRange(hsv, lower_blue, upper_blue) + else: + mask = cv2.inRange(hsv, np.array([0, 0, 221]), np.array([180, 30, 255])) + # 腐蚀膨胀 + erode = cv2.erode(mask, np.ones((10, 10), np.uint8), iterations=1) + dilate = cv2.dilate(erode, np.ones((10, 10), np.uint8), iterations=1) + # 转变为 + if dst_type == 'w': + for i in range(rows): + for j in range(cols): + if dilate[i, j] == 255: # 像素点255表示白色 + img[i, j] = (255, 255, 255) # 此处替换颜色,为BGR通道,不是RGB + elif dst_type == 'r': + for i in range(rows): + for j in range(cols): + if dilate[i, j] == 255: # 像素点255表示白色 + img[i, j] = (0, 0, 255) # 此处替换颜色,为BGR通道,不是RGB + elif dst_type == 'b': + for i in range(rows): + for j in range(cols): + if dilate[i, j] == 255: # 像素点255表示白色 + img[i, j] = (255, 0, 0) # 此处替换颜色,为BGR通道,不是RGB + return img diff --git a/src/correct.py b/src/correct.py new file mode 100644 index 0000000..9806ff2 --- /dev/null +++ b/src/correct.py @@ -0,0 +1,116 @@ +import cv2 +import math +import numpy as np + + +def Img_Outline(img): + original_img = img + gray_img = cv2.cvtColor(original_img, cv2.COLOR_BGR2GRAY) + blurred = cv2.GaussianBlur(gray_img, (9, 9), 0) # 高斯模糊去噪(设定卷积核大小影响效果) + _, RedThresh = cv2.threshold(blurred, 165, 255, cv2.THRESH_BINARY) # 设定阈值165(阈值影响开闭运算效果) + kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 定义矩形结构元素 + closed = cv2.morphologyEx(RedThresh, cv2.MORPH_CLOSE, kernel) # 闭运算(链接块) + opened = cv2.morphologyEx(closed, cv2.MORPH_OPEN, kernel) # 开运算(去噪点) + return original_img, opened + + +def findContours_img(original_img, opened): + contours, hierarchy = cv2.findContours(opened, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) + c = sorted(contours, key=cv2.contourArea, reverse=True)[1] # 计算最大轮廓的旋转包围盒 + rect = cv2.minAreaRect(c) # 获取包围盒(中心点,宽高,旋转角度) + box = np.int0(cv2.boxPoints(rect)) # box + draw_img = cv2.drawContours(original_img.copy(), [box], -1, (0, 0, 255), 3) + + print("box[0]:", box[0]) + print("box[1]:", box[1]) + print("box[2]:", box[2]) + print("box[3]:", box[3]) + return box, draw_img + + +def Perspective_transform(box, original_img): + # 获取画框宽高(x=orignal_W,y=orignal_H) + orignal_W = math.ceil(np.sqrt((box[3][1] - box[2][1]) ** 2 + (box[3][0] - box[2][0]) ** 2)) + orignal_H = math.ceil(np.sqrt((box[3][1] - box[0][1]) ** 2 + (box[3][0] - box[0][0]) ** 2)) + + # 原图中的四个顶点,与变换矩阵 + pts1 = np.float32([box[0], box[1], box[2], box[3]]) + pts2 = np.float32( + [[int(orignal_W + 1), int(orignal_H + 1)], [0, int(orignal_H + 1)], [0, 0], [int(orignal_W + 1), 0]]) + + # 生成透视变换矩阵;进行透视变换 + M = cv2.getPerspectiveTransform(pts1, pts2) + result_img = cv2.warpPerspective(original_img, M, (int(orignal_W + 3), int(orignal_H + 1))) + + return result_img + + +def fourier_demo(img): + # 1、灰度化读取文件, + img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) + + # 2、图像延扩 + h, w = img.shape[:2] + new_h = cv2.getOptimalDFTSize(h) + new_w = cv2.getOptimalDFTSize(w) + right = new_w - w + bottom = new_h - h + nimg = cv2.copyMakeBorder(img, 0, bottom, 0, right, borderType=cv2.BORDER_CONSTANT, value=0) + + # 3、执行傅里叶变换,并过得频域图像 + f = np.fft.fft2(nimg) + fshift = np.fft.fftshift(f) + magnitude = np.log(np.abs(fshift)) + + # 二值化 + magnitude_uint = magnitude.astype(np.uint8) + ret, thresh = cv2.threshold(magnitude_uint, 11, 255, cv2.THRESH_BINARY) + print(ret) + + print(thresh.dtype) + # 霍夫直线变换 + lines = cv2.HoughLinesP(thresh, 2, np.pi / 180, 30, minLineLength=40, maxLineGap=100) + print(len(lines)) + + # 创建一个新图像,标注直线 + lineimg = np.ones(nimg.shape, dtype=np.uint8) + lineimg = lineimg * 255 + + piThresh = np.pi / 180 + pi2 = np.pi / 2 + print(piThresh) + + for line in lines: + x1, y1, x2, y2 = line[0] + cv2.line(lineimg, (x1, y1), (x2, y2), (0, 255, 0), 2) + if x2 - x1 == 0: + continue + else: + theta = (y2 - y1) / (x2 - x1) + if abs(theta) < piThresh or abs(theta - pi2) < piThresh: + continue + else: + print(theta) + + angle = math.atan(theta) + print(angle) + angle = angle * (180 / np.pi) + print(angle) + angle = (angle - 90) / (w / h) + print(angle) + + center = (w // 2, h // 2) + M = cv2.getRotationMatrix2D(center, angle, 1.0) + rotated = cv2.warpAffine(img, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE) + return rotated + + +def runCard(img): + original_img, opened = Img_Outline(img) + box, draw_img = findContours_img(original_img, opened) + result_img = Perspective_transform(box, original_img) + return result_img + + +def runPaper(img): + return fourier_demo(img) diff --git a/src/frames/1.jpg b/src/frames/1.jpg new file mode 100644 index 0000000..4500a76 Binary files /dev/null and b/src/frames/1.jpg differ diff --git a/src/frames/10.jpg b/src/frames/10.jpg new file mode 100644 index 0000000..45216f3 Binary files /dev/null and b/src/frames/10.jpg differ diff --git a/src/frames/100.jpg b/src/frames/100.jpg new file mode 100644 index 0000000..ce1438a Binary files /dev/null and b/src/frames/100.jpg differ diff --git a/src/frames/101.jpg b/src/frames/101.jpg new file mode 100644 index 0000000..98e9991 Binary files /dev/null and b/src/frames/101.jpg differ diff --git a/src/frames/102.jpg b/src/frames/102.jpg new file mode 100644 index 0000000..91aa1be Binary files /dev/null and b/src/frames/102.jpg differ diff --git a/src/frames/103.jpg b/src/frames/103.jpg new file mode 100644 index 0000000..61470da Binary files /dev/null and b/src/frames/103.jpg differ diff --git a/src/frames/104.jpg b/src/frames/104.jpg new file mode 100644 index 0000000..04ab826 Binary files /dev/null and b/src/frames/104.jpg differ diff --git a/src/frames/105.jpg b/src/frames/105.jpg new file mode 100644 index 0000000..ab849fc Binary files /dev/null and b/src/frames/105.jpg differ diff --git a/src/frames/106.jpg b/src/frames/106.jpg new file mode 100644 index 0000000..ad560c9 Binary files /dev/null and b/src/frames/106.jpg differ diff --git a/src/frames/107.jpg b/src/frames/107.jpg new file mode 100644 index 0000000..b0ba715 Binary files /dev/null and b/src/frames/107.jpg differ diff --git a/src/frames/108.jpg b/src/frames/108.jpg new file mode 100644 index 0000000..bfc9522 Binary files /dev/null and b/src/frames/108.jpg differ diff --git a/src/frames/109.jpg b/src/frames/109.jpg new file mode 100644 index 0000000..68d0b06 Binary files /dev/null and b/src/frames/109.jpg differ diff --git a/src/frames/11.jpg b/src/frames/11.jpg new file mode 100644 index 0000000..1c65ca6 Binary files /dev/null and b/src/frames/11.jpg differ diff --git a/src/frames/110.jpg b/src/frames/110.jpg new file mode 100644 index 0000000..609e70c Binary files /dev/null and b/src/frames/110.jpg differ diff --git a/src/frames/111.jpg b/src/frames/111.jpg new file mode 100644 index 0000000..a6bf4ef Binary files /dev/null and b/src/frames/111.jpg differ diff --git a/src/frames/112.jpg b/src/frames/112.jpg new file mode 100644 index 0000000..061f519 Binary files /dev/null and b/src/frames/112.jpg differ diff --git a/src/frames/113.jpg b/src/frames/113.jpg new file mode 100644 index 0000000..b51e329 Binary files /dev/null and b/src/frames/113.jpg differ diff --git a/src/frames/114.jpg b/src/frames/114.jpg new file mode 100644 index 0000000..5426d0b Binary files /dev/null and b/src/frames/114.jpg differ diff --git a/src/frames/115.jpg b/src/frames/115.jpg new file mode 100644 index 0000000..e6a6e82 Binary files /dev/null and b/src/frames/115.jpg differ diff --git a/src/frames/116.jpg b/src/frames/116.jpg new file mode 100644 index 0000000..d65403b Binary files /dev/null and b/src/frames/116.jpg differ diff --git a/src/frames/117.jpg b/src/frames/117.jpg new file mode 100644 index 0000000..95f556c Binary files /dev/null and b/src/frames/117.jpg differ diff --git a/src/frames/118.jpg b/src/frames/118.jpg new file mode 100644 index 0000000..8c4c42c Binary files /dev/null and b/src/frames/118.jpg differ diff --git a/src/frames/119.jpg b/src/frames/119.jpg new file mode 100644 index 0000000..c42a0da Binary files /dev/null and b/src/frames/119.jpg differ diff --git a/src/frames/12.jpg b/src/frames/12.jpg new file mode 100644 index 0000000..3d80a07 Binary files /dev/null and b/src/frames/12.jpg differ diff --git a/src/frames/120.jpg b/src/frames/120.jpg new file mode 100644 index 0000000..b3a5a54 Binary files /dev/null and b/src/frames/120.jpg differ diff --git a/src/frames/121.jpg b/src/frames/121.jpg new file mode 100644 index 0000000..3040440 Binary files /dev/null and b/src/frames/121.jpg differ diff --git a/src/frames/122.jpg b/src/frames/122.jpg new file mode 100644 index 0000000..e6faa37 Binary files /dev/null and b/src/frames/122.jpg differ diff --git a/src/frames/123.jpg b/src/frames/123.jpg new file mode 100644 index 0000000..c60d6b7 Binary files /dev/null and b/src/frames/123.jpg differ diff --git a/src/frames/124.jpg b/src/frames/124.jpg new file mode 100644 index 0000000..894f2af Binary files /dev/null and b/src/frames/124.jpg differ diff --git a/src/frames/125.jpg b/src/frames/125.jpg new file mode 100644 index 0000000..af543a3 Binary files /dev/null and b/src/frames/125.jpg differ diff --git a/src/frames/126.jpg b/src/frames/126.jpg new file mode 100644 index 0000000..3033d6d Binary files /dev/null and b/src/frames/126.jpg differ diff --git a/src/frames/127.jpg b/src/frames/127.jpg new file mode 100644 index 0000000..ae1f841 Binary files /dev/null and b/src/frames/127.jpg differ diff --git a/src/frames/128.jpg b/src/frames/128.jpg new file mode 100644 index 0000000..fd7c739 Binary files /dev/null and b/src/frames/128.jpg differ diff --git a/src/frames/129.jpg b/src/frames/129.jpg new file mode 100644 index 0000000..48d4422 Binary files /dev/null and b/src/frames/129.jpg differ diff --git a/src/frames/13.jpg b/src/frames/13.jpg new file mode 100644 index 0000000..c7a2c73 Binary files /dev/null and b/src/frames/13.jpg differ diff --git a/src/frames/130.jpg b/src/frames/130.jpg new file mode 100644 index 0000000..718e788 Binary files /dev/null and b/src/frames/130.jpg differ diff --git a/src/frames/131.jpg b/src/frames/131.jpg new file mode 100644 index 0000000..4403cd7 Binary files /dev/null and b/src/frames/131.jpg differ diff --git a/src/frames/132.jpg b/src/frames/132.jpg new file mode 100644 index 0000000..b1b1f57 Binary files /dev/null and b/src/frames/132.jpg differ diff --git a/src/frames/133.jpg b/src/frames/133.jpg new file mode 100644 index 0000000..e3e5dd7 Binary files /dev/null and b/src/frames/133.jpg differ diff --git a/src/frames/134.jpg b/src/frames/134.jpg new file mode 100644 index 0000000..2538266 Binary files /dev/null and b/src/frames/134.jpg differ diff --git a/src/frames/135.jpg b/src/frames/135.jpg new file mode 100644 index 0000000..4bac348 Binary files /dev/null and b/src/frames/135.jpg differ diff --git a/src/frames/136.jpg b/src/frames/136.jpg new file mode 100644 index 0000000..ddf8913 Binary files /dev/null and b/src/frames/136.jpg differ diff --git a/src/frames/137.jpg b/src/frames/137.jpg new file mode 100644 index 0000000..5cb5898 Binary files /dev/null and b/src/frames/137.jpg differ diff --git a/src/frames/138.jpg b/src/frames/138.jpg new file mode 100644 index 0000000..63233ec Binary files /dev/null and b/src/frames/138.jpg differ diff --git a/src/frames/139.jpg b/src/frames/139.jpg new file mode 100644 index 0000000..50392dc Binary files /dev/null and b/src/frames/139.jpg differ diff --git a/src/frames/14.jpg b/src/frames/14.jpg new file mode 100644 index 0000000..1f347b6 Binary files /dev/null and b/src/frames/14.jpg differ diff --git a/src/frames/140.jpg b/src/frames/140.jpg new file mode 100644 index 0000000..d381494 Binary files /dev/null and b/src/frames/140.jpg differ diff --git a/src/frames/141.jpg b/src/frames/141.jpg new file mode 100644 index 0000000..07a231a Binary files /dev/null and b/src/frames/141.jpg differ diff --git a/src/frames/142.jpg b/src/frames/142.jpg new file mode 100644 index 0000000..c3bc453 Binary files /dev/null and b/src/frames/142.jpg differ diff --git a/src/frames/143.jpg b/src/frames/143.jpg new file mode 100644 index 0000000..995e793 Binary files /dev/null and b/src/frames/143.jpg differ diff --git a/src/frames/144.jpg b/src/frames/144.jpg new file mode 100644 index 0000000..4c38254 Binary files /dev/null and b/src/frames/144.jpg differ diff --git a/src/frames/145.jpg b/src/frames/145.jpg new file mode 100644 index 0000000..2ccb314 Binary files /dev/null and b/src/frames/145.jpg differ diff --git a/src/frames/146.jpg b/src/frames/146.jpg new file mode 100644 index 0000000..4f83d12 Binary files /dev/null and b/src/frames/146.jpg differ diff --git a/src/frames/147.jpg b/src/frames/147.jpg new file mode 100644 index 0000000..71403d6 Binary files /dev/null and b/src/frames/147.jpg differ diff --git a/src/frames/148.jpg b/src/frames/148.jpg new file mode 100644 index 0000000..5cacd5a Binary files /dev/null and b/src/frames/148.jpg differ diff --git a/src/frames/149.jpg b/src/frames/149.jpg new file mode 100644 index 0000000..e5c296b Binary files /dev/null and b/src/frames/149.jpg differ diff --git a/src/frames/15.jpg b/src/frames/15.jpg new file mode 100644 index 0000000..51cefa5 Binary files /dev/null and b/src/frames/15.jpg differ diff --git a/src/frames/150.jpg b/src/frames/150.jpg new file mode 100644 index 0000000..c3ab1e1 Binary files /dev/null and b/src/frames/150.jpg differ diff --git a/src/frames/151.jpg b/src/frames/151.jpg new file mode 100644 index 0000000..ca62e26 Binary files /dev/null and b/src/frames/151.jpg differ diff --git a/src/frames/152.jpg b/src/frames/152.jpg new file mode 100644 index 0000000..5071f84 Binary files /dev/null and b/src/frames/152.jpg differ diff --git a/src/frames/153.jpg b/src/frames/153.jpg new file mode 100644 index 0000000..04c7735 Binary files /dev/null and b/src/frames/153.jpg differ diff --git a/src/frames/154.jpg b/src/frames/154.jpg new file mode 100644 index 0000000..8c52750 Binary files /dev/null and b/src/frames/154.jpg differ diff --git a/src/frames/155.jpg b/src/frames/155.jpg new file mode 100644 index 0000000..e6b84d5 Binary files /dev/null and b/src/frames/155.jpg differ diff --git a/src/frames/156.jpg b/src/frames/156.jpg new file mode 100644 index 0000000..10c5ed8 Binary files /dev/null and b/src/frames/156.jpg differ diff --git a/src/frames/157.jpg b/src/frames/157.jpg new file mode 100644 index 0000000..e4484cc Binary files /dev/null and b/src/frames/157.jpg differ diff --git a/src/frames/158.jpg b/src/frames/158.jpg new file mode 100644 index 0000000..c6e7c4e Binary files /dev/null and b/src/frames/158.jpg differ diff --git a/src/frames/159.jpg b/src/frames/159.jpg new file mode 100644 index 0000000..76756ac Binary files /dev/null and b/src/frames/159.jpg differ diff --git a/src/frames/16.jpg b/src/frames/16.jpg new file mode 100644 index 0000000..b11abb4 Binary files /dev/null and b/src/frames/16.jpg differ diff --git a/src/frames/160.jpg b/src/frames/160.jpg new file mode 100644 index 0000000..c395d57 Binary files /dev/null and b/src/frames/160.jpg differ diff --git a/src/frames/161.jpg b/src/frames/161.jpg new file mode 100644 index 0000000..3878a25 Binary files /dev/null and b/src/frames/161.jpg differ diff --git a/src/frames/162.jpg b/src/frames/162.jpg new file mode 100644 index 0000000..7665c13 Binary files /dev/null and b/src/frames/162.jpg differ diff --git a/src/frames/163.jpg b/src/frames/163.jpg new file mode 100644 index 0000000..5c26a70 Binary files /dev/null and b/src/frames/163.jpg differ diff --git a/src/frames/164.jpg b/src/frames/164.jpg new file mode 100644 index 0000000..af7a2c8 Binary files /dev/null and b/src/frames/164.jpg differ diff --git a/src/frames/165.jpg b/src/frames/165.jpg new file mode 100644 index 0000000..a25f1dd Binary files /dev/null and b/src/frames/165.jpg differ diff --git a/src/frames/166.jpg b/src/frames/166.jpg new file mode 100644 index 0000000..4f41f1f Binary files /dev/null and b/src/frames/166.jpg differ diff --git a/src/frames/167.jpg b/src/frames/167.jpg new file mode 100644 index 0000000..c3c37cf Binary files /dev/null and b/src/frames/167.jpg differ diff --git a/src/frames/168.jpg b/src/frames/168.jpg new file mode 100644 index 0000000..89c47f3 Binary files /dev/null and b/src/frames/168.jpg differ diff --git a/src/frames/169.jpg b/src/frames/169.jpg new file mode 100644 index 0000000..5e8ec86 Binary files /dev/null and b/src/frames/169.jpg differ diff --git a/src/frames/17.jpg b/src/frames/17.jpg new file mode 100644 index 0000000..b7265ca Binary files /dev/null and b/src/frames/17.jpg differ diff --git a/src/frames/170.jpg b/src/frames/170.jpg new file mode 100644 index 0000000..5cac7e9 Binary files /dev/null and b/src/frames/170.jpg differ diff --git a/src/frames/171.jpg b/src/frames/171.jpg new file mode 100644 index 0000000..f558464 Binary files /dev/null and b/src/frames/171.jpg differ diff --git a/src/frames/172.jpg b/src/frames/172.jpg new file mode 100644 index 0000000..9ab1053 Binary files /dev/null and b/src/frames/172.jpg differ diff --git a/src/frames/173.jpg b/src/frames/173.jpg new file mode 100644 index 0000000..3b71f07 Binary files /dev/null and b/src/frames/173.jpg differ diff --git a/src/frames/174.jpg b/src/frames/174.jpg new file mode 100644 index 0000000..0d1f339 Binary files /dev/null and b/src/frames/174.jpg differ diff --git a/src/frames/175.jpg b/src/frames/175.jpg new file mode 100644 index 0000000..a9df265 Binary files /dev/null and b/src/frames/175.jpg differ diff --git a/src/frames/176.jpg b/src/frames/176.jpg new file mode 100644 index 0000000..e00a4aa Binary files /dev/null and b/src/frames/176.jpg differ diff --git a/src/frames/177.jpg b/src/frames/177.jpg new file mode 100644 index 0000000..0ece87d Binary files /dev/null and b/src/frames/177.jpg differ diff --git a/src/frames/178.jpg b/src/frames/178.jpg new file mode 100644 index 0000000..c5352b0 Binary files /dev/null and b/src/frames/178.jpg differ diff --git a/src/frames/179.jpg b/src/frames/179.jpg new file mode 100644 index 0000000..416d940 Binary files /dev/null and b/src/frames/179.jpg differ diff --git a/src/frames/18.jpg b/src/frames/18.jpg new file mode 100644 index 0000000..9d585d2 Binary files /dev/null and b/src/frames/18.jpg differ diff --git a/src/frames/180.jpg b/src/frames/180.jpg new file mode 100644 index 0000000..28f1bc7 Binary files /dev/null and b/src/frames/180.jpg differ diff --git a/src/frames/181.jpg b/src/frames/181.jpg new file mode 100644 index 0000000..f28fd93 Binary files /dev/null and b/src/frames/181.jpg differ diff --git a/src/frames/182.jpg b/src/frames/182.jpg new file mode 100644 index 0000000..d0e110b Binary files /dev/null and b/src/frames/182.jpg differ diff --git a/src/frames/183.jpg b/src/frames/183.jpg new file mode 100644 index 0000000..a96880b Binary files /dev/null and b/src/frames/183.jpg differ diff --git a/src/frames/184.jpg b/src/frames/184.jpg new file mode 100644 index 0000000..defb08b Binary files /dev/null and b/src/frames/184.jpg differ diff --git a/src/frames/185.jpg b/src/frames/185.jpg new file mode 100644 index 0000000..c40e6a5 Binary files /dev/null and b/src/frames/185.jpg differ diff --git a/src/frames/186.jpg b/src/frames/186.jpg new file mode 100644 index 0000000..b138264 Binary files /dev/null and b/src/frames/186.jpg differ diff --git a/src/frames/187.jpg b/src/frames/187.jpg new file mode 100644 index 0000000..318a279 Binary files /dev/null and b/src/frames/187.jpg differ diff --git a/src/frames/188.jpg b/src/frames/188.jpg new file mode 100644 index 0000000..cea794e Binary files /dev/null and b/src/frames/188.jpg differ diff --git a/src/frames/189.jpg b/src/frames/189.jpg new file mode 100644 index 0000000..56af88c Binary files /dev/null and b/src/frames/189.jpg differ diff --git a/src/frames/19.jpg b/src/frames/19.jpg new file mode 100644 index 0000000..ea9f17a Binary files /dev/null and b/src/frames/19.jpg differ diff --git a/src/frames/190.jpg b/src/frames/190.jpg new file mode 100644 index 0000000..36fd145 Binary files /dev/null and b/src/frames/190.jpg differ diff --git a/src/frames/191.jpg b/src/frames/191.jpg new file mode 100644 index 0000000..ce3eb73 Binary files /dev/null and b/src/frames/191.jpg differ diff --git a/src/frames/192.jpg b/src/frames/192.jpg new file mode 100644 index 0000000..ab2b290 Binary files /dev/null and b/src/frames/192.jpg differ diff --git a/src/frames/193.jpg b/src/frames/193.jpg new file mode 100644 index 0000000..d12ed3a Binary files /dev/null and b/src/frames/193.jpg differ diff --git a/src/frames/194.jpg b/src/frames/194.jpg new file mode 100644 index 0000000..ad5dbf0 Binary files /dev/null and b/src/frames/194.jpg differ diff --git a/src/frames/195.jpg b/src/frames/195.jpg new file mode 100644 index 0000000..9c04ea9 Binary files /dev/null and b/src/frames/195.jpg differ diff --git a/src/frames/196.jpg b/src/frames/196.jpg new file mode 100644 index 0000000..a05a295 Binary files /dev/null and b/src/frames/196.jpg differ diff --git a/src/frames/197.jpg b/src/frames/197.jpg new file mode 100644 index 0000000..78c0c46 Binary files /dev/null and b/src/frames/197.jpg differ diff --git a/src/frames/198.jpg b/src/frames/198.jpg new file mode 100644 index 0000000..d47d084 Binary files /dev/null and b/src/frames/198.jpg differ diff --git a/src/frames/199.jpg b/src/frames/199.jpg new file mode 100644 index 0000000..3fd8048 Binary files /dev/null and b/src/frames/199.jpg differ diff --git a/src/frames/2.jpg b/src/frames/2.jpg new file mode 100644 index 0000000..f0b2c42 Binary files /dev/null and b/src/frames/2.jpg differ diff --git a/src/frames/20.jpg b/src/frames/20.jpg new file mode 100644 index 0000000..9e13e43 Binary files /dev/null and b/src/frames/20.jpg differ diff --git a/src/frames/200.jpg b/src/frames/200.jpg new file mode 100644 index 0000000..6ed29ea Binary files /dev/null and b/src/frames/200.jpg differ diff --git a/src/frames/201.jpg b/src/frames/201.jpg new file mode 100644 index 0000000..4f38d64 Binary files /dev/null and b/src/frames/201.jpg differ diff --git a/src/frames/202.jpg b/src/frames/202.jpg new file mode 100644 index 0000000..afb92fd Binary files /dev/null and b/src/frames/202.jpg differ diff --git a/src/frames/203.jpg b/src/frames/203.jpg new file mode 100644 index 0000000..cd8be7e Binary files /dev/null and b/src/frames/203.jpg differ diff --git a/src/frames/204.jpg b/src/frames/204.jpg new file mode 100644 index 0000000..6173ed2 Binary files /dev/null and b/src/frames/204.jpg differ diff --git a/src/frames/205.jpg b/src/frames/205.jpg new file mode 100644 index 0000000..654f452 Binary files /dev/null and b/src/frames/205.jpg differ diff --git a/src/frames/206.jpg b/src/frames/206.jpg new file mode 100644 index 0000000..f63322e Binary files /dev/null and b/src/frames/206.jpg differ diff --git a/src/frames/207.jpg b/src/frames/207.jpg new file mode 100644 index 0000000..0aca755 Binary files /dev/null and b/src/frames/207.jpg differ diff --git a/src/frames/208.jpg b/src/frames/208.jpg new file mode 100644 index 0000000..9200b87 Binary files /dev/null and b/src/frames/208.jpg differ diff --git a/src/frames/209.jpg b/src/frames/209.jpg new file mode 100644 index 0000000..95bd46c Binary files /dev/null and b/src/frames/209.jpg differ diff --git a/src/frames/21.jpg b/src/frames/21.jpg new file mode 100644 index 0000000..d861bf3 Binary files /dev/null and b/src/frames/21.jpg differ diff --git a/src/frames/210.jpg b/src/frames/210.jpg new file mode 100644 index 0000000..095b8dc Binary files /dev/null and b/src/frames/210.jpg differ diff --git a/src/frames/211.jpg b/src/frames/211.jpg new file mode 100644 index 0000000..b6f3d93 Binary files /dev/null and b/src/frames/211.jpg differ diff --git a/src/frames/212.jpg b/src/frames/212.jpg new file mode 100644 index 0000000..869d7f8 Binary files /dev/null and b/src/frames/212.jpg differ diff --git a/src/frames/213.jpg b/src/frames/213.jpg new file mode 100644 index 0000000..3f236a0 Binary files /dev/null and b/src/frames/213.jpg differ diff --git a/src/frames/214.jpg b/src/frames/214.jpg new file mode 100644 index 0000000..a5bc399 Binary files /dev/null and b/src/frames/214.jpg differ diff --git a/src/frames/215.jpg b/src/frames/215.jpg new file mode 100644 index 0000000..6a31a5a Binary files /dev/null and b/src/frames/215.jpg differ diff --git a/src/frames/216.jpg b/src/frames/216.jpg new file mode 100644 index 0000000..86b0c89 Binary files /dev/null and b/src/frames/216.jpg differ diff --git a/src/frames/217.jpg b/src/frames/217.jpg new file mode 100644 index 0000000..f45771f Binary files /dev/null and b/src/frames/217.jpg differ diff --git a/src/frames/218.jpg b/src/frames/218.jpg new file mode 100644 index 0000000..d6f8316 Binary files /dev/null and b/src/frames/218.jpg differ diff --git a/src/frames/219.jpg b/src/frames/219.jpg new file mode 100644 index 0000000..d496218 Binary files /dev/null and b/src/frames/219.jpg differ diff --git a/src/frames/22.jpg b/src/frames/22.jpg new file mode 100644 index 0000000..23321ef Binary files /dev/null and b/src/frames/22.jpg differ diff --git a/src/frames/220.jpg b/src/frames/220.jpg new file mode 100644 index 0000000..96740a7 Binary files /dev/null and b/src/frames/220.jpg differ diff --git a/src/frames/221.jpg b/src/frames/221.jpg new file mode 100644 index 0000000..98fcdc5 Binary files /dev/null and b/src/frames/221.jpg differ diff --git a/src/frames/222.jpg b/src/frames/222.jpg new file mode 100644 index 0000000..cfc3d83 Binary files /dev/null and b/src/frames/222.jpg differ diff --git a/src/frames/223.jpg b/src/frames/223.jpg new file mode 100644 index 0000000..2abbd41 Binary files /dev/null and b/src/frames/223.jpg differ diff --git a/src/frames/224.jpg b/src/frames/224.jpg new file mode 100644 index 0000000..e0dcc96 Binary files /dev/null and b/src/frames/224.jpg differ diff --git a/src/frames/225.jpg b/src/frames/225.jpg new file mode 100644 index 0000000..d5624e5 Binary files /dev/null and b/src/frames/225.jpg differ diff --git a/src/frames/226.jpg b/src/frames/226.jpg new file mode 100644 index 0000000..987b771 Binary files /dev/null and b/src/frames/226.jpg differ diff --git a/src/frames/227.jpg b/src/frames/227.jpg new file mode 100644 index 0000000..65c1e3d Binary files /dev/null and b/src/frames/227.jpg differ diff --git a/src/frames/228.jpg b/src/frames/228.jpg new file mode 100644 index 0000000..ddd2721 Binary files /dev/null and b/src/frames/228.jpg differ diff --git a/src/frames/229.jpg b/src/frames/229.jpg new file mode 100644 index 0000000..83def5d Binary files /dev/null and b/src/frames/229.jpg differ diff --git a/src/frames/23.jpg b/src/frames/23.jpg new file mode 100644 index 0000000..ef38f9e Binary files /dev/null and b/src/frames/23.jpg differ diff --git a/src/frames/230.jpg b/src/frames/230.jpg new file mode 100644 index 0000000..f42e16d Binary files /dev/null and b/src/frames/230.jpg differ diff --git a/src/frames/231.jpg b/src/frames/231.jpg new file mode 100644 index 0000000..48e11bd Binary files /dev/null and b/src/frames/231.jpg differ diff --git a/src/frames/232.jpg b/src/frames/232.jpg new file mode 100644 index 0000000..83e7ad0 Binary files /dev/null and b/src/frames/232.jpg differ diff --git a/src/frames/233.jpg b/src/frames/233.jpg new file mode 100644 index 0000000..2e1b1af Binary files /dev/null and b/src/frames/233.jpg differ diff --git a/src/frames/234.jpg b/src/frames/234.jpg new file mode 100644 index 0000000..edfba4c Binary files /dev/null and b/src/frames/234.jpg differ diff --git a/src/frames/235.jpg b/src/frames/235.jpg new file mode 100644 index 0000000..42147dd Binary files /dev/null and b/src/frames/235.jpg differ diff --git a/src/frames/236.jpg b/src/frames/236.jpg new file mode 100644 index 0000000..d1835d9 Binary files /dev/null and b/src/frames/236.jpg differ diff --git a/src/frames/237.jpg b/src/frames/237.jpg new file mode 100644 index 0000000..0f5378b Binary files /dev/null and b/src/frames/237.jpg differ diff --git a/src/frames/238.jpg b/src/frames/238.jpg new file mode 100644 index 0000000..5c84fc2 Binary files /dev/null and b/src/frames/238.jpg differ diff --git a/src/frames/239.jpg b/src/frames/239.jpg new file mode 100644 index 0000000..a61b5c9 Binary files /dev/null and b/src/frames/239.jpg differ diff --git a/src/frames/24.jpg b/src/frames/24.jpg new file mode 100644 index 0000000..62e438d Binary files /dev/null and b/src/frames/24.jpg differ diff --git a/src/frames/240.jpg b/src/frames/240.jpg new file mode 100644 index 0000000..b716922 Binary files /dev/null and b/src/frames/240.jpg differ diff --git a/src/frames/241.jpg b/src/frames/241.jpg new file mode 100644 index 0000000..4f2eebe Binary files /dev/null and b/src/frames/241.jpg differ diff --git a/src/frames/242.jpg b/src/frames/242.jpg new file mode 100644 index 0000000..22172cd Binary files /dev/null and b/src/frames/242.jpg differ diff --git a/src/frames/243.jpg b/src/frames/243.jpg new file mode 100644 index 0000000..f45bcaa Binary files /dev/null and b/src/frames/243.jpg differ diff --git a/src/frames/244.jpg b/src/frames/244.jpg new file mode 100644 index 0000000..e51228f Binary files /dev/null and b/src/frames/244.jpg differ diff --git a/src/frames/245.jpg b/src/frames/245.jpg new file mode 100644 index 0000000..2ccb9a6 Binary files /dev/null and b/src/frames/245.jpg differ diff --git a/src/frames/246.jpg b/src/frames/246.jpg new file mode 100644 index 0000000..617375e Binary files /dev/null and b/src/frames/246.jpg differ diff --git a/src/frames/247.jpg b/src/frames/247.jpg new file mode 100644 index 0000000..5464409 Binary files /dev/null and b/src/frames/247.jpg differ diff --git a/src/frames/248.jpg b/src/frames/248.jpg new file mode 100644 index 0000000..74718f3 Binary files /dev/null and b/src/frames/248.jpg differ diff --git a/src/frames/249.jpg b/src/frames/249.jpg new file mode 100644 index 0000000..f12d948 Binary files /dev/null and b/src/frames/249.jpg differ diff --git a/src/frames/25.jpg b/src/frames/25.jpg new file mode 100644 index 0000000..079fb3c Binary files /dev/null and b/src/frames/25.jpg differ diff --git a/src/frames/250.jpg b/src/frames/250.jpg new file mode 100644 index 0000000..90729b6 Binary files /dev/null and b/src/frames/250.jpg differ diff --git a/src/frames/251.jpg b/src/frames/251.jpg new file mode 100644 index 0000000..4a12c2a Binary files /dev/null and b/src/frames/251.jpg differ diff --git a/src/frames/252.jpg b/src/frames/252.jpg new file mode 100644 index 0000000..52612fd Binary files /dev/null and b/src/frames/252.jpg differ diff --git a/src/frames/253.jpg b/src/frames/253.jpg new file mode 100644 index 0000000..5f6bd0c Binary files /dev/null and b/src/frames/253.jpg differ diff --git a/src/frames/254.jpg b/src/frames/254.jpg new file mode 100644 index 0000000..de27d96 Binary files /dev/null and b/src/frames/254.jpg differ diff --git a/src/frames/255.jpg b/src/frames/255.jpg new file mode 100644 index 0000000..41d74ac Binary files /dev/null and b/src/frames/255.jpg differ diff --git a/src/frames/256.jpg b/src/frames/256.jpg new file mode 100644 index 0000000..c6f6c42 Binary files /dev/null and b/src/frames/256.jpg differ diff --git a/src/frames/257.jpg b/src/frames/257.jpg new file mode 100644 index 0000000..446b15e Binary files /dev/null and b/src/frames/257.jpg differ diff --git a/src/frames/258.jpg b/src/frames/258.jpg new file mode 100644 index 0000000..84d0118 Binary files /dev/null and b/src/frames/258.jpg differ diff --git a/src/frames/259.jpg b/src/frames/259.jpg new file mode 100644 index 0000000..a9ea5b6 Binary files /dev/null and b/src/frames/259.jpg differ diff --git a/src/frames/26.jpg b/src/frames/26.jpg new file mode 100644 index 0000000..32e87f2 Binary files /dev/null and b/src/frames/26.jpg differ diff --git a/src/frames/260.jpg b/src/frames/260.jpg new file mode 100644 index 0000000..ad745e8 Binary files /dev/null and b/src/frames/260.jpg differ diff --git a/src/frames/261.jpg b/src/frames/261.jpg new file mode 100644 index 0000000..c8f5331 Binary files /dev/null and b/src/frames/261.jpg differ diff --git a/src/frames/262.jpg b/src/frames/262.jpg new file mode 100644 index 0000000..1b8675c Binary files /dev/null and b/src/frames/262.jpg differ diff --git a/src/frames/263.jpg b/src/frames/263.jpg new file mode 100644 index 0000000..da4e347 Binary files /dev/null and b/src/frames/263.jpg differ diff --git a/src/frames/264.jpg b/src/frames/264.jpg new file mode 100644 index 0000000..03772e2 Binary files /dev/null and b/src/frames/264.jpg differ diff --git a/src/frames/265.jpg b/src/frames/265.jpg new file mode 100644 index 0000000..bc3c38a Binary files /dev/null and b/src/frames/265.jpg differ diff --git a/src/frames/266.jpg b/src/frames/266.jpg new file mode 100644 index 0000000..c56ccd7 Binary files /dev/null and b/src/frames/266.jpg differ diff --git a/src/frames/267.jpg b/src/frames/267.jpg new file mode 100644 index 0000000..ec1b911 Binary files /dev/null and b/src/frames/267.jpg differ diff --git a/src/frames/268.jpg b/src/frames/268.jpg new file mode 100644 index 0000000..58916b2 Binary files /dev/null and b/src/frames/268.jpg differ diff --git a/src/frames/269.jpg b/src/frames/269.jpg new file mode 100644 index 0000000..d14a582 Binary files /dev/null and b/src/frames/269.jpg differ diff --git a/src/frames/27.jpg b/src/frames/27.jpg new file mode 100644 index 0000000..2dacc06 Binary files /dev/null and b/src/frames/27.jpg differ diff --git a/src/frames/270.jpg b/src/frames/270.jpg new file mode 100644 index 0000000..1241819 Binary files /dev/null and b/src/frames/270.jpg differ diff --git a/src/frames/271.jpg b/src/frames/271.jpg new file mode 100644 index 0000000..fa1b874 Binary files /dev/null and b/src/frames/271.jpg differ diff --git a/src/frames/272.jpg b/src/frames/272.jpg new file mode 100644 index 0000000..34a3fc3 Binary files /dev/null and b/src/frames/272.jpg differ diff --git a/src/frames/273.jpg b/src/frames/273.jpg new file mode 100644 index 0000000..96f104a Binary files /dev/null and b/src/frames/273.jpg differ diff --git a/src/frames/274.jpg b/src/frames/274.jpg new file mode 100644 index 0000000..68cecc9 Binary files /dev/null and b/src/frames/274.jpg differ diff --git a/src/frames/275.jpg b/src/frames/275.jpg new file mode 100644 index 0000000..203515a Binary files /dev/null and b/src/frames/275.jpg differ diff --git a/src/frames/276.jpg b/src/frames/276.jpg new file mode 100644 index 0000000..ab03d0b Binary files /dev/null and b/src/frames/276.jpg differ diff --git a/src/frames/277.jpg b/src/frames/277.jpg new file mode 100644 index 0000000..be19fdc Binary files /dev/null and b/src/frames/277.jpg differ diff --git a/src/frames/278.jpg b/src/frames/278.jpg new file mode 100644 index 0000000..fbabb1f Binary files /dev/null and b/src/frames/278.jpg differ diff --git a/src/frames/279.jpg b/src/frames/279.jpg new file mode 100644 index 0000000..08085cb Binary files /dev/null and b/src/frames/279.jpg differ diff --git a/src/frames/28.jpg b/src/frames/28.jpg new file mode 100644 index 0000000..7e2513d Binary files /dev/null and b/src/frames/28.jpg differ diff --git a/src/frames/280.jpg b/src/frames/280.jpg new file mode 100644 index 0000000..5af9afd Binary files /dev/null and b/src/frames/280.jpg differ diff --git a/src/frames/29.jpg b/src/frames/29.jpg new file mode 100644 index 0000000..bcca547 Binary files /dev/null and b/src/frames/29.jpg differ diff --git a/src/frames/3.jpg b/src/frames/3.jpg new file mode 100644 index 0000000..75b8ea5 Binary files /dev/null and b/src/frames/3.jpg differ diff --git a/src/frames/30.jpg b/src/frames/30.jpg new file mode 100644 index 0000000..d0254bb Binary files /dev/null and b/src/frames/30.jpg differ diff --git a/src/frames/31.jpg b/src/frames/31.jpg new file mode 100644 index 0000000..336b23b Binary files /dev/null and b/src/frames/31.jpg differ diff --git a/src/frames/32.jpg b/src/frames/32.jpg new file mode 100644 index 0000000..7f7a944 Binary files /dev/null and b/src/frames/32.jpg differ diff --git a/src/frames/33.jpg b/src/frames/33.jpg new file mode 100644 index 0000000..c748e6f Binary files /dev/null and b/src/frames/33.jpg differ diff --git a/src/frames/34.jpg b/src/frames/34.jpg new file mode 100644 index 0000000..250e6a8 Binary files /dev/null and b/src/frames/34.jpg differ diff --git a/src/frames/35.jpg b/src/frames/35.jpg new file mode 100644 index 0000000..7111d83 Binary files /dev/null and b/src/frames/35.jpg differ diff --git a/src/frames/36.jpg b/src/frames/36.jpg new file mode 100644 index 0000000..5c76069 Binary files /dev/null and b/src/frames/36.jpg differ diff --git a/src/frames/37.jpg b/src/frames/37.jpg new file mode 100644 index 0000000..05227a6 Binary files /dev/null and b/src/frames/37.jpg differ diff --git a/src/frames/38.jpg b/src/frames/38.jpg new file mode 100644 index 0000000..b0e00a1 Binary files /dev/null and b/src/frames/38.jpg differ diff --git a/src/frames/39.jpg b/src/frames/39.jpg new file mode 100644 index 0000000..de65f29 Binary files /dev/null and b/src/frames/39.jpg differ diff --git a/src/frames/4.jpg b/src/frames/4.jpg new file mode 100644 index 0000000..27dc83f Binary files /dev/null and b/src/frames/4.jpg differ diff --git a/src/frames/40.jpg b/src/frames/40.jpg new file mode 100644 index 0000000..efcf132 Binary files /dev/null and b/src/frames/40.jpg differ diff --git a/src/frames/41.jpg b/src/frames/41.jpg new file mode 100644 index 0000000..221eff3 Binary files /dev/null and b/src/frames/41.jpg differ diff --git a/src/frames/42.jpg b/src/frames/42.jpg new file mode 100644 index 0000000..9fc7f82 Binary files /dev/null and b/src/frames/42.jpg differ diff --git a/src/frames/43.jpg b/src/frames/43.jpg new file mode 100644 index 0000000..16010e4 Binary files /dev/null and b/src/frames/43.jpg differ diff --git a/src/frames/44.jpg b/src/frames/44.jpg new file mode 100644 index 0000000..1d1938f Binary files /dev/null and b/src/frames/44.jpg differ diff --git a/src/frames/45.jpg b/src/frames/45.jpg new file mode 100644 index 0000000..f244976 Binary files /dev/null and b/src/frames/45.jpg differ diff --git a/src/frames/46.jpg b/src/frames/46.jpg new file mode 100644 index 0000000..0150f9d Binary files /dev/null and b/src/frames/46.jpg differ diff --git a/src/frames/47.jpg b/src/frames/47.jpg new file mode 100644 index 0000000..1f606fb Binary files /dev/null and b/src/frames/47.jpg differ diff --git a/src/frames/48.jpg b/src/frames/48.jpg new file mode 100644 index 0000000..8978c7b Binary files /dev/null and b/src/frames/48.jpg differ diff --git a/src/frames/49.jpg b/src/frames/49.jpg new file mode 100644 index 0000000..2862032 Binary files /dev/null and b/src/frames/49.jpg differ diff --git a/src/frames/5.jpg b/src/frames/5.jpg new file mode 100644 index 0000000..4b76dfa Binary files /dev/null and b/src/frames/5.jpg differ diff --git a/src/frames/50.jpg b/src/frames/50.jpg new file mode 100644 index 0000000..ef478f7 Binary files /dev/null and b/src/frames/50.jpg differ diff --git a/src/frames/51.jpg b/src/frames/51.jpg new file mode 100644 index 0000000..09d577b Binary files /dev/null and b/src/frames/51.jpg differ diff --git a/src/frames/52.jpg b/src/frames/52.jpg new file mode 100644 index 0000000..92bd1f1 Binary files /dev/null and b/src/frames/52.jpg differ diff --git a/src/frames/53.jpg b/src/frames/53.jpg new file mode 100644 index 0000000..9ddc377 Binary files /dev/null and b/src/frames/53.jpg differ diff --git a/src/frames/54.jpg b/src/frames/54.jpg new file mode 100644 index 0000000..43c2cdc Binary files /dev/null and b/src/frames/54.jpg differ diff --git a/src/frames/55.jpg b/src/frames/55.jpg new file mode 100644 index 0000000..17a27e6 Binary files /dev/null and b/src/frames/55.jpg differ diff --git a/src/frames/56.jpg b/src/frames/56.jpg new file mode 100644 index 0000000..4a3d449 Binary files /dev/null and b/src/frames/56.jpg differ diff --git a/src/frames/57.jpg b/src/frames/57.jpg new file mode 100644 index 0000000..83c9fe0 Binary files /dev/null and b/src/frames/57.jpg differ diff --git a/src/frames/58.jpg b/src/frames/58.jpg new file mode 100644 index 0000000..e56ac1e Binary files /dev/null and b/src/frames/58.jpg differ diff --git a/src/frames/59.jpg b/src/frames/59.jpg new file mode 100644 index 0000000..3e08e25 Binary files /dev/null and b/src/frames/59.jpg differ diff --git a/src/frames/6.jpg b/src/frames/6.jpg new file mode 100644 index 0000000..537909c Binary files /dev/null and b/src/frames/6.jpg differ diff --git a/src/frames/60.jpg b/src/frames/60.jpg new file mode 100644 index 0000000..d602159 Binary files /dev/null and b/src/frames/60.jpg differ diff --git a/src/frames/61.jpg b/src/frames/61.jpg new file mode 100644 index 0000000..6c58efd Binary files /dev/null and b/src/frames/61.jpg differ diff --git a/src/frames/62.jpg b/src/frames/62.jpg new file mode 100644 index 0000000..9615f68 Binary files /dev/null and b/src/frames/62.jpg differ diff --git a/src/frames/63.jpg b/src/frames/63.jpg new file mode 100644 index 0000000..fcf4eb7 Binary files /dev/null and b/src/frames/63.jpg differ diff --git a/src/frames/64.jpg b/src/frames/64.jpg new file mode 100644 index 0000000..5121b2b Binary files /dev/null and b/src/frames/64.jpg differ diff --git a/src/frames/65.jpg b/src/frames/65.jpg new file mode 100644 index 0000000..6cb5280 Binary files /dev/null and b/src/frames/65.jpg differ diff --git a/src/frames/66.jpg b/src/frames/66.jpg new file mode 100644 index 0000000..ac318dc Binary files /dev/null and b/src/frames/66.jpg differ diff --git a/src/frames/67.jpg b/src/frames/67.jpg new file mode 100644 index 0000000..8e87d76 Binary files /dev/null and b/src/frames/67.jpg differ diff --git a/src/frames/68.jpg b/src/frames/68.jpg new file mode 100644 index 0000000..7b4b9b9 Binary files /dev/null and b/src/frames/68.jpg differ diff --git a/src/frames/69.jpg b/src/frames/69.jpg new file mode 100644 index 0000000..f8d1c95 Binary files /dev/null and b/src/frames/69.jpg differ diff --git a/src/frames/7.jpg b/src/frames/7.jpg new file mode 100644 index 0000000..a8f6b9e Binary files /dev/null and b/src/frames/7.jpg differ diff --git a/src/frames/70.jpg b/src/frames/70.jpg new file mode 100644 index 0000000..ea24b4f Binary files /dev/null and b/src/frames/70.jpg differ diff --git a/src/frames/71.jpg b/src/frames/71.jpg new file mode 100644 index 0000000..f731d85 Binary files /dev/null and b/src/frames/71.jpg differ diff --git a/src/frames/72.jpg b/src/frames/72.jpg new file mode 100644 index 0000000..1ab2f49 Binary files /dev/null and b/src/frames/72.jpg differ diff --git a/src/frames/73.jpg b/src/frames/73.jpg new file mode 100644 index 0000000..aed5885 Binary files /dev/null and b/src/frames/73.jpg differ diff --git a/src/frames/74.jpg b/src/frames/74.jpg new file mode 100644 index 0000000..d995115 Binary files /dev/null and b/src/frames/74.jpg differ diff --git a/src/frames/75.jpg b/src/frames/75.jpg new file mode 100644 index 0000000..8962a87 Binary files /dev/null and b/src/frames/75.jpg differ diff --git a/src/frames/76.jpg b/src/frames/76.jpg new file mode 100644 index 0000000..f130f61 Binary files /dev/null and b/src/frames/76.jpg differ diff --git a/src/frames/77.jpg b/src/frames/77.jpg new file mode 100644 index 0000000..ad74b4e Binary files /dev/null and b/src/frames/77.jpg differ diff --git a/src/frames/78.jpg b/src/frames/78.jpg new file mode 100644 index 0000000..6b29a57 Binary files /dev/null and b/src/frames/78.jpg differ diff --git a/src/frames/79.jpg b/src/frames/79.jpg new file mode 100644 index 0000000..fe4cca3 Binary files /dev/null and b/src/frames/79.jpg differ diff --git a/src/frames/8.jpg b/src/frames/8.jpg new file mode 100644 index 0000000..7771c6b Binary files /dev/null and b/src/frames/8.jpg differ diff --git a/src/frames/80.jpg b/src/frames/80.jpg new file mode 100644 index 0000000..2bc5d62 Binary files /dev/null and b/src/frames/80.jpg differ diff --git a/src/frames/81.jpg b/src/frames/81.jpg new file mode 100644 index 0000000..00b8df5 Binary files /dev/null and b/src/frames/81.jpg differ diff --git a/src/frames/82.jpg b/src/frames/82.jpg new file mode 100644 index 0000000..2709dda Binary files /dev/null and b/src/frames/82.jpg differ diff --git a/src/frames/83.jpg b/src/frames/83.jpg new file mode 100644 index 0000000..ebe4606 Binary files /dev/null and b/src/frames/83.jpg differ diff --git a/src/frames/84.jpg b/src/frames/84.jpg new file mode 100644 index 0000000..049a552 Binary files /dev/null and b/src/frames/84.jpg differ diff --git a/src/frames/85.jpg b/src/frames/85.jpg new file mode 100644 index 0000000..395c8f4 Binary files /dev/null and b/src/frames/85.jpg differ diff --git a/src/frames/86.jpg b/src/frames/86.jpg new file mode 100644 index 0000000..3b1f187 Binary files /dev/null and b/src/frames/86.jpg differ diff --git a/src/frames/87.jpg b/src/frames/87.jpg new file mode 100644 index 0000000..70408d7 Binary files /dev/null and b/src/frames/87.jpg differ diff --git a/src/frames/88.jpg b/src/frames/88.jpg new file mode 100644 index 0000000..c8ce7c2 Binary files /dev/null and b/src/frames/88.jpg differ diff --git a/src/frames/89.jpg b/src/frames/89.jpg new file mode 100644 index 0000000..ed90eb2 Binary files /dev/null and b/src/frames/89.jpg differ diff --git a/src/frames/9.jpg b/src/frames/9.jpg new file mode 100644 index 0000000..14d45bd Binary files /dev/null and b/src/frames/9.jpg differ diff --git a/src/frames/90.jpg b/src/frames/90.jpg new file mode 100644 index 0000000..2cd6175 Binary files /dev/null and b/src/frames/90.jpg differ diff --git a/src/frames/91.jpg b/src/frames/91.jpg new file mode 100644 index 0000000..08ed64d Binary files /dev/null and b/src/frames/91.jpg differ diff --git a/src/frames/92.jpg b/src/frames/92.jpg new file mode 100644 index 0000000..9df4a6f Binary files /dev/null and b/src/frames/92.jpg differ diff --git a/src/frames/93.jpg b/src/frames/93.jpg new file mode 100644 index 0000000..a345f04 Binary files /dev/null and b/src/frames/93.jpg differ diff --git a/src/frames/94.jpg b/src/frames/94.jpg new file mode 100644 index 0000000..414fcfe Binary files /dev/null and b/src/frames/94.jpg differ diff --git a/src/frames/95.jpg b/src/frames/95.jpg new file mode 100644 index 0000000..65f273f Binary files /dev/null and b/src/frames/95.jpg differ diff --git a/src/frames/96.jpg b/src/frames/96.jpg new file mode 100644 index 0000000..77d768d Binary files /dev/null and b/src/frames/96.jpg differ diff --git a/src/frames/97.jpg b/src/frames/97.jpg new file mode 100644 index 0000000..266c5ff Binary files /dev/null and b/src/frames/97.jpg differ diff --git a/src/frames/98.jpg b/src/frames/98.jpg new file mode 100644 index 0000000..38357f8 Binary files /dev/null and b/src/frames/98.jpg differ diff --git a/src/frames/99.jpg b/src/frames/99.jpg new file mode 100644 index 0000000..9d6349c Binary files /dev/null and b/src/frames/99.jpg differ diff --git a/src/image/1.jpg b/src/image/1.jpg new file mode 100644 index 0000000..c014e23 Binary files /dev/null and b/src/image/1.jpg differ diff --git a/src/image/2.jpg b/src/image/2.jpg new file mode 100644 index 0000000..bea9a75 Binary files /dev/null and b/src/image/2.jpg differ diff --git a/src/image/result.jpg b/src/image/result.jpg new file mode 100644 index 0000000..677a266 Binary files /dev/null and b/src/image/result.jpg differ diff --git a/src/image/tmp_content.jpg b/src/image/tmp_content.jpg new file mode 100644 index 0000000..155e848 Binary files /dev/null and b/src/image/tmp_content.jpg differ diff --git a/src/image/tmp_style.jpg b/src/image/tmp_style.jpg new file mode 100644 index 0000000..b939a93 Binary files /dev/null and b/src/image/tmp_style.jpg differ diff --git a/src/image_trans.py b/src/image_trans.py new file mode 100644 index 0000000..d3dfcca --- /dev/null +++ b/src/image_trans.py @@ -0,0 +1,193 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.optim as optim + +from PIL import Image +import matplotlib.pyplot as plt + +import torchvision.transforms as transforms +import torchvision.models as models + +import copy + +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") +torch.set_default_device(device) +imsize = 512 if torch.cuda.is_available() else 128 # use small size if no GPU +loader = transforms.Compose([ + transforms.Resize(imsize), # scale imported image + transforms.ToTensor()]) # transform it into a torch tensor + + +def image_loader(image_name): + image = Image.open(image_name) + image = image.resize((512, 512)) + image = loader(image).unsqueeze(0) + return image.to(device, torch.float) + + + +unloader = transforms.ToPILImage() # reconvert into PIL image + + +class ContentLoss(nn.Module): + + def __init__(self, target, ): + super(ContentLoss, self).__init__() + self.target = target.detach() + + def forward(self, input): + self.loss = F.mse_loss(input, self.target) + return input + + +def gram_matrix(input): + a, b, c, d = input.size() # a=batch size(=1) + features = input.view(a * b, c * d) # resize F_XL into \hat F_XL + G = torch.mm(features, features.t()) # compute the gram product + return G.div(a * b * c * d) + + +class StyleLoss(nn.Module): + + def __init__(self, target_feature): + super(StyleLoss, self).__init__() + self.target = gram_matrix(target_feature).detach() + + def forward(self, input): + G = gram_matrix(input) + self.loss = F.mse_loss(G, self.target) + return input + + +cnn = models.vgg19(pretrained=True).features.eval() + +cnn_normalization_mean = torch.tensor([0.485, 0.456, 0.406]) +cnn_normalization_std = torch.tensor([0.229, 0.224, 0.225]) + + +class Normalization(nn.Module): + def __init__(self, mean, std): + super(Normalization, self).__init__() + self.mean = torch.tensor(mean).view(-1, 1, 1) + self.std = torch.tensor(std).view(-1, 1, 1) + + def forward(self, img): + return (img - self.mean) / self.std + + +content_layers_default = ['conv_4'] +style_layers_default = ['conv_1', 'conv_2', 'conv_3', 'conv_4', 'conv_5'] + + +def get_style_model_and_losses(cnn, normalization_mean, normalization_std, + style_img, content_img, + content_layers=content_layers_default, + style_layers=style_layers_default): + normalization = Normalization(normalization_mean, normalization_std) + content_losses = [] + style_losses = [] + model = nn.Sequential(normalization) + i = 0 + for layer in cnn.children(): + if isinstance(layer, nn.Conv2d): + i += 1 + name = 'conv_{}'.format(i) + elif isinstance(layer, nn.ReLU): + name = 'relu_{}'.format(i) + + layer = nn.ReLU(inplace=False) + elif isinstance(layer, nn.MaxPool2d): + name = 'pool_{}'.format(i) + elif isinstance(layer, nn.BatchNorm2d): + name = 'bn_{}'.format(i) + else: + raise RuntimeError('Unrecognized layer: {}'.format(layer.__class__.__name__)) + + model.add_module(name, layer) + + if name in content_layers: + target = model(content_img).detach() + content_loss = ContentLoss(target) + model.add_module("content_loss_{}".format(i), content_loss) + content_losses.append(content_loss) + + if name in style_layers: + target_feature = model(style_img).detach() + style_loss = StyleLoss(target_feature) + model.add_module("style_loss_{}".format(i), style_loss) + style_losses.append(style_loss) + + for i in range(len(model) - 1, -1, -1): + if isinstance(model[i], ContentLoss) or isinstance(model[i], StyleLoss): + break + + model = model[:(i + 1)] + + return model, style_losses, content_losses + + +def get_input_optimizer(input_img): + optimizer = optim.LBFGS([input_img]) + return optimizer + + +def run_style_transfer(cnn, normalization_mean, normalization_std, + content_img, style_img, input_img, num_steps=300, + style_weight=1000000, content_weight=1): + model, style_losses, content_losses = get_style_model_and_losses(cnn, + normalization_mean, normalization_std, style_img, + content_img) + input_img.requires_grad_(True) + model.eval() + model.requires_grad_(False) + optimizer = get_input_optimizer(input_img) + run = [0] + while run[0] <= num_steps: + + def closure(): + # correct the values of updated input image + with torch.no_grad(): + input_img.clamp_(0, 1) + + optimizer.zero_grad() + model(input_img) + style_score = 0 + content_score = 0 + + for sl in style_losses: + style_score += sl.loss + for cl in content_losses: + content_score += cl.loss + + style_score *= style_weight + content_score *= content_weight + + loss = style_score + content_score + loss.backward() + + run[0] += 1 + if run[0] % 50 == 0: + print('Style Loss : {:4f} Content Loss: {:4f}'.format( + style_score.item(), content_score.item())) + print() + return style_score + content_score + + optimizer.step(closure) + + with torch.no_grad(): + input_img.clamp_(0, 1) + + return input_img + + +def run(): + style_img = image_loader("image/tmp_style.jpg") + content_img = image_loader("image/tmp_content.jpg") + input_img = content_img.clone() + output = run_style_transfer(cnn, cnn_normalization_mean, cnn_normalization_std, + content_img, style_img, input_img,100) + output = output.cpu().clone() + output = output.squeeze(0) + pic = unloader(output) + pic.save('image/result.jpg') diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..9800253 --- /dev/null +++ b/src/main.py @@ -0,0 +1,548 @@ +# -*- coding: utf-8 -*- +import sys +from functools import partial + +import cv2 +import numpy as np +from PyQt5 import QtWidgets, QtGui, QtCore +from PyQt5.QtCore import Qt +from PyQt5.QtGui import QImage +from PyQt5.QtWidgets import QFileDialog + +import image_trans as tr +import video, correct, change_color +from UI import setsize, demo, SelectStyle, ChangeColor +from UI.BaseAdjustDialog import Ui_baseAdjustDialog + + +# qt图片转化为opencv +def qtpixmap_to_cvimg(qtpixmap): + qimg = qtpixmap.toImage() + temp_shape = (qimg.height(), qimg.bytesPerLine() * 8 // qimg.depth()) + temp_shape += (4,) + ptr = qimg.bits() + ptr.setsize(qimg.byteCount()) + result = np.array(ptr, dtype=np.uint8).reshape(temp_shape) + result = result[..., :3] + return result + + +# opencv图片转化为qt +def cvimg_to_qtimg(cvimg): + rows, columns, channels = cvimg.shape + bytesPerLine = channels * columns + pix = QImage(cvimg.data.tobytes(), columns, rows, bytesPerLine, QImage.Format_BGR888) + return QtGui.QPixmap(pix) + + +class MyWindow(QtWidgets.QMainWindow, demo.Ui_MainWindow): + def __init__(self): + super(MyWindow, self).__init__() + self.setupUi(self) + # 子窗口 + self.ChildDialog = ChildWin() + self.baseAdjustDialog = BaseAdjustDialog() + self.selectStyleDialog = SelectStyleDialog() + self.changeColorDialog = ChangeColorDialog() + + # 待处理图片 + self.Image = None + # 处理后图片 + self.Dest_Image = None + self.Tmp_Image = None + + # 定义触发信号 + self.actionopen.triggered.connect(self.openImage) + self.actionsave.triggered.connect(self.saveImage) + self.actiontansfer.triggered.connect(self.transferImage) + self.actionvideo.triggered.connect(self.openTransferVideo) + self.actionCorrect.triggered.connect(self.correct) + self.actioncorrect_2.triggered.connect(self.correct2) + self.actionChangeColor.triggered.connect(self.openChangeColor) + self.pushButton.clicked.connect(self.onClicked) + self.pushButton_2.clicked.connect(self.openBaseAdjustDialog) + self.pushButton_3.clicked.connect(self.toGray) + self.pushButton_4.clicked.connect(self.toBinary) + self.pushButton_5.clicked.connect(self.invert) + self.pushButton_6.clicked.connect(self.emboss) + self.pushButton_7.clicked.connect(self.canny) + self.pushButton_8.clicked.connect(self.blur) + self.pushButton_9.clicked.connect(self.sharpen) + self.pushButton_10.clicked.connect(self.rotate) + self.pushButton_11.clicked.connect(self.refresh) + + # 工具函数 + def saveAndShow(self, img): + if len(img.shape) == 2: + img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) + cv2.imwrite("result.jpg", img) + self.Dest_Image = img + tmp = cvimg_to_qtimg(img) + tmp = QtGui.QPixmap(tmp).scaled(self.src_image.width(), self.src_image.height(), Qt.KeepAspectRatio, + Qt.SmoothTransformation) + self.dest_image.setPixmap(tmp) + + # 定义槽函数 + # 打开图片 + def openImage(self): + self.src_image.setStyleSheet("") + img_name, img_type = QFileDialog.getOpenFileName(self, + "打开图片", + "", + " *.jpg *.png;;*.jpeg;;*.bmp;;All Files (*)") + if img_type: + # 利用qlabel(src_image)显示图片 + pix = QtGui.QPixmap(img_name).scaled(self.src_image.width(), self.src_image.height(), Qt.KeepAspectRatio, + Qt.SmoothTransformation) + pix_tmp = QtGui.QPixmap(img_name) + self.Image = qtpixmap_to_cvimg(pix_tmp) + self.Dest_Image = self.Image + self.src_image.setPixmap(pix) + self.dest_image.setPixmap(pix) + return + + # 保存图片 + def saveImage(self): + if self.Dest_Image is not None: + img_name, img_type = QFileDialog.getSaveFileName(self, "保存图片", "", "Images (*.png *.xpm *.jpg)") + if img_name: + cv2.imwrite(img_name, self.Dest_Image) + return + + # 风格迁移 + def transferImage(self): + if self.Dest_Image is None: + return + # 打开风格图片 + img_name, img_type = QFileDialog.getOpenFileName(self, + "选择风格图片", + "", + " *.jpg;;*.png;;*.jpeg;;*.bmp;;All Files (*)") + if img_type: + img = cv2.imread(img_name) + # 保存图片,然后调用程序 + cv2.imwrite("image/tmp_style.jpg", img) + if self.Dest_Image is not None: + cv2.imwrite("image/tmp_content.jpg", self.Dest_Image) + tr.run() + print("风格迁移完成!") + self.Dest_Image = cv2.imread("image/result.jpg") + tmp = QtGui.QPixmap("image/result.jpg").scaled(self.src_image.width(), self.src_image.height(), + Qt.KeepAspectRatio, + Qt.SmoothTransformation) + self.dest_image.setPixmap(tmp) + return + + # 打开视频风格迁移窗口 + def openTransferVideo(self): + self.selectStyleDialog.signal.connect(self.transferVideo) + self.selectStyleDialog.label.setPixmap(QtGui.QPixmap("image/1.jpg").scaled(256, 256, + Qt.KeepAspectRatio, + Qt.SmoothTransformation)) + self.selectStyleDialog.label_2.setPixmap(QtGui.QPixmap("image/2.jpg").scaled(256, 256, + Qt.KeepAspectRatio, + Qt.SmoothTransformation)) + self.selectStyleDialog.show() + + # 视频风格迁移 + def transferVideo(self, parameter): + video_name, video_type = QFileDialog.getOpenFileName(self, + "选择视频", + "", + " *.mp4;;*.avi;;All Files (*)") + if video_type: + print("视频正在生成。。。") + video.run(video_name, parameter) + print("视频生成完成,请在当前目录下查看!") + return + + # 打开图像缩放窗口 + def onClicked(self): + self.ChildDialog.show() + self.ChildDialog.signal.connect(self.getDataSetSize) + + # 获得子窗口数据并调整图片大小 + def getDataSetSize(self, parameter): + if self.Dest_Image is not None: + self.Dest_Image = cv2.resize(self.Dest_Image, (int(parameter[0]), int(parameter[1])), + interpolation=cv2.INTER_LINEAR) + img = cvimg_to_qtimg(self.Dest_Image) + self.dest_image.setPixmap(img) + + # 打开颜色变化窗口 + def openChangeColor(self): + self.changeColorDialog.dialogRejected.connect(self.openChangeColorRejected) + self.changeColorDialog.dialogAccepted.connect(self.openChangeColorAccepted) + self.changeColorDialog.signal.connect(self.changeColor) + self.changeColorDialog.show() + + def openChangeColorAccepted(self): + if self.Dest_Image is not None: + self.saveAndShow(self.Tmp_Image) + self.update() + + def openChangeColorRejected(self): + self.update() + + # 颜色变化 + def changeColor(self, parameter): + if self.Dest_Image is not None: + self.Tmp_Image = change_color.run(self.Dest_Image, parameter[0], parameter[1]) + self.update() + + # 打开图像调节窗口 + def openBaseAdjustDialog(self): + self.baseAdjustDialog.dialogRejected.connect(self.baseAdjustDialogRejected) + self.baseAdjustDialog.dialogAccepted.connect(self.baseAdjustDialogAccepted) + self.baseAdjustDialog.brightSliderReleased.connect(self.adjustBright) + self.baseAdjustDialog.warmSliderReleased.connect(self.adjustWarm) + self.baseAdjustDialog.saturabilitySliderReleased.connect(self.adjustSaturation) + self.baseAdjustDialog.contrastSliderReleased.connect(self.adjustContrast) + self.baseAdjustDialog.show() + + def baseAdjustDialogAccepted(self): + self.saveAndShow(self.Tmp_Image) + self.update() + + def baseAdjustDialogRejected(self): + self.update() + + # 对比度 + # 参考:https://blog.csdn.net/zhaitianbao/article/details/120107171 + def adjustContrast(self, percent): + if self.Dest_Image is None: + return + src = self.Dest_Image + # 计算对比度因子 + alpha = percent / 100.0 + alpha = max(-1.0, min(1.0, alpha)) + # 创建一个新的图片 + temp = src.copy() + row = src.shape[0] + col = src.shape[1] + thresh = 127 + for i in range(row): + for j in range(col): + b = src[i, j, 0] + g = src[i, j, 1] + r = src[i, j, 2] + if alpha == 1: + if r > thresh: + temp[i, j, 2] = 255 + else: + temp[i, j, 2] = 0 + if g > thresh: + temp[i, j, 1] = 255 + else: + temp[i, j, 1] = 0 + if b > thresh: + temp[i, j, 0] = 255 + else: + temp[i, j, 0] = 0 + continue + elif alpha >= 0: + newr = int(thresh + (r - thresh) / (1 - alpha)) + newg = int(thresh + (g - thresh) / (1 - alpha)) + newb = int(thresh + (b - thresh) / (1 - alpha)) + else: + newr = int(thresh + (r - thresh) * (1 + alpha)) + newg = int(thresh + (g - thresh) * (1 + alpha)) + newb = int(thresh + (b - thresh) * (1 + alpha)) + newr = max(0, min(255, newr)) + newg = max(0, min(255, newg)) + newb = max(0, min(255, newb)) + temp[i, j, 2] = newr + temp[i, j, 1] = newg + temp[i, j, 0] = newb + self.Tmp_Image = temp + self.update() + + def adjustBright(self, value): + if self.Dest_Image is None: + return + # 亮度调整公式为:new_image = old_image + brightness_factor + # brightness_factor = value * 2.55 + src = self.Dest_Image + src = src.astype(np.float32) + brightness_factor = value * 2.55 + new_image = src + brightness_factor + new_image = np.clip(new_image, 0, 255).astype(np.uint8) + self.Tmp_Image = new_image + self.update() + + def adjustWarm(self, value): + if self.Dest_Image is None: + return + # 饱和度调整公式为:new_image = (old_image - gray_image) * saturation_factor + gray_image + # saturation_factor = (value + 100) / 100 + # gray_image = 0.299 * R + 0.587 * G + 0.114 * B + src = self.Dest_Image + src = src.astype(np.float32) + saturation_factor = (value + 100) / 100 + gray_image = 0.299 * src[:, :, 2] + 0.587 * src[:, :, 1] + 0.114 * src[:, :, 0] + new_image = (src - gray_image[:, :, np.newaxis]) * saturation_factor + gray_image[:, :, np.newaxis] + new_image = np.clip(new_image, 0, 255).astype(np.uint8) + self.Tmp_Image = new_image + self.update() + + def adjustSaturation(self, value): + if self.Dest_Image is None: + return + src = self.Dest_Image + # 饱和度调整公式为:new_image = (old_image - gray_image) * saturation_factor + gray_image + # saturation_factor = (value + 100) / 100 + # gray_image = 0.299 * R + 0.587 * G + 0.114 * B + src = src.astype(np.float32) + saturation_factor = (value + 100) / 100 + gray_image = 0.299 * src[:, :, 2] + 0.587 * src[:, :, 1] + 0.114 * src[:, :, 0] + new_image = (src - gray_image[:, :, np.newaxis]) * saturation_factor + gray_image[:, :, np.newaxis] + new_image = np.clip(new_image, 0, 255).astype(np.uint8) + self.Tmp_Image = new_image + self.update() + + # 灰度化 + def toGray(self): + if self.Dest_Image is None: + return + gray = cv2.cvtColor(self.Dest_Image, cv2.COLOR_BGR2GRAY) + self.saveAndShow(gray) + + # 二值化 + def toBinary(self): + if self.Dest_Image is None: + return + gray = cv2.cvtColor(self.Dest_Image, cv2.COLOR_BGR2GRAY) + ret, thresh1 = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) + self.saveAndShow(thresh1) + + # 反相 + def invert(self): + if self.Dest_Image is None: + return + image = 255 - self.Dest_Image + self.saveAndShow(image) + + # 浮雕 + def emboss(self): + if self.Dest_Image is None: + return + src = self.Dest_Image + kernel = np.array([[-2, -1, 0], + [-1, 1, 1], + [0, 1, 2]]) + dst = cv2.filter2D(src, -1, kernel) + self.saveAndShow(dst) + + # 模糊 + def blur(self): + if self.Dest_Image is None: + return + src = self.Dest_Image + dst = cv2.GaussianBlur(src, (0, 0), sigmaX=15) + self.saveAndShow(dst) + + # 锐化 + def sharpen(self): + if self.Dest_Image is None: + return + src = self.Dest_Image + + kernel = np.array([[0, -1, 0], + [-1, 5, -1], + [0, -1, 0]]) + + dst = cv2.filter2D(src, -1, kernel) + + # blurImg = cv.GaussianBlur(src, (0, 0), 5) + # usm = cv.addWeighted(src, 1.5, blurImg, -0.5, 0) + self.saveAndShow(dst) + + # 边缘检测 + def canny(self): + if self.Dest_Image is None: + return + blurred = cv2.GaussianBlur(self.Dest_Image, (3, 3), 0, 0) + gray = cv2.cvtColor(blurred, cv2.COLOR_BGR2GRAY) + edges = cv2.Canny(gray, 50, 150) + self.saveAndShow(edges) + + # 旋转 + def rotate(self): + if self.Dest_Image is None: + return + image = self.Dest_Image + height, width = image.shape[:2] + center = (width / 2, height / 2) + rotate_matrix = cv2.getRotationMatrix2D(center=center, angle=90, scale=1) + rotated_image = cv2.warpAffine(src=image, M=rotate_matrix, dsize=(width, height)) + self.saveAndShow(rotated_image) + + # 刷新 + def refresh(self): + if self.Dest_Image is None: + return + self.saveAndShow(self.Image) + + # 证件矫正 + def correct(self): + if self.Dest_Image is None: + return + img = correct.runCard(self.Dest_Image) + self.saveAndShow(img) + + # 书页矫正 + def correct2(self): + if self.Dest_Image is None: + return + img = correct.runPaper(self.Dest_Image) + self.saveAndShow(img) + + +# 设置大小窗口 +class ChildWin(QtWidgets.QMainWindow, setsize.Ui_Dialog): + # 定义信号 + _signal = QtCore.pyqtSignal(list) + + def __init__(self): + super(ChildWin, self).__init__() + self.setupUi(self) + self.retranslateUi(self) + self.pushButton.clicked.connect(self.slot1) + + def slot1(self): + width = self.lineEdit.text() + height = self.lineEdit_2.text() + # 发送信号 + self._signal.emit([width, height]) + self.close() + + @property + def signal(self): + return self._signal + + +# 选择风格窗口 +class SelectStyleDialog(QtWidgets.QMainWindow, SelectStyle.Ui_dialog): + # 定义信号 + signal = QtCore.pyqtSignal(int) + + def __init__(self): + super(SelectStyleDialog, self).__init__() + self.setupUi(self) + self.retranslateUi(self) + self.pushButton.clicked.connect(self.slot1) + self.pushButton_2.clicked.connect(self.slot2) + + def slot1(self): + self.signal.emit(1) + self.close() + + def slot2(self): + self.signal.emit(2) + self.close() + + +# 选择颜色窗口 +class ChangeColorDialog(QtWidgets.QDialog, ChangeColor.Ui_Dialog): + # 定义信号 + signal_src = 'r' + signal_dst = 'w' + signal = QtCore.pyqtSignal(list) + dialogRejected = QtCore.pyqtSignal() + dialogAccepted = QtCore.pyqtSignal() + + def __init__(self): + super(ChangeColorDialog, self).__init__() + self.setupUi(self) + self.retranslateUi(self) + self.buttonBox.accepted.connect(self._dialogAccepted) + self.buttonBox.rejected.connect(self._dialogRejected) + + def getValue(self): + if self.checkBox.isChecked(): + self.signal_src = 'r' + elif self.checkBox_2.isChecked(): + self.signal_src = 'b' + elif self.checkBox_3.isChecked(): + self.signal_src = 'w' + + if self.checkBox_4.isChecked(): + self.signal_dst = 'r' + elif self.checkBox_5.isChecked(): + self.signal_dst = 'b' + elif self.checkBox_6.isChecked(): + self.signal_dst = 'w' + self.signal.emit([self.signal_src, self.signal_dst]) + self.close() + + def _dialogAccepted(self): + self.getValue() + self.dialogAccepted.emit() + + def _dialogRejected(self): + self.dialogRejected.emit() + + +# 图像调节窗口 +class BaseAdjustDialog(QtWidgets.QDialog, Ui_baseAdjustDialog): + brightSliderReleased = QtCore.pyqtSignal(object) + warmSliderReleased = QtCore.pyqtSignal(object) + saturabilitySliderReleased = QtCore.pyqtSignal(object) + contrastSliderReleased = QtCore.pyqtSignal(object) + + dialogRejected = QtCore.pyqtSignal() + dialogAccepted = QtCore.pyqtSignal() + + def __init__(self, *args, **kwargs): + super(BaseAdjustDialog, self).__init__(*args, **kwargs) + self.setupUi(self) + self.sliders = [self.brightSlider, self.saturabilitySlider, self.contrastSlider, self.warmSlider] + self.sliderLabels = [self.brightLabel, self.saturabilityLabel, self.contrastLabel, self.warmLabel] + self._establishConnections() + + def _establishConnections(self): + self.dialogBtnBox.accepted.connect(self._dialogAccepted) + self.dialogBtnBox.rejected.connect(self._dialogRejected) + [self._buildSliderConnected(slider) for slider in self.sliders] + self.brightSlider.sliderReleased.connect(self._brightSliderReleased) + self.warmSlider.sliderReleased.connect(self._warmSliderReleased) + self.saturabilitySlider.sliderReleased.connect(self._saturabilitySliderReleased) + self.contrastSlider.sliderReleased.connect(self._contrastSliderReleased) + + def _buildSliderConnected(self, slider): + slider.valueChanged.connect(partial(self._sliderValueChanged, slider)) + + def _sliderValueChanged(self, slider): + self.sliderLabels[self.sliders.index(slider)].setNum(slider.value()) + + def _brightSliderReleased(self): + brightValue = self.brightSlider.value() + self.brightLabel.setNum(brightValue) + self.brightSliderReleased.emit(brightValue) + + def _contrastSliderReleased(self): + contrastValue = self.contrastSlider.value() + self.contrastLabel.setNum(contrastValue) + self.contrastSliderReleased.emit(contrastValue) + + def _warmSliderReleased(self): + warmValue = self.warmSlider.value() + self.warmLabel.setNum(warmValue) + self.warmSliderReleased.emit(warmValue) + + def _saturabilitySliderReleased(self): + saturationValue = self.saturabilitySlider.value() + self.saturabilityLabel.setNum(saturationValue) + self.saturabilitySliderReleased.emit(saturationValue) + + def _dialogAccepted(self): + self.dialogAccepted.emit() + + def _dialogRejected(self): + self.dialogRejected.emit() + + +app = QtWidgets.QApplication(sys.argv) +window = MyWindow() +window.show() +sys.exit(app.exec_()) diff --git a/src/main.spec b/src/main.spec new file mode 100644 index 0000000..3901455 --- /dev/null +++ b/src/main.spec @@ -0,0 +1,50 @@ +# -*- mode: python ; coding: utf-8 -*- + + +block_cipher = None + + +a = Analysis( + ['main.py'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + noarchive=False, +) +pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) + +exe = EXE( + pyz, + a.scripts, + [], + exclude_binaries=True, + name='main', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) +coll = COLLECT( + exe, + a.binaries, + a.zipfiles, + a.datas, + strip=False, + upx=True, + upx_exclude=[], + name='main', +) diff --git a/src/original/card1.jpg b/src/original/card1.jpg new file mode 100644 index 0000000..19d801e Binary files /dev/null and b/src/original/card1.jpg differ diff --git a/src/original/city.jpg b/src/original/city.jpg new file mode 100644 index 0000000..b447ac2 Binary files /dev/null and b/src/original/city.jpg differ diff --git a/src/original/content1.jpg b/src/original/content1.jpg new file mode 100644 index 0000000..d4aabef Binary files /dev/null and b/src/original/content1.jpg differ diff --git a/src/original/content2.jpg b/src/original/content2.jpg new file mode 100644 index 0000000..dedc8a8 Binary files /dev/null and b/src/original/content2.jpg differ diff --git a/src/original/hangzhou.mp4 b/src/original/hangzhou.mp4 new file mode 100644 index 0000000..f2a6686 Binary files /dev/null and b/src/original/hangzhou.mp4 differ diff --git a/src/original/lwx.jpg b/src/original/lwx.jpg new file mode 100644 index 0000000..d832529 Binary files /dev/null and b/src/original/lwx.jpg differ diff --git a/src/original/paper.jpg b/src/original/paper.jpg new file mode 100644 index 0000000..76f19e4 Binary files /dev/null and b/src/original/paper.jpg differ diff --git a/src/original/屏幕截图 2023-07-01 220051.png b/src/original/屏幕截图 2023-07-01 220051.png new file mode 100644 index 0000000..c814166 Binary files /dev/null and b/src/original/屏幕截图 2023-07-01 220051.png differ diff --git a/src/requirements.txt b/src/requirements.txt new file mode 100644 index 0000000..4ec07f7 --- /dev/null +++ b/src/requirements.txt @@ -0,0 +1,28 @@ +certifi==2023.5.7 +charset-normalizer==3.1.0 +contourpy==1.0.7 +cycler==0.11.0 +filelock==3.12.0 +fonttools==4.40.0 +idna==3.4 +Jinja2==3.1.2 +kiwisolver==1.4.4 +MarkupSafe==2.1.2 +matplotlib==3.7.1 +mpmath==1.3.0 +networkx==3.1 +numpy==1.24.3 +opencv-python==4.7.0.72 +packaging==23.1 +Pillow==9.5.0 +pyparsing==3.0.9 +python-dateutil==2.8.2 +requests==2.30.0 +six==1.16.0 +sympy==1.12 +torch==2.0.1+cu118 +torchaudio==2.0.2+cu118 +torchvision==0.15.2 +typing_extensions==4.5.0 +urllib3==2.0.2 +pyqt5 diff --git a/src/result.avi b/src/result.avi new file mode 100644 index 0000000..8e162ce Binary files /dev/null and b/src/result.avi differ diff --git a/src/result.jpg b/src/result.jpg new file mode 100644 index 0000000..e1e34f3 Binary files /dev/null and b/src/result.jpg differ diff --git a/src/result/54.jpg b/src/result/54.jpg new file mode 100644 index 0000000..7a5cc50 Binary files /dev/null and b/src/result/54.jpg differ diff --git a/src/sample/sample1.avi b/src/sample/sample1.avi new file mode 100644 index 0000000..f2549fd Binary files /dev/null and b/src/sample/sample1.avi differ diff --git a/src/sample/sample2.avi b/src/sample/sample2.avi new file mode 100644 index 0000000..8e162ce Binary files /dev/null and b/src/sample/sample2.avi differ diff --git a/src/style.pth b/src/style.pth new file mode 100644 index 0000000..39db1dd Binary files /dev/null and b/src/style.pth differ diff --git a/src/style/style.jpg b/src/style/style.jpg new file mode 100644 index 0000000..f0f96b7 Binary files /dev/null and b/src/style/style.jpg differ diff --git a/src/style/style2.jpg b/src/style/style2.jpg new file mode 100644 index 0000000..5da3824 Binary files /dev/null and b/src/style/style2.jpg differ diff --git a/src/style/style3.jpg b/src/style/style3.jpg new file mode 100644 index 0000000..2fb108e Binary files /dev/null and b/src/style/style3.jpg differ diff --git a/src/style/style4.jpg b/src/style/style4.jpg new file mode 100644 index 0000000..181c5b6 Binary files /dev/null and b/src/style/style4.jpg differ diff --git a/src/style2.pth b/src/style2.pth new file mode 100644 index 0000000..4254e1e Binary files /dev/null and b/src/style2.pth differ diff --git a/src/train.py b/src/train.py new file mode 100644 index 0000000..efc816c --- /dev/null +++ b/src/train.py @@ -0,0 +1,116 @@ +import gc +import os +import datetime +import time + +import numpy as np +import torch +from torch.optim import Adam +from torch.utils.data import DataLoader +from torchvision import datasets +from torchvision.transforms import transforms +from Vgg16 import Vgg16 +from transfer import load_image +from transfer_net import TransformerNet + +IMAGENET_MEAN = [0.485, 0.456, 0.406] +IMAGENET_STD = [0.229, 0.224, 0.225] + + +# 格拉姆矩阵 +def gram_matrix(y): + (b, ch, h, w) = y.size() + features = y.view(b, ch, w * h) + features_t = features.transpose(1, 2) + gram = features.bmm(features_t) / (ch * h * w) + return gram + + +# 规范样本 +def normal_batch(batch): + mean = batch.new_tensor(IMAGENET_MEAN).view(-1, 1, 1) + std = batch.new_tensor(IMAGENET_STD).view(-1, 1, 1) + batch = batch.div_(255.0) + return (batch - mean) / std + + +def train(): + device = torch.device('cuda:0') + np.random.seed(42) + torch.manual_seed(42) + # 模型配置 + transform = transforms.Compose([ + transforms.Resize(256), + transforms.CenterCrop(256), + transforms.ToTensor(), + transforms.Lambda(lambda x: x.mul(255)) + ]) + train_dataset = datasets.ImageFolder(r"D:\images", transform) + train_loader = DataLoader(train_dataset, batch_size=8) + transformer = TransformerNet().to(device) + optimizer = Adam(transformer.parameters(), 1e-3) + mse_loss = torch.nn.MSELoss() + vgg = Vgg16(requires_grad=False).to(device) + # 风格配置 + style_transform = transforms.Compose([ + transforms.ToTensor(), + transforms.Lambda(lambda x: x.mul(255)) + ]) + style = load_image("./style/style3.jpg", size=256) + style = style_transform(style) + style = style.repeat(8, 1, 1, 1).to(device) + + feature_style = vgg(normal_batch(style)) + gram_style = [gram_matrix(y) for y in feature_style] + # 训练 + for e in range(2): + agg_content_loss = 0 + agg_style_loss = 0 + count = 0 + transformer.train() + for batch_id, (x, _) in enumerate(train_loader): + n_batch = len(x) + count += n_batch + optimizer.zero_grad() + + x = x.to(device) + y = transformer(x) + + y = normal_batch(y) + x = normal_batch(x) + + features_y = vgg(y) + features_x = vgg(x) + # 计算内容损失 + content_loss = 1e5 * mse_loss(features_y.relu2_2, features_x.relu2_2) + # 计算风格损失 + style_loss = 0 + for ft_y, gm_s in zip(features_y, gram_style): + gm_y = gram_matrix(ft_y) + style_loss += mse_loss(gm_y, gm_s[:n_batch, :, :]) + style_loss *= 1e10 + + total_loss = content_loss + style_loss + total_loss.backward() + optimizer.step() + + agg_content_loss += content_loss.item() + agg_style_loss += style_loss.item() + # 显示进度 + if (batch_id + 1) % 5 == 0: + mesg = "{}\tEpoch {}:\t[{}/{}]\tcontent: {:.6f}\tstyle: {:.6f}\ttotal: {:.6f}".format( + time.ctime(), e + 1, count, len(train_dataset), + agg_content_loss / (batch_id + 1), + agg_style_loss / (batch_id + 1), + (agg_content_loss + agg_style_loss) / (batch_id + 1) + ) + print(mesg) + + # 保存模型 + transformer.eval().cuda() + save_model_path = "style2.pth" + torch.save(transformer.state_dict(), save_model_path) + print("\nDone, trained model saved at", save_model_path) + + +train() diff --git a/src/transfer.py b/src/transfer.py new file mode 100644 index 0000000..dfaf02c --- /dev/null +++ b/src/transfer.py @@ -0,0 +1,47 @@ +import re + +import torch +from PIL import Image +from torchvision.transforms import transforms + +from transfer_net import TransformerNet + + +# 加载图片 +def load_image(filename, size=None, scale=None): + img = Image.open(filename).convert('RGB') + if size is not None: + img = img.resize((size, size), Image.ANTIALIAS) + elif scale is not None: + img = img.resize((int(img.size[0] / scale), int(img.size[1] / scale)), Image.ANTIALIAS) + return img + + +# 保存图片 +def save_image(filename, data): + img = data.cpu().clone().clamp(0, 255).numpy() + img = img.transpose(1, 2, 0).astype('uint8') + img = Image.fromarray(img) + img.save(filename) + + +# 图片处理 +def stylize(input_addr, output_addr, style_path): + content_image = load_image(input_addr) + content_transform = transforms.Compose([ + transforms.ToTensor(), + transforms.Lambda(lambda x: x.mul(255)) + ]) + + content_image = content_transform(content_image) + content_image = content_image.unsqueeze(0) + + with torch.no_grad(): + style_model = TransformerNet() + state_dict = torch.load(style_path) + for k in list(state_dict.keys()): + if re.search(r'in\d+\.running_(mean|var)$', k): + del state_dict[k] + style_model.load_state_dict(state_dict) + output = style_model(content_image.cuda()).cuda() + save_image(output_addr, output[0]) diff --git a/src/transfer_net.py b/src/transfer_net.py new file mode 100644 index 0000000..58c3960 --- /dev/null +++ b/src/transfer_net.py @@ -0,0 +1,90 @@ +import torch + + +class TransformerNet(torch.nn.Module): + def __init__(self): + super(TransformerNet, self).__init__() + # 初始化 convolution layers + self.conv1 = ConvLayer(3, 32, kernel_size=9, stride=1) + self.in1 = torch.nn.InstanceNorm2d(32, affine=True) + self.conv2 = ConvLayer(32, 64, kernel_size=3, stride=2) + self.in2 = torch.nn.InstanceNorm2d(64, affine=True) + self.conv3 = ConvLayer(64, 128, kernel_size=3, stride=2) + self.in3 = torch.nn.InstanceNorm2d(128, affine=True) + # 初始化 Residual layers + self.res1 = ResidualBlock(128) + self.res2 = ResidualBlock(128) + self.res3 = ResidualBlock(128) + self.res4 = ResidualBlock(128) + self.res5 = ResidualBlock(128) + # 初始化 Upsampling Layers + self.deconv1 = UpsampleConvLayer(128, 64, kernel_size=3, stride=1, upsample=2) + self.in4 = torch.nn.InstanceNorm2d(64, affine=True) + self.deconv2 = UpsampleConvLayer(64, 32, kernel_size=3, stride=1, upsample=2) + self.in5 = torch.nn.InstanceNorm2d(32, affine=True) + self.deconv3 = ConvLayer(32, 3, kernel_size=9, stride=1) + # Non-linearities + self.relu = torch.nn.ReLU() + + def forward(self, X): + y = self.relu(self.in1(self.conv1(X))) + y = self.relu(self.in2(self.conv2(y))) + y = self.relu(self.in3(self.conv3(y))) + y = self.res1(y) + y = self.res2(y) + y = self.res3(y) + y = self.res4(y) + y = self.res5(y) + y = self.relu(self.in4(self.deconv1(y))) + y = self.relu(self.in5(self.deconv2(y))) + y = self.deconv3(y) + return y + + +class ConvLayer(torch.nn.Module): + def __init__(self, in_channels, out_channels, kernel_size, stride): + super(ConvLayer, self).__init__() + reflection_padding = kernel_size // 2 + self.reflection_pad = torch.nn.ReflectionPad2d(reflection_padding) + self.conv2d = torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride) + + def forward(self, x): + out = self.reflection_pad(x) + out = self.conv2d(out) + return out + + +class ResidualBlock(torch.nn.Module): + + def __init__(self, channels): + super(ResidualBlock, self).__init__() + self.conv1 = ConvLayer(channels, channels, kernel_size=3, stride=1) + self.in1 = torch.nn.InstanceNorm2d(channels, affine=True) + self.conv2 = ConvLayer(channels, channels, kernel_size=3, stride=1) + self.in2 = torch.nn.InstanceNorm2d(channels, affine=True) + self.relu = torch.nn.ReLU() + + def forward(self, x): + residual = x + out = self.relu(self.in1(self.conv1(x))) + out = self.in2(self.conv2(out)) + out = out + residual + return out + + +class UpsampleConvLayer(torch.nn.Module): + + def __init__(self, in_channels, out_channels, kernel_size, stride, upsample=None): + super(UpsampleConvLayer, self).__init__() + self.upsample = upsample + reflection_padding = kernel_size // 2 + self.reflection_pad = torch.nn.ReflectionPad2d(reflection_padding) + self.conv2d = torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride) + + def forward(self, x): + x_in = x + if self.upsample: + x_in = torch.nn.functional.interpolate(x_in, mode='nearest', scale_factor=self.upsample) + out = self.reflection_pad(x_in) + out = self.conv2d(out) + return out \ No newline at end of file diff --git a/src/transfered/1.jpg b/src/transfered/1.jpg new file mode 100644 index 0000000..1f229c6 Binary files /dev/null and b/src/transfered/1.jpg differ diff --git a/src/transfered/10.jpg b/src/transfered/10.jpg new file mode 100644 index 0000000..86654c7 Binary files /dev/null and b/src/transfered/10.jpg differ diff --git a/src/transfered/100.jpg b/src/transfered/100.jpg new file mode 100644 index 0000000..215b96b Binary files /dev/null and b/src/transfered/100.jpg differ diff --git a/src/transfered/101.jpg b/src/transfered/101.jpg new file mode 100644 index 0000000..68c5527 Binary files /dev/null and b/src/transfered/101.jpg differ diff --git a/src/transfered/102.jpg b/src/transfered/102.jpg new file mode 100644 index 0000000..87d71c3 Binary files /dev/null and b/src/transfered/102.jpg differ diff --git a/src/transfered/103.jpg b/src/transfered/103.jpg new file mode 100644 index 0000000..3d0d61a Binary files /dev/null and b/src/transfered/103.jpg differ diff --git a/src/transfered/104.jpg b/src/transfered/104.jpg new file mode 100644 index 0000000..aa58560 Binary files /dev/null and b/src/transfered/104.jpg differ diff --git a/src/transfered/105.jpg b/src/transfered/105.jpg new file mode 100644 index 0000000..28b2a99 Binary files /dev/null and b/src/transfered/105.jpg differ diff --git a/src/transfered/106.jpg b/src/transfered/106.jpg new file mode 100644 index 0000000..1eeaf43 Binary files /dev/null and b/src/transfered/106.jpg differ diff --git a/src/transfered/107.jpg b/src/transfered/107.jpg new file mode 100644 index 0000000..7b3abd7 Binary files /dev/null and b/src/transfered/107.jpg differ diff --git a/src/transfered/108.jpg b/src/transfered/108.jpg new file mode 100644 index 0000000..6e7fbad Binary files /dev/null and b/src/transfered/108.jpg differ diff --git a/src/transfered/109.jpg b/src/transfered/109.jpg new file mode 100644 index 0000000..c412076 Binary files /dev/null and b/src/transfered/109.jpg differ diff --git a/src/transfered/11.jpg b/src/transfered/11.jpg new file mode 100644 index 0000000..65469cb Binary files /dev/null and b/src/transfered/11.jpg differ diff --git a/src/transfered/110.jpg b/src/transfered/110.jpg new file mode 100644 index 0000000..d645989 Binary files /dev/null and b/src/transfered/110.jpg differ diff --git a/src/transfered/111.jpg b/src/transfered/111.jpg new file mode 100644 index 0000000..5589d91 Binary files /dev/null and b/src/transfered/111.jpg differ diff --git a/src/transfered/112.jpg b/src/transfered/112.jpg new file mode 100644 index 0000000..766d3af Binary files /dev/null and b/src/transfered/112.jpg differ diff --git a/src/transfered/113.jpg b/src/transfered/113.jpg new file mode 100644 index 0000000..d02f78a Binary files /dev/null and b/src/transfered/113.jpg differ diff --git a/src/transfered/114.jpg b/src/transfered/114.jpg new file mode 100644 index 0000000..e74bc9d Binary files /dev/null and b/src/transfered/114.jpg differ diff --git a/src/transfered/115.jpg b/src/transfered/115.jpg new file mode 100644 index 0000000..4ea6c1b Binary files /dev/null and b/src/transfered/115.jpg differ diff --git a/src/transfered/116.jpg b/src/transfered/116.jpg new file mode 100644 index 0000000..eb7a65c Binary files /dev/null and b/src/transfered/116.jpg differ diff --git a/src/transfered/117.jpg b/src/transfered/117.jpg new file mode 100644 index 0000000..b86e793 Binary files /dev/null and b/src/transfered/117.jpg differ diff --git a/src/transfered/118.jpg b/src/transfered/118.jpg new file mode 100644 index 0000000..395e37f Binary files /dev/null and b/src/transfered/118.jpg differ diff --git a/src/transfered/119.jpg b/src/transfered/119.jpg new file mode 100644 index 0000000..b69cce2 Binary files /dev/null and b/src/transfered/119.jpg differ diff --git a/src/transfered/12.jpg b/src/transfered/12.jpg new file mode 100644 index 0000000..ea1e711 Binary files /dev/null and b/src/transfered/12.jpg differ diff --git a/src/transfered/120.jpg b/src/transfered/120.jpg new file mode 100644 index 0000000..f664dc7 Binary files /dev/null and b/src/transfered/120.jpg differ diff --git a/src/transfered/121.jpg b/src/transfered/121.jpg new file mode 100644 index 0000000..a397131 Binary files /dev/null and b/src/transfered/121.jpg differ diff --git a/src/transfered/122.jpg b/src/transfered/122.jpg new file mode 100644 index 0000000..3762ac3 Binary files /dev/null and b/src/transfered/122.jpg differ diff --git a/src/transfered/123.jpg b/src/transfered/123.jpg new file mode 100644 index 0000000..4593c7e Binary files /dev/null and b/src/transfered/123.jpg differ diff --git a/src/transfered/124.jpg b/src/transfered/124.jpg new file mode 100644 index 0000000..9d51eab Binary files /dev/null and b/src/transfered/124.jpg differ diff --git a/src/transfered/125.jpg b/src/transfered/125.jpg new file mode 100644 index 0000000..e3cf7e5 Binary files /dev/null and b/src/transfered/125.jpg differ diff --git a/src/transfered/126.jpg b/src/transfered/126.jpg new file mode 100644 index 0000000..e8f30ba Binary files /dev/null and b/src/transfered/126.jpg differ diff --git a/src/transfered/127.jpg b/src/transfered/127.jpg new file mode 100644 index 0000000..db96781 Binary files /dev/null and b/src/transfered/127.jpg differ diff --git a/src/transfered/128.jpg b/src/transfered/128.jpg new file mode 100644 index 0000000..6848d19 Binary files /dev/null and b/src/transfered/128.jpg differ diff --git a/src/transfered/129.jpg b/src/transfered/129.jpg new file mode 100644 index 0000000..12cebfe Binary files /dev/null and b/src/transfered/129.jpg differ diff --git a/src/transfered/13.jpg b/src/transfered/13.jpg new file mode 100644 index 0000000..3a7774b Binary files /dev/null and b/src/transfered/13.jpg differ diff --git a/src/transfered/130.jpg b/src/transfered/130.jpg new file mode 100644 index 0000000..9a7d23f Binary files /dev/null and b/src/transfered/130.jpg differ diff --git a/src/transfered/131.jpg b/src/transfered/131.jpg new file mode 100644 index 0000000..dffa8e1 Binary files /dev/null and b/src/transfered/131.jpg differ diff --git a/src/transfered/132.jpg b/src/transfered/132.jpg new file mode 100644 index 0000000..01e04d4 Binary files /dev/null and b/src/transfered/132.jpg differ diff --git a/src/transfered/133.jpg b/src/transfered/133.jpg new file mode 100644 index 0000000..df473e9 Binary files /dev/null and b/src/transfered/133.jpg differ diff --git a/src/transfered/134.jpg b/src/transfered/134.jpg new file mode 100644 index 0000000..0bae680 Binary files /dev/null and b/src/transfered/134.jpg differ diff --git a/src/transfered/135.jpg b/src/transfered/135.jpg new file mode 100644 index 0000000..d1aef92 Binary files /dev/null and b/src/transfered/135.jpg differ diff --git a/src/transfered/136.jpg b/src/transfered/136.jpg new file mode 100644 index 0000000..a4f4f10 Binary files /dev/null and b/src/transfered/136.jpg differ diff --git a/src/transfered/137.jpg b/src/transfered/137.jpg new file mode 100644 index 0000000..223f991 Binary files /dev/null and b/src/transfered/137.jpg differ diff --git a/src/transfered/138.jpg b/src/transfered/138.jpg new file mode 100644 index 0000000..118e85b Binary files /dev/null and b/src/transfered/138.jpg differ diff --git a/src/transfered/139.jpg b/src/transfered/139.jpg new file mode 100644 index 0000000..14d34f9 Binary files /dev/null and b/src/transfered/139.jpg differ diff --git a/src/transfered/14.jpg b/src/transfered/14.jpg new file mode 100644 index 0000000..76e4c22 Binary files /dev/null and b/src/transfered/14.jpg differ diff --git a/src/transfered/140.jpg b/src/transfered/140.jpg new file mode 100644 index 0000000..85f53af Binary files /dev/null and b/src/transfered/140.jpg differ diff --git a/src/transfered/141.jpg b/src/transfered/141.jpg new file mode 100644 index 0000000..2dff7c6 Binary files /dev/null and b/src/transfered/141.jpg differ diff --git a/src/transfered/142.jpg b/src/transfered/142.jpg new file mode 100644 index 0000000..6068eb3 Binary files /dev/null and b/src/transfered/142.jpg differ diff --git a/src/transfered/143.jpg b/src/transfered/143.jpg new file mode 100644 index 0000000..f238b4a Binary files /dev/null and b/src/transfered/143.jpg differ diff --git a/src/transfered/144.jpg b/src/transfered/144.jpg new file mode 100644 index 0000000..a9f5b23 Binary files /dev/null and b/src/transfered/144.jpg differ diff --git a/src/transfered/145.jpg b/src/transfered/145.jpg new file mode 100644 index 0000000..3b58d6f Binary files /dev/null and b/src/transfered/145.jpg differ diff --git a/src/transfered/146.jpg b/src/transfered/146.jpg new file mode 100644 index 0000000..d721280 Binary files /dev/null and b/src/transfered/146.jpg differ diff --git a/src/transfered/147.jpg b/src/transfered/147.jpg new file mode 100644 index 0000000..aabc6d9 Binary files /dev/null and b/src/transfered/147.jpg differ diff --git a/src/transfered/148.jpg b/src/transfered/148.jpg new file mode 100644 index 0000000..92f9135 Binary files /dev/null and b/src/transfered/148.jpg differ diff --git a/src/transfered/149.jpg b/src/transfered/149.jpg new file mode 100644 index 0000000..6f3a6da Binary files /dev/null and b/src/transfered/149.jpg differ diff --git a/src/transfered/15.jpg b/src/transfered/15.jpg new file mode 100644 index 0000000..c18922d Binary files /dev/null and b/src/transfered/15.jpg differ diff --git a/src/transfered/150.jpg b/src/transfered/150.jpg new file mode 100644 index 0000000..cd4bcb7 Binary files /dev/null and b/src/transfered/150.jpg differ diff --git a/src/transfered/151.jpg b/src/transfered/151.jpg new file mode 100644 index 0000000..9b77d15 Binary files /dev/null and b/src/transfered/151.jpg differ diff --git a/src/transfered/152.jpg b/src/transfered/152.jpg new file mode 100644 index 0000000..804a925 Binary files /dev/null and b/src/transfered/152.jpg differ diff --git a/src/transfered/153.jpg b/src/transfered/153.jpg new file mode 100644 index 0000000..8074716 Binary files /dev/null and b/src/transfered/153.jpg differ diff --git a/src/transfered/154.jpg b/src/transfered/154.jpg new file mode 100644 index 0000000..eafb3e9 Binary files /dev/null and b/src/transfered/154.jpg differ diff --git a/src/transfered/155.jpg b/src/transfered/155.jpg new file mode 100644 index 0000000..9e57aa6 Binary files /dev/null and b/src/transfered/155.jpg differ diff --git a/src/transfered/156.jpg b/src/transfered/156.jpg new file mode 100644 index 0000000..75f9846 Binary files /dev/null and b/src/transfered/156.jpg differ diff --git a/src/transfered/157.jpg b/src/transfered/157.jpg new file mode 100644 index 0000000..eb16ff4 Binary files /dev/null and b/src/transfered/157.jpg differ diff --git a/src/transfered/158.jpg b/src/transfered/158.jpg new file mode 100644 index 0000000..ac27c99 Binary files /dev/null and b/src/transfered/158.jpg differ diff --git a/src/transfered/159.jpg b/src/transfered/159.jpg new file mode 100644 index 0000000..584cd1a Binary files /dev/null and b/src/transfered/159.jpg differ diff --git a/src/transfered/16.jpg b/src/transfered/16.jpg new file mode 100644 index 0000000..4d61e2a Binary files /dev/null and b/src/transfered/16.jpg differ diff --git a/src/transfered/160.jpg b/src/transfered/160.jpg new file mode 100644 index 0000000..459b271 Binary files /dev/null and b/src/transfered/160.jpg differ diff --git a/src/transfered/161.jpg b/src/transfered/161.jpg new file mode 100644 index 0000000..2047fe5 Binary files /dev/null and b/src/transfered/161.jpg differ diff --git a/src/transfered/162.jpg b/src/transfered/162.jpg new file mode 100644 index 0000000..43a9a1b Binary files /dev/null and b/src/transfered/162.jpg differ diff --git a/src/transfered/163.jpg b/src/transfered/163.jpg new file mode 100644 index 0000000..d098578 Binary files /dev/null and b/src/transfered/163.jpg differ diff --git a/src/transfered/164.jpg b/src/transfered/164.jpg new file mode 100644 index 0000000..ae6d94c Binary files /dev/null and b/src/transfered/164.jpg differ diff --git a/src/transfered/165.jpg b/src/transfered/165.jpg new file mode 100644 index 0000000..7edcfec Binary files /dev/null and b/src/transfered/165.jpg differ diff --git a/src/transfered/166.jpg b/src/transfered/166.jpg new file mode 100644 index 0000000..52fca65 Binary files /dev/null and b/src/transfered/166.jpg differ diff --git a/src/transfered/167.jpg b/src/transfered/167.jpg new file mode 100644 index 0000000..ffd5843 Binary files /dev/null and b/src/transfered/167.jpg differ diff --git a/src/transfered/168.jpg b/src/transfered/168.jpg new file mode 100644 index 0000000..16af2db Binary files /dev/null and b/src/transfered/168.jpg differ diff --git a/src/transfered/169.jpg b/src/transfered/169.jpg new file mode 100644 index 0000000..a23d6d4 Binary files /dev/null and b/src/transfered/169.jpg differ diff --git a/src/transfered/17.jpg b/src/transfered/17.jpg new file mode 100644 index 0000000..204d47e Binary files /dev/null and b/src/transfered/17.jpg differ diff --git a/src/transfered/170.jpg b/src/transfered/170.jpg new file mode 100644 index 0000000..a3d72cf Binary files /dev/null and b/src/transfered/170.jpg differ diff --git a/src/transfered/171.jpg b/src/transfered/171.jpg new file mode 100644 index 0000000..3543e5b Binary files /dev/null and b/src/transfered/171.jpg differ diff --git a/src/transfered/172.jpg b/src/transfered/172.jpg new file mode 100644 index 0000000..1eff9fb Binary files /dev/null and b/src/transfered/172.jpg differ diff --git a/src/transfered/173.jpg b/src/transfered/173.jpg new file mode 100644 index 0000000..f35a0ce Binary files /dev/null and b/src/transfered/173.jpg differ diff --git a/src/transfered/174.jpg b/src/transfered/174.jpg new file mode 100644 index 0000000..f0f6992 Binary files /dev/null and b/src/transfered/174.jpg differ diff --git a/src/transfered/175.jpg b/src/transfered/175.jpg new file mode 100644 index 0000000..ccfb93d Binary files /dev/null and b/src/transfered/175.jpg differ diff --git a/src/transfered/176.jpg b/src/transfered/176.jpg new file mode 100644 index 0000000..d65e883 Binary files /dev/null and b/src/transfered/176.jpg differ diff --git a/src/transfered/177.jpg b/src/transfered/177.jpg new file mode 100644 index 0000000..6f69b0b Binary files /dev/null and b/src/transfered/177.jpg differ diff --git a/src/transfered/178.jpg b/src/transfered/178.jpg new file mode 100644 index 0000000..1ea8308 Binary files /dev/null and b/src/transfered/178.jpg differ diff --git a/src/transfered/179.jpg b/src/transfered/179.jpg new file mode 100644 index 0000000..ddc8263 Binary files /dev/null and b/src/transfered/179.jpg differ diff --git a/src/transfered/18.jpg b/src/transfered/18.jpg new file mode 100644 index 0000000..5a77a3a Binary files /dev/null and b/src/transfered/18.jpg differ diff --git a/src/transfered/180.jpg b/src/transfered/180.jpg new file mode 100644 index 0000000..5697454 Binary files /dev/null and b/src/transfered/180.jpg differ diff --git a/src/transfered/181.jpg b/src/transfered/181.jpg new file mode 100644 index 0000000..0a52439 Binary files /dev/null and b/src/transfered/181.jpg differ diff --git a/src/transfered/182.jpg b/src/transfered/182.jpg new file mode 100644 index 0000000..8284391 Binary files /dev/null and b/src/transfered/182.jpg differ diff --git a/src/transfered/183.jpg b/src/transfered/183.jpg new file mode 100644 index 0000000..ea7fa41 Binary files /dev/null and b/src/transfered/183.jpg differ diff --git a/src/transfered/184.jpg b/src/transfered/184.jpg new file mode 100644 index 0000000..5eed71d Binary files /dev/null and b/src/transfered/184.jpg differ diff --git a/src/transfered/185.jpg b/src/transfered/185.jpg new file mode 100644 index 0000000..b01145f Binary files /dev/null and b/src/transfered/185.jpg differ diff --git a/src/transfered/186.jpg b/src/transfered/186.jpg new file mode 100644 index 0000000..a5a0d87 Binary files /dev/null and b/src/transfered/186.jpg differ diff --git a/src/transfered/187.jpg b/src/transfered/187.jpg new file mode 100644 index 0000000..39c4f4b Binary files /dev/null and b/src/transfered/187.jpg differ diff --git a/src/transfered/188.jpg b/src/transfered/188.jpg new file mode 100644 index 0000000..095da36 Binary files /dev/null and b/src/transfered/188.jpg differ diff --git a/src/transfered/189.jpg b/src/transfered/189.jpg new file mode 100644 index 0000000..ef2c697 Binary files /dev/null and b/src/transfered/189.jpg differ diff --git a/src/transfered/19.jpg b/src/transfered/19.jpg new file mode 100644 index 0000000..cdb4e51 Binary files /dev/null and b/src/transfered/19.jpg differ diff --git a/src/transfered/190.jpg b/src/transfered/190.jpg new file mode 100644 index 0000000..9fa4665 Binary files /dev/null and b/src/transfered/190.jpg differ diff --git a/src/transfered/191.jpg b/src/transfered/191.jpg new file mode 100644 index 0000000..da1f32f Binary files /dev/null and b/src/transfered/191.jpg differ diff --git a/src/transfered/192.jpg b/src/transfered/192.jpg new file mode 100644 index 0000000..35a02e1 Binary files /dev/null and b/src/transfered/192.jpg differ diff --git a/src/transfered/193.jpg b/src/transfered/193.jpg new file mode 100644 index 0000000..1a074ab Binary files /dev/null and b/src/transfered/193.jpg differ diff --git a/src/transfered/194.jpg b/src/transfered/194.jpg new file mode 100644 index 0000000..7c66730 Binary files /dev/null and b/src/transfered/194.jpg differ diff --git a/src/transfered/195.jpg b/src/transfered/195.jpg new file mode 100644 index 0000000..1b83453 Binary files /dev/null and b/src/transfered/195.jpg differ diff --git a/src/transfered/196.jpg b/src/transfered/196.jpg new file mode 100644 index 0000000..3f0fe62 Binary files /dev/null and b/src/transfered/196.jpg differ diff --git a/src/transfered/197.jpg b/src/transfered/197.jpg new file mode 100644 index 0000000..26c2d3f Binary files /dev/null and b/src/transfered/197.jpg differ diff --git a/src/transfered/198.jpg b/src/transfered/198.jpg new file mode 100644 index 0000000..6d15081 Binary files /dev/null and b/src/transfered/198.jpg differ diff --git a/src/transfered/199.jpg b/src/transfered/199.jpg new file mode 100644 index 0000000..5bb20fd Binary files /dev/null and b/src/transfered/199.jpg differ diff --git a/src/transfered/2.jpg b/src/transfered/2.jpg new file mode 100644 index 0000000..52b312a Binary files /dev/null and b/src/transfered/2.jpg differ diff --git a/src/transfered/20.jpg b/src/transfered/20.jpg new file mode 100644 index 0000000..a65bd79 Binary files /dev/null and b/src/transfered/20.jpg differ diff --git a/src/transfered/200.jpg b/src/transfered/200.jpg new file mode 100644 index 0000000..7a0ae94 Binary files /dev/null and b/src/transfered/200.jpg differ diff --git a/src/transfered/201.jpg b/src/transfered/201.jpg new file mode 100644 index 0000000..c26435f Binary files /dev/null and b/src/transfered/201.jpg differ diff --git a/src/transfered/202.jpg b/src/transfered/202.jpg new file mode 100644 index 0000000..f3e6d88 Binary files /dev/null and b/src/transfered/202.jpg differ diff --git a/src/transfered/203.jpg b/src/transfered/203.jpg new file mode 100644 index 0000000..98447d6 Binary files /dev/null and b/src/transfered/203.jpg differ diff --git a/src/transfered/204.jpg b/src/transfered/204.jpg new file mode 100644 index 0000000..cf7ed3f Binary files /dev/null and b/src/transfered/204.jpg differ diff --git a/src/transfered/205.jpg b/src/transfered/205.jpg new file mode 100644 index 0000000..732ed7e Binary files /dev/null and b/src/transfered/205.jpg differ diff --git a/src/transfered/206.jpg b/src/transfered/206.jpg new file mode 100644 index 0000000..6149bf0 Binary files /dev/null and b/src/transfered/206.jpg differ diff --git a/src/transfered/207.jpg b/src/transfered/207.jpg new file mode 100644 index 0000000..4230bd0 Binary files /dev/null and b/src/transfered/207.jpg differ diff --git a/src/transfered/208.jpg b/src/transfered/208.jpg new file mode 100644 index 0000000..cc9f0cd Binary files /dev/null and b/src/transfered/208.jpg differ diff --git a/src/transfered/209.jpg b/src/transfered/209.jpg new file mode 100644 index 0000000..513de84 Binary files /dev/null and b/src/transfered/209.jpg differ diff --git a/src/transfered/21.jpg b/src/transfered/21.jpg new file mode 100644 index 0000000..5605b01 Binary files /dev/null and b/src/transfered/21.jpg differ diff --git a/src/transfered/210.jpg b/src/transfered/210.jpg new file mode 100644 index 0000000..9523168 Binary files /dev/null and b/src/transfered/210.jpg differ diff --git a/src/transfered/211.jpg b/src/transfered/211.jpg new file mode 100644 index 0000000..21e74a9 Binary files /dev/null and b/src/transfered/211.jpg differ diff --git a/src/transfered/212.jpg b/src/transfered/212.jpg new file mode 100644 index 0000000..116f306 Binary files /dev/null and b/src/transfered/212.jpg differ diff --git a/src/transfered/213.jpg b/src/transfered/213.jpg new file mode 100644 index 0000000..e63d10d Binary files /dev/null and b/src/transfered/213.jpg differ diff --git a/src/transfered/214.jpg b/src/transfered/214.jpg new file mode 100644 index 0000000..ecdfe99 Binary files /dev/null and b/src/transfered/214.jpg differ diff --git a/src/transfered/215.jpg b/src/transfered/215.jpg new file mode 100644 index 0000000..136568d Binary files /dev/null and b/src/transfered/215.jpg differ diff --git a/src/transfered/216.jpg b/src/transfered/216.jpg new file mode 100644 index 0000000..0392174 Binary files /dev/null and b/src/transfered/216.jpg differ diff --git a/src/transfered/217.jpg b/src/transfered/217.jpg new file mode 100644 index 0000000..e8844ab Binary files /dev/null and b/src/transfered/217.jpg differ diff --git a/src/transfered/218.jpg b/src/transfered/218.jpg new file mode 100644 index 0000000..0df204f Binary files /dev/null and b/src/transfered/218.jpg differ diff --git a/src/transfered/219.jpg b/src/transfered/219.jpg new file mode 100644 index 0000000..883186d Binary files /dev/null and b/src/transfered/219.jpg differ diff --git a/src/transfered/22.jpg b/src/transfered/22.jpg new file mode 100644 index 0000000..2e98413 Binary files /dev/null and b/src/transfered/22.jpg differ diff --git a/src/transfered/220.jpg b/src/transfered/220.jpg new file mode 100644 index 0000000..5b9fd95 Binary files /dev/null and b/src/transfered/220.jpg differ diff --git a/src/transfered/221.jpg b/src/transfered/221.jpg new file mode 100644 index 0000000..339e231 Binary files /dev/null and b/src/transfered/221.jpg differ diff --git a/src/transfered/222.jpg b/src/transfered/222.jpg new file mode 100644 index 0000000..96abf19 Binary files /dev/null and b/src/transfered/222.jpg differ diff --git a/src/transfered/223.jpg b/src/transfered/223.jpg new file mode 100644 index 0000000..cea09b4 Binary files /dev/null and b/src/transfered/223.jpg differ diff --git a/src/transfered/224.jpg b/src/transfered/224.jpg new file mode 100644 index 0000000..d4462b4 Binary files /dev/null and b/src/transfered/224.jpg differ diff --git a/src/transfered/225.jpg b/src/transfered/225.jpg new file mode 100644 index 0000000..152d01f Binary files /dev/null and b/src/transfered/225.jpg differ diff --git a/src/transfered/226.jpg b/src/transfered/226.jpg new file mode 100644 index 0000000..1e69b80 Binary files /dev/null and b/src/transfered/226.jpg differ diff --git a/src/transfered/227.jpg b/src/transfered/227.jpg new file mode 100644 index 0000000..a193098 Binary files /dev/null and b/src/transfered/227.jpg differ diff --git a/src/transfered/228.jpg b/src/transfered/228.jpg new file mode 100644 index 0000000..74ccbac Binary files /dev/null and b/src/transfered/228.jpg differ diff --git a/src/transfered/229.jpg b/src/transfered/229.jpg new file mode 100644 index 0000000..344f3c1 Binary files /dev/null and b/src/transfered/229.jpg differ diff --git a/src/transfered/23.jpg b/src/transfered/23.jpg new file mode 100644 index 0000000..97a47f7 Binary files /dev/null and b/src/transfered/23.jpg differ diff --git a/src/transfered/230.jpg b/src/transfered/230.jpg new file mode 100644 index 0000000..d1e0c5c Binary files /dev/null and b/src/transfered/230.jpg differ diff --git a/src/transfered/231.jpg b/src/transfered/231.jpg new file mode 100644 index 0000000..6da04d2 Binary files /dev/null and b/src/transfered/231.jpg differ diff --git a/src/transfered/232.jpg b/src/transfered/232.jpg new file mode 100644 index 0000000..1d9a2a1 Binary files /dev/null and b/src/transfered/232.jpg differ diff --git a/src/transfered/233.jpg b/src/transfered/233.jpg new file mode 100644 index 0000000..7c6c3b1 Binary files /dev/null and b/src/transfered/233.jpg differ diff --git a/src/transfered/234.jpg b/src/transfered/234.jpg new file mode 100644 index 0000000..87f56fd Binary files /dev/null and b/src/transfered/234.jpg differ diff --git a/src/transfered/235.jpg b/src/transfered/235.jpg new file mode 100644 index 0000000..e927f86 Binary files /dev/null and b/src/transfered/235.jpg differ diff --git a/src/transfered/236.jpg b/src/transfered/236.jpg new file mode 100644 index 0000000..449beac Binary files /dev/null and b/src/transfered/236.jpg differ diff --git a/src/transfered/237.jpg b/src/transfered/237.jpg new file mode 100644 index 0000000..eefb021 Binary files /dev/null and b/src/transfered/237.jpg differ diff --git a/src/transfered/238.jpg b/src/transfered/238.jpg new file mode 100644 index 0000000..2e4bc40 Binary files /dev/null and b/src/transfered/238.jpg differ diff --git a/src/transfered/239.jpg b/src/transfered/239.jpg new file mode 100644 index 0000000..2d500ae Binary files /dev/null and b/src/transfered/239.jpg differ diff --git a/src/transfered/24.jpg b/src/transfered/24.jpg new file mode 100644 index 0000000..0e06b42 Binary files /dev/null and b/src/transfered/24.jpg differ diff --git a/src/transfered/240.jpg b/src/transfered/240.jpg new file mode 100644 index 0000000..6f21b5a Binary files /dev/null and b/src/transfered/240.jpg differ diff --git a/src/transfered/241.jpg b/src/transfered/241.jpg new file mode 100644 index 0000000..61ccf2d Binary files /dev/null and b/src/transfered/241.jpg differ diff --git a/src/transfered/242.jpg b/src/transfered/242.jpg new file mode 100644 index 0000000..f5acb29 Binary files /dev/null and b/src/transfered/242.jpg differ diff --git a/src/transfered/243.jpg b/src/transfered/243.jpg new file mode 100644 index 0000000..4b46225 Binary files /dev/null and b/src/transfered/243.jpg differ diff --git a/src/transfered/244.jpg b/src/transfered/244.jpg new file mode 100644 index 0000000..256e8aa Binary files /dev/null and b/src/transfered/244.jpg differ diff --git a/src/transfered/245.jpg b/src/transfered/245.jpg new file mode 100644 index 0000000..3d78b1e Binary files /dev/null and b/src/transfered/245.jpg differ diff --git a/src/transfered/246.jpg b/src/transfered/246.jpg new file mode 100644 index 0000000..9a69dfc Binary files /dev/null and b/src/transfered/246.jpg differ diff --git a/src/transfered/247.jpg b/src/transfered/247.jpg new file mode 100644 index 0000000..979ae27 Binary files /dev/null and b/src/transfered/247.jpg differ diff --git a/src/transfered/248.jpg b/src/transfered/248.jpg new file mode 100644 index 0000000..ce9f1d7 Binary files /dev/null and b/src/transfered/248.jpg differ diff --git a/src/transfered/249.jpg b/src/transfered/249.jpg new file mode 100644 index 0000000..114e608 Binary files /dev/null and b/src/transfered/249.jpg differ diff --git a/src/transfered/25.jpg b/src/transfered/25.jpg new file mode 100644 index 0000000..181f9f5 Binary files /dev/null and b/src/transfered/25.jpg differ diff --git a/src/transfered/250.jpg b/src/transfered/250.jpg new file mode 100644 index 0000000..f7d0ef7 Binary files /dev/null and b/src/transfered/250.jpg differ diff --git a/src/transfered/251.jpg b/src/transfered/251.jpg new file mode 100644 index 0000000..ebb7bbc Binary files /dev/null and b/src/transfered/251.jpg differ diff --git a/src/transfered/252.jpg b/src/transfered/252.jpg new file mode 100644 index 0000000..b442df8 Binary files /dev/null and b/src/transfered/252.jpg differ diff --git a/src/transfered/253.jpg b/src/transfered/253.jpg new file mode 100644 index 0000000..b3df05b Binary files /dev/null and b/src/transfered/253.jpg differ diff --git a/src/transfered/254.jpg b/src/transfered/254.jpg new file mode 100644 index 0000000..0035778 Binary files /dev/null and b/src/transfered/254.jpg differ diff --git a/src/transfered/255.jpg b/src/transfered/255.jpg new file mode 100644 index 0000000..e9197d4 Binary files /dev/null and b/src/transfered/255.jpg differ diff --git a/src/transfered/256.jpg b/src/transfered/256.jpg new file mode 100644 index 0000000..e7d528e Binary files /dev/null and b/src/transfered/256.jpg differ diff --git a/src/transfered/257.jpg b/src/transfered/257.jpg new file mode 100644 index 0000000..6826330 Binary files /dev/null and b/src/transfered/257.jpg differ diff --git a/src/transfered/258.jpg b/src/transfered/258.jpg new file mode 100644 index 0000000..4281fd3 Binary files /dev/null and b/src/transfered/258.jpg differ diff --git a/src/transfered/259.jpg b/src/transfered/259.jpg new file mode 100644 index 0000000..10cbde1 Binary files /dev/null and b/src/transfered/259.jpg differ diff --git a/src/transfered/26.jpg b/src/transfered/26.jpg new file mode 100644 index 0000000..257ebe3 Binary files /dev/null and b/src/transfered/26.jpg differ diff --git a/src/transfered/260.jpg b/src/transfered/260.jpg new file mode 100644 index 0000000..493231b Binary files /dev/null and b/src/transfered/260.jpg differ diff --git a/src/transfered/261.jpg b/src/transfered/261.jpg new file mode 100644 index 0000000..8e4fc5c Binary files /dev/null and b/src/transfered/261.jpg differ diff --git a/src/transfered/262.jpg b/src/transfered/262.jpg new file mode 100644 index 0000000..05c7e83 Binary files /dev/null and b/src/transfered/262.jpg differ diff --git a/src/transfered/263.jpg b/src/transfered/263.jpg new file mode 100644 index 0000000..4c9cf0b Binary files /dev/null and b/src/transfered/263.jpg differ diff --git a/src/transfered/264.jpg b/src/transfered/264.jpg new file mode 100644 index 0000000..6b38b71 Binary files /dev/null and b/src/transfered/264.jpg differ diff --git a/src/transfered/265.jpg b/src/transfered/265.jpg new file mode 100644 index 0000000..b6c2e99 Binary files /dev/null and b/src/transfered/265.jpg differ diff --git a/src/transfered/266.jpg b/src/transfered/266.jpg new file mode 100644 index 0000000..d7b660f Binary files /dev/null and b/src/transfered/266.jpg differ diff --git a/src/transfered/267.jpg b/src/transfered/267.jpg new file mode 100644 index 0000000..8013a9d Binary files /dev/null and b/src/transfered/267.jpg differ diff --git a/src/transfered/268.jpg b/src/transfered/268.jpg new file mode 100644 index 0000000..f188802 Binary files /dev/null and b/src/transfered/268.jpg differ diff --git a/src/transfered/269.jpg b/src/transfered/269.jpg new file mode 100644 index 0000000..f45b412 Binary files /dev/null and b/src/transfered/269.jpg differ diff --git a/src/transfered/27.jpg b/src/transfered/27.jpg new file mode 100644 index 0000000..80d4107 Binary files /dev/null and b/src/transfered/27.jpg differ diff --git a/src/transfered/270.jpg b/src/transfered/270.jpg new file mode 100644 index 0000000..6e9f786 Binary files /dev/null and b/src/transfered/270.jpg differ diff --git a/src/transfered/271.jpg b/src/transfered/271.jpg new file mode 100644 index 0000000..a25a8f1 Binary files /dev/null and b/src/transfered/271.jpg differ diff --git a/src/transfered/272.jpg b/src/transfered/272.jpg new file mode 100644 index 0000000..65c4f5c Binary files /dev/null and b/src/transfered/272.jpg differ diff --git a/src/transfered/273.jpg b/src/transfered/273.jpg new file mode 100644 index 0000000..9bf989e Binary files /dev/null and b/src/transfered/273.jpg differ diff --git a/src/transfered/274.jpg b/src/transfered/274.jpg new file mode 100644 index 0000000..d3460ed Binary files /dev/null and b/src/transfered/274.jpg differ diff --git a/src/transfered/275.jpg b/src/transfered/275.jpg new file mode 100644 index 0000000..fbe6083 Binary files /dev/null and b/src/transfered/275.jpg differ diff --git a/src/transfered/276.jpg b/src/transfered/276.jpg new file mode 100644 index 0000000..6f79127 Binary files /dev/null and b/src/transfered/276.jpg differ diff --git a/src/transfered/277.jpg b/src/transfered/277.jpg new file mode 100644 index 0000000..ca9b5bf Binary files /dev/null and b/src/transfered/277.jpg differ diff --git a/src/transfered/278.jpg b/src/transfered/278.jpg new file mode 100644 index 0000000..224c703 Binary files /dev/null and b/src/transfered/278.jpg differ diff --git a/src/transfered/279.jpg b/src/transfered/279.jpg new file mode 100644 index 0000000..eec02e0 Binary files /dev/null and b/src/transfered/279.jpg differ diff --git a/src/transfered/28.jpg b/src/transfered/28.jpg new file mode 100644 index 0000000..f17aa69 Binary files /dev/null and b/src/transfered/28.jpg differ diff --git a/src/transfered/280.jpg b/src/transfered/280.jpg new file mode 100644 index 0000000..1930610 Binary files /dev/null and b/src/transfered/280.jpg differ diff --git a/src/transfered/29.jpg b/src/transfered/29.jpg new file mode 100644 index 0000000..d37dd88 Binary files /dev/null and b/src/transfered/29.jpg differ diff --git a/src/transfered/3.jpg b/src/transfered/3.jpg new file mode 100644 index 0000000..0b4caa0 Binary files /dev/null and b/src/transfered/3.jpg differ diff --git a/src/transfered/30.jpg b/src/transfered/30.jpg new file mode 100644 index 0000000..331c324 Binary files /dev/null and b/src/transfered/30.jpg differ diff --git a/src/transfered/31.jpg b/src/transfered/31.jpg new file mode 100644 index 0000000..e8c2b20 Binary files /dev/null and b/src/transfered/31.jpg differ diff --git a/src/transfered/32.jpg b/src/transfered/32.jpg new file mode 100644 index 0000000..d122ca2 Binary files /dev/null and b/src/transfered/32.jpg differ diff --git a/src/transfered/33.jpg b/src/transfered/33.jpg new file mode 100644 index 0000000..6a0ccf2 Binary files /dev/null and b/src/transfered/33.jpg differ diff --git a/src/transfered/34.jpg b/src/transfered/34.jpg new file mode 100644 index 0000000..2d7e217 Binary files /dev/null and b/src/transfered/34.jpg differ diff --git a/src/transfered/35.jpg b/src/transfered/35.jpg new file mode 100644 index 0000000..f1bf810 Binary files /dev/null and b/src/transfered/35.jpg differ diff --git a/src/transfered/36.jpg b/src/transfered/36.jpg new file mode 100644 index 0000000..937c499 Binary files /dev/null and b/src/transfered/36.jpg differ diff --git a/src/transfered/37.jpg b/src/transfered/37.jpg new file mode 100644 index 0000000..991e66d Binary files /dev/null and b/src/transfered/37.jpg differ diff --git a/src/transfered/38.jpg b/src/transfered/38.jpg new file mode 100644 index 0000000..cda9758 Binary files /dev/null and b/src/transfered/38.jpg differ diff --git a/src/transfered/39.jpg b/src/transfered/39.jpg new file mode 100644 index 0000000..191105a Binary files /dev/null and b/src/transfered/39.jpg differ diff --git a/src/transfered/4.jpg b/src/transfered/4.jpg new file mode 100644 index 0000000..f993823 Binary files /dev/null and b/src/transfered/4.jpg differ diff --git a/src/transfered/40.jpg b/src/transfered/40.jpg new file mode 100644 index 0000000..c7b4ee2 Binary files /dev/null and b/src/transfered/40.jpg differ diff --git a/src/transfered/41.jpg b/src/transfered/41.jpg new file mode 100644 index 0000000..6ca0c15 Binary files /dev/null and b/src/transfered/41.jpg differ diff --git a/src/transfered/42.jpg b/src/transfered/42.jpg new file mode 100644 index 0000000..dcaa34e Binary files /dev/null and b/src/transfered/42.jpg differ diff --git a/src/transfered/43.jpg b/src/transfered/43.jpg new file mode 100644 index 0000000..f0dc3f0 Binary files /dev/null and b/src/transfered/43.jpg differ diff --git a/src/transfered/44.jpg b/src/transfered/44.jpg new file mode 100644 index 0000000..49177e7 Binary files /dev/null and b/src/transfered/44.jpg differ diff --git a/src/transfered/45.jpg b/src/transfered/45.jpg new file mode 100644 index 0000000..7280ece Binary files /dev/null and b/src/transfered/45.jpg differ diff --git a/src/transfered/46.jpg b/src/transfered/46.jpg new file mode 100644 index 0000000..ed95dbc Binary files /dev/null and b/src/transfered/46.jpg differ diff --git a/src/transfered/47.jpg b/src/transfered/47.jpg new file mode 100644 index 0000000..e517f86 Binary files /dev/null and b/src/transfered/47.jpg differ diff --git a/src/transfered/48.jpg b/src/transfered/48.jpg new file mode 100644 index 0000000..68174ca Binary files /dev/null and b/src/transfered/48.jpg differ diff --git a/src/transfered/49.jpg b/src/transfered/49.jpg new file mode 100644 index 0000000..97e5884 Binary files /dev/null and b/src/transfered/49.jpg differ diff --git a/src/transfered/5.jpg b/src/transfered/5.jpg new file mode 100644 index 0000000..7c8928e Binary files /dev/null and b/src/transfered/5.jpg differ diff --git a/src/transfered/50.jpg b/src/transfered/50.jpg new file mode 100644 index 0000000..303ea5c Binary files /dev/null and b/src/transfered/50.jpg differ diff --git a/src/transfered/51.jpg b/src/transfered/51.jpg new file mode 100644 index 0000000..d697ef2 Binary files /dev/null and b/src/transfered/51.jpg differ diff --git a/src/transfered/52.jpg b/src/transfered/52.jpg new file mode 100644 index 0000000..ccab411 Binary files /dev/null and b/src/transfered/52.jpg differ diff --git a/src/transfered/53.jpg b/src/transfered/53.jpg new file mode 100644 index 0000000..cc9b3f7 Binary files /dev/null and b/src/transfered/53.jpg differ diff --git a/src/transfered/54.jpg b/src/transfered/54.jpg new file mode 100644 index 0000000..11c700e Binary files /dev/null and b/src/transfered/54.jpg differ diff --git a/src/transfered/55.jpg b/src/transfered/55.jpg new file mode 100644 index 0000000..6f1131d Binary files /dev/null and b/src/transfered/55.jpg differ diff --git a/src/transfered/56.jpg b/src/transfered/56.jpg new file mode 100644 index 0000000..594b62c Binary files /dev/null and b/src/transfered/56.jpg differ diff --git a/src/transfered/57.jpg b/src/transfered/57.jpg new file mode 100644 index 0000000..b30d0d4 Binary files /dev/null and b/src/transfered/57.jpg differ diff --git a/src/transfered/58.jpg b/src/transfered/58.jpg new file mode 100644 index 0000000..ccafbf6 Binary files /dev/null and b/src/transfered/58.jpg differ diff --git a/src/transfered/59.jpg b/src/transfered/59.jpg new file mode 100644 index 0000000..e3b5d0c Binary files /dev/null and b/src/transfered/59.jpg differ diff --git a/src/transfered/6.jpg b/src/transfered/6.jpg new file mode 100644 index 0000000..5189bac Binary files /dev/null and b/src/transfered/6.jpg differ diff --git a/src/transfered/60.jpg b/src/transfered/60.jpg new file mode 100644 index 0000000..7c5a5ca Binary files /dev/null and b/src/transfered/60.jpg differ diff --git a/src/transfered/61.jpg b/src/transfered/61.jpg new file mode 100644 index 0000000..120b15a Binary files /dev/null and b/src/transfered/61.jpg differ diff --git a/src/transfered/62.jpg b/src/transfered/62.jpg new file mode 100644 index 0000000..d8bacd5 Binary files /dev/null and b/src/transfered/62.jpg differ diff --git a/src/transfered/63.jpg b/src/transfered/63.jpg new file mode 100644 index 0000000..1fd4849 Binary files /dev/null and b/src/transfered/63.jpg differ diff --git a/src/transfered/64.jpg b/src/transfered/64.jpg new file mode 100644 index 0000000..99e7a85 Binary files /dev/null and b/src/transfered/64.jpg differ diff --git a/src/transfered/65.jpg b/src/transfered/65.jpg new file mode 100644 index 0000000..fa004e1 Binary files /dev/null and b/src/transfered/65.jpg differ diff --git a/src/transfered/66.jpg b/src/transfered/66.jpg new file mode 100644 index 0000000..5a7ab75 Binary files /dev/null and b/src/transfered/66.jpg differ diff --git a/src/transfered/67.jpg b/src/transfered/67.jpg new file mode 100644 index 0000000..8a9815f Binary files /dev/null and b/src/transfered/67.jpg differ diff --git a/src/transfered/68.jpg b/src/transfered/68.jpg new file mode 100644 index 0000000..a130a05 Binary files /dev/null and b/src/transfered/68.jpg differ diff --git a/src/transfered/69.jpg b/src/transfered/69.jpg new file mode 100644 index 0000000..dfd9f57 Binary files /dev/null and b/src/transfered/69.jpg differ diff --git a/src/transfered/7.jpg b/src/transfered/7.jpg new file mode 100644 index 0000000..6d2a1cd Binary files /dev/null and b/src/transfered/7.jpg differ diff --git a/src/transfered/70.jpg b/src/transfered/70.jpg new file mode 100644 index 0000000..11ce7a0 Binary files /dev/null and b/src/transfered/70.jpg differ diff --git a/src/transfered/71.jpg b/src/transfered/71.jpg new file mode 100644 index 0000000..d60e7b5 Binary files /dev/null and b/src/transfered/71.jpg differ diff --git a/src/transfered/72.jpg b/src/transfered/72.jpg new file mode 100644 index 0000000..653e69d Binary files /dev/null and b/src/transfered/72.jpg differ diff --git a/src/transfered/73.jpg b/src/transfered/73.jpg new file mode 100644 index 0000000..35382f0 Binary files /dev/null and b/src/transfered/73.jpg differ diff --git a/src/transfered/74.jpg b/src/transfered/74.jpg new file mode 100644 index 0000000..a0d90ef Binary files /dev/null and b/src/transfered/74.jpg differ diff --git a/src/transfered/75.jpg b/src/transfered/75.jpg new file mode 100644 index 0000000..cc51965 Binary files /dev/null and b/src/transfered/75.jpg differ diff --git a/src/transfered/76.jpg b/src/transfered/76.jpg new file mode 100644 index 0000000..aff6e0d Binary files /dev/null and b/src/transfered/76.jpg differ diff --git a/src/transfered/77.jpg b/src/transfered/77.jpg new file mode 100644 index 0000000..6da63cb Binary files /dev/null and b/src/transfered/77.jpg differ diff --git a/src/transfered/78.jpg b/src/transfered/78.jpg new file mode 100644 index 0000000..ebdeba0 Binary files /dev/null and b/src/transfered/78.jpg differ diff --git a/src/transfered/79.jpg b/src/transfered/79.jpg new file mode 100644 index 0000000..4007397 Binary files /dev/null and b/src/transfered/79.jpg differ diff --git a/src/transfered/8.jpg b/src/transfered/8.jpg new file mode 100644 index 0000000..6fc83c2 Binary files /dev/null and b/src/transfered/8.jpg differ diff --git a/src/transfered/80.jpg b/src/transfered/80.jpg new file mode 100644 index 0000000..8e0b093 Binary files /dev/null and b/src/transfered/80.jpg differ diff --git a/src/transfered/81.jpg b/src/transfered/81.jpg new file mode 100644 index 0000000..64dbfb3 Binary files /dev/null and b/src/transfered/81.jpg differ diff --git a/src/transfered/82.jpg b/src/transfered/82.jpg new file mode 100644 index 0000000..cf3f503 Binary files /dev/null and b/src/transfered/82.jpg differ diff --git a/src/transfered/83.jpg b/src/transfered/83.jpg new file mode 100644 index 0000000..8b37ef8 Binary files /dev/null and b/src/transfered/83.jpg differ diff --git a/src/transfered/84.jpg b/src/transfered/84.jpg new file mode 100644 index 0000000..1849074 Binary files /dev/null and b/src/transfered/84.jpg differ diff --git a/src/transfered/85.jpg b/src/transfered/85.jpg new file mode 100644 index 0000000..f362a32 Binary files /dev/null and b/src/transfered/85.jpg differ diff --git a/src/transfered/86.jpg b/src/transfered/86.jpg new file mode 100644 index 0000000..4888f75 Binary files /dev/null and b/src/transfered/86.jpg differ diff --git a/src/transfered/87.jpg b/src/transfered/87.jpg new file mode 100644 index 0000000..d7a166d Binary files /dev/null and b/src/transfered/87.jpg differ diff --git a/src/transfered/88.jpg b/src/transfered/88.jpg new file mode 100644 index 0000000..619f7aa Binary files /dev/null and b/src/transfered/88.jpg differ diff --git a/src/transfered/89.jpg b/src/transfered/89.jpg new file mode 100644 index 0000000..7cbca5e Binary files /dev/null and b/src/transfered/89.jpg differ diff --git a/src/transfered/9.jpg b/src/transfered/9.jpg new file mode 100644 index 0000000..c6be83e Binary files /dev/null and b/src/transfered/9.jpg differ diff --git a/src/transfered/90.jpg b/src/transfered/90.jpg new file mode 100644 index 0000000..c417d60 Binary files /dev/null and b/src/transfered/90.jpg differ diff --git a/src/transfered/91.jpg b/src/transfered/91.jpg new file mode 100644 index 0000000..11a6868 Binary files /dev/null and b/src/transfered/91.jpg differ diff --git a/src/transfered/92.jpg b/src/transfered/92.jpg new file mode 100644 index 0000000..dc44bf0 Binary files /dev/null and b/src/transfered/92.jpg differ diff --git a/src/transfered/93.jpg b/src/transfered/93.jpg new file mode 100644 index 0000000..385954e Binary files /dev/null and b/src/transfered/93.jpg differ diff --git a/src/transfered/94.jpg b/src/transfered/94.jpg new file mode 100644 index 0000000..6f7b1e1 Binary files /dev/null and b/src/transfered/94.jpg differ diff --git a/src/transfered/95.jpg b/src/transfered/95.jpg new file mode 100644 index 0000000..4e280ee Binary files /dev/null and b/src/transfered/95.jpg differ diff --git a/src/transfered/96.jpg b/src/transfered/96.jpg new file mode 100644 index 0000000..0700a37 Binary files /dev/null and b/src/transfered/96.jpg differ diff --git a/src/transfered/97.jpg b/src/transfered/97.jpg new file mode 100644 index 0000000..952c0ed Binary files /dev/null and b/src/transfered/97.jpg differ diff --git a/src/transfered/98.jpg b/src/transfered/98.jpg new file mode 100644 index 0000000..71cae60 Binary files /dev/null and b/src/transfered/98.jpg differ diff --git a/src/transfered/99.jpg b/src/transfered/99.jpg new file mode 100644 index 0000000..c12288f Binary files /dev/null and b/src/transfered/99.jpg differ diff --git a/src/video.py b/src/video.py new file mode 100644 index 0000000..55f9a8e --- /dev/null +++ b/src/video.py @@ -0,0 +1,53 @@ +import os + +import cv2 + +from transfer import stylize + +# 保存图片 +def save_image(image, addr, num): + address = addr + str(num) + '.jpg' + image = cv2.resize(image, (512, 512)) + cv2.imwrite(address, image) + + +def run(original_path, style_type): + # 获取初始和目标地址 + # original_path = "./original/hangzhou.mp4" + post_path = "result.avi" + + videoCapture = cv2.VideoCapture(original_path) + # 把视频转换为图片 + success, frame = videoCapture.read() + i = 0 + while success: + i = i + 1 + save_image(frame, './frames/\\', i) + success, frame = videoCapture.read() + + path = './frames/' + trans = './transfered/' + img_list = os.listdir(path) + get_key = lambda i: int(i.split('.')[0]) + img_sort = sorted(img_list, key=get_key) + fps = 24 + size = (512, 512) + + video = cv2.VideoWriter(post_path, cv2.VideoWriter_fourcc(*'DIVX'), fps, size) + # 选取风格 + if style_type == 1: + style_path = "style.pth" + elif style_type == 2: + style_path = "style2.pth" + # 进行风格转换并写入新视频 + for item in img_sort: + if item.endswith('.jpg'): + item2 = trans + item + item = path + item + stylize(item, item2, style_path) + img = cv2.imread(item2) + video.write(img) + video.release() + cv2.destroyAllWindows() + + diff --git a/项目报告.docx b/项目报告.docx new file mode 100644 index 0000000..d9e58c2 Binary files /dev/null and b/项目报告.docx differ