forked from ahmedshafiq12/Egyptian-Arabic-Virtual-Assistant
-
Notifications
You must be signed in to change notification settings - Fork 0
/
videoRecorder.py
72 lines (54 loc) · 2.12 KB
/
videoRecorder.py
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
from PySide6.QtGui import *
from PySide6.QtWidgets import *
from qtpy.QtCore import *
import cv2
from models.emotion_detection.extractEmotion import *
class FrameCaptureThread(QThread):
frameCaptured = Signal(QImage)
def run(self):
capture = cv2.VideoCapture(0) # Change 0 to the desired camera index if multiple cameras are available
while True:
ret, frame = capture.read() # Read frame from the camera
if not ret:
break
# Convert frame to RGB format
frame, emotion = predict_emotion(frame=frame)
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# Create QImage from the frame
height, width, _ = frame_rgb.shape
image = QImage(frame_rgb.data, width, height, QImage.Format.Format_RGB888)
image.setText("emotion",emotion)
self.frameCaptured.emit(image) # Emit the captured frame
capture.release()
#Create a circuler Image
def mask_image(image, imgtype ='png', size = 334 ):
# Load image
# Crop image to a square:
imgsize = min(image.width(), image.height())
rect = QRect(
(image.width() - imgsize) / 2,
(image.height() - imgsize) / 2,
imgsize,
imgsize,
)
image = image.copy(rect)
# Create the output image with the same dimensions
# and an alpha channel and make it completely transparent:
out_img = QImage(imgsize, imgsize, QImage.Format_ARGB32)
out_img.fill(Qt.transparent)
# Create a texture brush and paint a circle
# with the original image onto the output image:
brush = QBrush(image)
painter = QPainter(out_img)
painter.setBrush(brush)
painter.setPen(Qt.NoPen)
painter.drawEllipse(0, 0, imgsize, imgsize)
painter.end()
# Convert the image to a pixmap and rescale it.
pr = QWindow().devicePixelRatio()
pm = QPixmap.fromImage(out_img)
pm.setDevicePixelRatio(pr)
size *= pr
pm = pm.scaled(size, size, Qt.KeepAspectRatio,
Qt.SmoothTransformation)
return pm