fawkes/app/app.py

107 wiersze
3.3 KiB
Python

# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QFileDialog
from fawkes.protection import Fawkes
import os
os.environ['QT_MAC_WANTS_LAYER'] = '1'
class Worker(QThread):
signal = pyqtSignal('PyQt_PyObject')
def __init__(self):
QThread.__init__(self)
self.image_paths = None
self.my_fawkes = None
def run(self):
if self.my_fawkes is None:
self.my_fawkes = Fawkes("extractor_2", '0', 1)
status = self.my_fawkes.run_protection(self.image_paths, debug=True)
self.signal.emit(status)
class FawkesAPP(object):
def __init__(self, Form):
Form.setObjectName("Form")
Form.resize(220, 150)
self.running = False
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(0, 20, 220, 36))
self.cloakButton = QtWidgets.QPushButton(Form)
self.cloakButton.setGeometry(QtCore.QRect(0, 70, 220, 36))
self.img_paths = None
self.labelA = QtWidgets.QLabel(Form)
self.labelA.setText('Please select images to protect. ')
self.labelA.move(10, 115)
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
self.thread = Worker()
self.thread.signal.connect(self.finished)
def retranslateUi(self, Form):
self.tr = QtCore.QCoreApplication.translate
Form.setWindowTitle(self.tr("Form", "Fawkes"))
self.pushButton.setText(self.tr("Form", "Select Images"))
self.cloakButton.setText(self.tr("Form", "Protect Selected Images"))
self.pushButton.clicked.connect(self.pushButton_handler)
self.cloakButton.clicked.connect(lambda: self.protect_images())
def pushButton_handler(self):
print("Button pressed")
self.open_dialog_box()
def open_dialog_box(self):
qfd = QFileDialog()
path = "."
filter = "Images (*.png *.xpm *.jpg *jpeg *.gif)"
filename = QFileDialog.getOpenFileNames(qfd, "Select Image(s)", path, filter)
self.img_paths = filename[0]
print("Selected paths", self.img_paths)
self.labelA.setText('Selected {} images'.format(len(self.img_paths)))
def finished(self, result):
if result == 1:
self.labelA.setText("Finished! Saved to original folder. ")
elif result == 2:
self.labelA.setText("Error: No face detected. ")
elif result == 3:
self.labelA.setText("Error: No image selected. ")
self.cloakButton.setEnabled(True)
self.pushButton.setEnabled(True)
self.img_paths = None
def protect_images(self):
if self.img_paths is None:
self.labelA.setText("Please select images first.")
return
self.labelA.setText("Running Fawkes... ~{} minute(s)".format(int(len(self.img_paths) * 2)))
self.labelA.repaint()
self.thread.image_paths = self.img_paths
self.cloakButton.setEnabled(False)
self.pushButton.setEnabled(False)
self.thread.start()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = FawkesAPP(Form)
Form.show()
sys.exit(app.exec_())