Update app.py
Browse files
app.py
CHANGED
@@ -12,9 +12,10 @@ import torch
|
|
12 |
from torch import nn
|
13 |
from PIL import Image
|
14 |
from feat import Detector
|
15 |
-
from feat.utils import FEAT_EMOTION_COLUMNS
|
16 |
from feat.utils.io import get_resource_path
|
17 |
|
|
|
|
|
18 |
def _get_resource_path():
|
19 |
return "/home/user/app/resources"
|
20 |
|
@@ -114,7 +115,7 @@ def proc_image(img, detector):
|
|
114 |
(x0, y0, x1, y1, p) = face
|
115 |
res_scale = img.shape[0]/704
|
116 |
cv.rectangle(img, (int(x0), int(y0)), (int(x1), int(y1)), color = (0, 0, 255), thickness = 3)
|
117 |
-
cv.putText(img,
|
118 |
cv.putText(img, f"{faces_detected } face(s) found", (0, int(25*res_scale*1.5)), fontFace = 0, color = (0, 255, 0), thickness = 2, fontScale = res_scale)
|
119 |
cv.putText(img, has_open_eyes, (int(x0)-10, int(y0)-10), fontFace = 0, color = (0, 255, 0), thickness = 2, fontScale = res_scale)
|
120 |
return img
|
@@ -124,7 +125,8 @@ def extract_features(landmarks, face):
|
|
124 |
return features
|
125 |
|
126 |
def image_processing(img):
|
127 |
-
|
|
|
128 |
|
129 |
def video_frame_callback(frame):
|
130 |
img = frame.to_ndarray(format="bgr24")
|
@@ -170,6 +172,7 @@ with stream:
|
|
170 |
media_stream_constraints={"video": True, "audio": False},
|
171 |
async_processing=True,
|
172 |
)
|
|
|
173 |
else:
|
174 |
pic = st.container()
|
175 |
frame = image_select(
|
@@ -183,8 +186,4 @@ with stream:
|
|
183 |
use_container_width= False
|
184 |
)
|
185 |
img = np.array(Image.open(frame))
|
186 |
-
pic.image(image_processing(img), use_column_width = "always")
|
187 |
-
|
188 |
-
|
189 |
-
recog = st.toggle(":green[Emotion recogntion]", key = "stream", value = True)
|
190 |
-
|
|
|
12 |
from torch import nn
|
13 |
from PIL import Image
|
14 |
from feat import Detector
|
|
|
15 |
from feat.utils.io import get_resource_path
|
16 |
|
17 |
+
CLASS_LABELS = ['angry', 'disgust', 'fear', 'happy', 'neutral', 'sad', 'surprise']
|
18 |
+
|
19 |
def _get_resource_path():
|
20 |
return "/home/user/app/resources"
|
21 |
|
|
|
115 |
(x0, y0, x1, y1, p) = face
|
116 |
res_scale = img.shape[0]/704
|
117 |
cv.rectangle(img, (int(x0), int(y0)), (int(x1), int(y1)), color = (0, 0, 255), thickness = 3)
|
118 |
+
cv.putText(img, CLASS_LABELS[label], (int(x0)-10, int(y1+25*res_scale*1.5)), fontFace = 0, color = (0, 255, 0), thickness = 2, fontScale = res_scale)
|
119 |
cv.putText(img, f"{faces_detected } face(s) found", (0, int(25*res_scale*1.5)), fontFace = 0, color = (0, 255, 0), thickness = 2, fontScale = res_scale)
|
120 |
cv.putText(img, has_open_eyes, (int(x0)-10, int(y0)-10), fontFace = 0, color = (0, 255, 0), thickness = 2, fontScale = res_scale)
|
121 |
return img
|
|
|
125 |
return features
|
126 |
|
127 |
def image_processing(img):
|
128 |
+
ann = proc_image(img, detector) if recog else img
|
129 |
+
return ann
|
130 |
|
131 |
def video_frame_callback(frame):
|
132 |
img = frame.to_ndarray(format="bgr24")
|
|
|
172 |
media_stream_constraints={"video": True, "audio": False},
|
173 |
async_processing=True,
|
174 |
)
|
175 |
+
recog = st.toggle(":green[Emotion recogntion]", key = "stream", value = True)
|
176 |
else:
|
177 |
pic = st.container()
|
178 |
frame = image_select(
|
|
|
186 |
use_container_width= False
|
187 |
)
|
188 |
img = np.array(Image.open(frame))
|
189 |
+
pic.image(image_processing(img), use_column_width = "always")
|
|
|
|
|
|
|
|