-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathLoadingWindow.py
More file actions
80 lines (66 loc) · 2.84 KB
/
LoadingWindow.py
File metadata and controls
80 lines (66 loc) · 2.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
from PyQt5 import QtCore
from PyQt5.QtWidgets import (QDialog, QLabel, QVBoxLayout, QDesktopWidget)
from utils.gazeUtils import eyeTrackerInit, getGazeCenter
from utils.imageUtils import createPixmapFromArray, imRead
import cv2
import numpy as np
def getPointInImage(absPoint, imPosition):
x, y = [absPoint[0] - imPosition[0], absPoint[1] - imPosition[1]]
x = max(min(imPosition[2], x), 0)
y = max(min(imPosition[3], y), 0)
return x, y
class BlurHole():
def __init__(self, image):
self.org = image
self.blurred = cv2.GaussianBlur(self.org, (39, 39), 0)
self.shape = self.org.shape
def getHoleBlur(self, center, radius):
mask = np.zeros(self.shape, dtype=np.uint8)
cv2.circle(mask, center, radius, color=(1, 1, 1), thickness=-1)
inversedMask = 1 - mask
result = mask * self.org + inversedMask * self.blurred
cv2.circle(result, center, radius, color=(230, 230, 230), thickness=3)
return result
class LoadingWindow(QDialog):
def __init__(self, waitTime: int = 5):
super().__init__()
eyeTrackerInit()
self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool)
self.setWindowOpacity(0.9)
self.imageLabel = QLabel()
self.setStyleSheet("QDialog{margin-left: 0px; border-radius: 25px; background: white; color: #4A0C46;}")
image = imRead('loadingWindow.jpg', int(QDesktopWidget().availableGeometry().height() / 1.5))
self.blurHole = BlurHole(image)
layout = QVBoxLayout()
layout.addWidget(self.imageLabel)
self.setLayout(layout)
self.refreshTimer = QtCore.QTimer(self)
self.refreshTimer.start(50)
self.refreshTimer.timeout.connect(self.refresh)
self.timer = QtCore.QTimer(self)
self.timer.start(waitTime * 1000)
self.timer.timeout.connect(self.myClose)
def myClose(self):
self.close()
self.refreshTimer.stop()
@property
def imageGeometry(self):
windowGeometry = self.frameGeometry()
imageGeometry = self.imageLabel.frameGeometry()
imageAbsGeometry = (windowGeometry.x() + imageGeometry.x(),
windowGeometry.y() + imageGeometry.y(),
imageGeometry.width(),
imageGeometry.height())
return imageAbsGeometry
def moveToCenter(self):
qtRectangle = self.frameGeometry()
centerPoint = QDesktopWidget().availableGeometry().center()
qtRectangle.moveCenter(centerPoint)
self.move(qtRectangle.topLeft())
def refresh(self):
self.moveToCenter()
gaze = getGazeCenter()
if not gaze:
return
gaze = getPointInImage(gaze, self.imageGeometry)
self.imageLabel.setPixmap(createPixmapFromArray(self.blurHole.getHoleBlur(center=gaze, radius=100)))