2019-10-03 04:57:42 +00:00
#!/usr/bin/python3
#tooltips
# Please read this tutorial on how to prepare your images for use with DeepCreamPy.
# The greater the number of variations, the longer decensoring process will be.
2019-10-09 05:20:28 +00:00
import sys , time
from PySide2 . QtWidgets import QWidget , QHBoxLayout , QVBoxLayout , QGridLayout , QGroupBox , QDesktopWidget , QApplication , QAction , qApp , QApplication , QMessageBox , QRadioButton , QPushButton , QTextEdit , QLabel , QSizePolicy
from PySide2 . QtCore import Qt , QObject
from PySide2 . QtGui import QFont , QTextCursor
2019-10-03 04:57:42 +00:00
from decensor import Decensor
class MainWindow ( QWidget ) :
def __init__ ( self ) :
super ( ) . __init__ ( )
self . initUI ( )
def initUI ( self ) :
grid_layout = QGridLayout ( )
grid_layout . setSpacing ( 10 )
self . setLayout ( grid_layout )
2019-10-04 01:32:00 +00:00
#Tutorial
self . tutorialLabel = QLabel ( )
2019-10-09 05:20:28 +00:00
self . tutorialLabel . setText ( " Welcome to DeepCreamPy! \n \n If you ' re new to DCP, please read the README. \n This program does nothing without the proper setup of your images. " )
2019-10-04 01:32:00 +00:00
self . tutorialLabel . setAlignment ( Qt . AlignCenter )
self . tutorialLabel . setFont ( QFont ( ' Sans Serif ' , 13 ) )
2019-10-03 04:57:42 +00:00
#Censor type group
self . censorTypeGroupBox = QGroupBox ( ' Censor Type ' )
barButton = QRadioButton ( ' Bar censor ' )
mosaicButton = QRadioButton ( ' Mosaic censor ' )
barButton . setChecked ( True )
censorLayout = QVBoxLayout ( )
censorLayout . addWidget ( barButton )
censorLayout . addWidget ( mosaicButton )
2019-10-04 01:32:00 +00:00
# censorLayout.addStretch(1)
2019-10-03 04:57:42 +00:00
self . censorTypeGroupBox . setLayout ( censorLayout )
#Variation count group
self . variationsGroupBox = QGroupBox ( ' Number of Decensor Variations ' )
var1Button = QRadioButton ( ' 1 ' )
var2Button = QRadioButton ( ' 2 ' )
var3Button = QRadioButton ( ' 4 ' )
var1Button . setChecked ( True )
varLayout = QVBoxLayout ( )
varLayout . addWidget ( var1Button )
varLayout . addWidget ( var2Button )
varLayout . addWidget ( var3Button )
2019-10-04 01:32:00 +00:00
# varLayout.addStretch(1)
2019-10-03 04:57:42 +00:00
self . variationsGroupBox . setLayout ( varLayout )
2019-10-09 05:20:28 +00:00
#Decensor button
self . decensorButton = QPushButton ( ' Decensor Your Images ' )
self . decensorButton . clicked . connect ( self . decensorClicked )
self . decensorButton . setSizePolicy (
2019-10-04 01:32:00 +00:00
QSizePolicy . Preferred ,
QSizePolicy . Preferred )
2019-10-03 04:57:42 +00:00
2019-10-09 05:20:28 +00:00
#Progress message
# self.progressGroupBox = QGroupBox('Progress')
self . progressMessage = QTextEdit ( )
self . progressCursor = QTextCursor ( self . progressMessage . document ( ) )
self . progressMessage . setTextCursor ( self . progressCursor )
2019-10-09 06:02:47 +00:00
self . progressMessage . setReadOnly ( True )
2019-10-09 05:20:28 +00:00
self . progressCursor . insertText ( " After you prepared your images, click on the decensor button once to begin decensoring. \n Please be patient. \n Decensoring will take time. \n " )
2019-10-03 04:57:42 +00:00
#put all groups into grid
2019-10-04 01:32:00 +00:00
grid_layout . addWidget ( self . tutorialLabel , 0 , 0 , 1 , 2 )
grid_layout . addWidget ( self . censorTypeGroupBox , 1 , 0 , 1 , 1 )
grid_layout . addWidget ( self . variationsGroupBox , 1 , 1 , 1 , 1 )
2019-10-09 05:20:28 +00:00
grid_layout . addWidget ( self . decensorButton , 2 , 0 , 1 , 2 )
grid_layout . addWidget ( self . progressMessage , 3 , 0 , 4 , 2 )
2019-10-03 04:57:42 +00:00
#window size settings
2019-10-09 05:20:28 +00:00
self . resize ( 500 , 500 )
2019-10-03 04:57:42 +00:00
self . center ( )
2019-10-09 05:20:28 +00:00
self . setWindowTitle ( ' DeepCreamPy v2.2.0-alpha ' )
2019-10-03 04:57:42 +00:00
self . show ( )
def decensorClicked ( self ) :
2019-10-09 05:20:28 +00:00
self . decensorButton . setEnabled ( False )
self . progressMessage . clear ( )
self . progressCursor . insertText ( " Decensoring has begun! \n " )
decensor = Decensor ( text_edit = self . progressMessage , text_cursor = self . progressCursor , ui_mode = True )
2019-10-03 04:57:42 +00:00
#https://stackoverflow.com/questions/42349470/pyqt-find-checked-radiobutton-in-a-group
#set decensor to right settings
#censor type
censorTypeElements = self . censorTypeGroupBox . children ( )
censorButtons = [ elem for elem in censorTypeElements if isinstance ( elem , QRadioButton ) ]
for cb in censorButtons :
if cb . isChecked ( ) :
censorType = cb . text ( )
if censorType == ' Bar censor ' :
decensor . is_mosaic = False
else :
decensor . is_mosaic = True
#variations count
variationsElements = self . variationsGroupBox . children ( )
variationsButtons = [ elem for elem in variationsElements if isinstance ( elem , QRadioButton ) ]
for vb in variationsButtons :
if vb . isChecked ( ) :
variations = int ( vb . text ( ) )
decensor . variations = variations
decensor . decensor_all_images_in_folder ( )
2019-10-09 05:20:28 +00:00
self . progressCursor . insertText ( " -------------------------------------------------------------------------- \n To decensor a new batch of images, please close this program and reopen it. \n This is because the developer encountered a hard-to-fix bug that messes up repeated use of the decensor button. \n The bug will be fixed in a future update. " )
# time.sleep(3)
# sys.exit()
# self.decensorButton.setEnabled(False)
2019-10-03 04:57:42 +00:00
# def showAbout(self):
# QMessageBox.about(self, 'About', "DeepCreamPy v2.2.0 \n Developed by deeppomf")
# #centers the main window
def center ( self ) :
qr = self . frameGeometry ( )
cp = QDesktopWidget ( ) . availableGeometry ( ) . center ( )
qr . moveCenter ( cp )
self . move ( qr . topLeft ( ) )
if __name__ == ' __main__ ' :
app = QApplication ( sys . argv )
ex = MainWindow ( )
sys . exit ( app . exec_ ( ) )