[963e17]: / Stress Detection.ipynb

Download this file

1157 lines (1156 with data), 120.4 kB

{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "05fe9d6f",
   "metadata": {},
   "source": [
    "# Process"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "ae7fdf47",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<keras.engine.functional.Functional object at 0x0000027A5BD6F760>\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Naina\\AppData\\Local\\Temp/ipykernel_17940/3751566305.py:41: RuntimeWarning: divide by zero encountered in double_scalars\n",
      "  normalized_value = abs(disp - np.min(points))/abs(np.max(points) - np.min(points))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.0\n",
      "0.9334352252850698\n",
      "0.3635805007669541\n",
      "0.3635805007669541\n",
      "0.3582875988499648\n",
      "0.44392036003607943\n",
      "0.3582875988499648\n",
      "0.43726467206980746\n",
      "0.3600942930281762\n",
      "0.36700475791317283\n",
      "0.42513462792741236\n",
      "0.42513462792741236\n",
      "0.600251518586586\n",
      "0.4179413128445052\n",
      "0.600251518586586\n",
      "0.600251518586586\n",
      "0.600251518586586\n",
      "0.3654039487624784\n",
      "0.36725866099476145\n",
      "0.46900725773563534\n",
      "0.6019572715378986\n",
      "0.4161390680694228\n",
      "0.6019572715378986\n",
      "0.4104102675478394\n",
      "0.5264957384941846\n",
      "0.5264957384941846\n",
      "0.5264957384941846\n",
      "0.5884916537362881\n",
      "0.4104102675478394\n",
      "0.5313434908333113\n",
      "0.46900725773563534\n",
      "0.6753395551030256\n",
      "0.46900725773563534\n",
      "0.5264957384941846\n",
      "0.46900725773563534\n",
      "0.5963005971398023\n",
      "0.5264957384941846\n",
      "0.6753395551030256\n",
      "0.5884916537362881\n",
      "0.6019572715378986\n",
      "0.6753395551030256\n",
      "0.6019572715378986\n",
      "0.7725518584743519\n",
      "0.7648290948039481\n",
      "0.86614464490287\n",
      "0.9808409782110764\n",
      "1.0\n",
      "0.48216231687059996\n",
      "0.9642616587435098\n",
      "0.48216231687059996\n",
      "0.48216231687059996\n",
      "0.49898400873493554\n",
      "0.46723777738325506\n",
      "0.4333656359304916\n",
      "0.4349932624861838\n",
      "0.451434119180767\n",
      "0.43616298845797197\n",
      "0.46590187454855775\n",
      "0.4349932624861838\n",
      "0.451434119180767\n",
      "0.4203105296700969\n",
      "0.40611992953359716\n",
      "0.46723777738325506\n",
      "0.4349932624861838\n",
      "0.41878486458729997\n",
      "0.48216231687059996\n",
      "0.45018469594369187\n",
      "0.45018469594369187\n",
      "0.46590187454855775\n",
      "0.4214066849263477\n",
      "0.4333656359304916\n",
      "0.48017454881679633\n",
      "0.4203105296700969\n",
      "0.40714806237983986\n",
      "0.4835922281019413\n",
      "0.451434119180767\n",
      "0.45018469594369187\n",
      "0.3791512303417027\n",
      "0.3924053697863211\n",
      "0.4333656359304916\n",
      "0.41878486458729997\n",
      "0.4168384671142832\n",
      "0.45018469594369187\n",
      "0.4349932624861838\n",
      "0.4349932624861838\n",
      "0.44844667978050157\n",
      "0.4333656359304916\n",
      "0.44844667978050157\n",
      "0.4046885855090244\n",
      "0.4640441489014569\n",
      "0.4214066849263477\n",
      "0.44844667978050157\n",
      "0.45018469594369187\n",
      "0.43616298845797197\n",
      "0.4349932624861838\n",
      "0.45018469594369187\n",
      "0.44844667978050157\n",
      "0.461676850036757\n",
      "0.4333656359304916\n",
      "0.4203105296700969\n",
      "0.4046885855090244\n",
      "0.4046885855090244\n",
      "0.4214066849263477\n",
      "0.4203105296700969\n",
      "0.40611992953359716\n",
      "0.41878486458729997\n",
      "0.40611992953359716\n",
      "0.44844667978050157\n",
      "0.40611992953359716\n",
      "0.4203105296700969\n",
      "0.43616298845797197\n",
      "0.43616298845797197\n",
      "0.4203105296700969\n",
      "0.451434119180767\n",
      "0.48216231687059996\n",
      "0.4203105296700969\n",
      "0.9661049965255964\n",
      "0.40611992953359716\n",
      "0.9978554838606931\n",
      "0.46590187454855775\n",
      "0.45018469594369187\n",
      "0.4203105296700969\n",
      "0.4203105296700969\n",
      "0.46590187454855775\n",
      "0.48216231687059996\n",
      "0.451434119180767\n",
      "0.43616298845797197\n",
      "0.43616298845797197\n",
      "0.4835922281019413\n",
      "0.4349932624861838\n",
      "0.46723777738325506\n",
      "0.8405170028338569\n",
      "0.4835922281019413\n",
      "0.5957163484843788\n",
      "0.46590187454855775\n",
      "0.5743061114689418\n",
      "0.48017454881679633\n",
      "0.5961628688829711\n",
      "0.45018469594369187\n",
      "0.6387284587719574\n",
      "0.46590187454855775\n",
      "0.5755424928145522\n",
      "0.4835922281019413\n",
      "0.6165955901952072\n",
      "0.43616298845797197\n",
      "0.6170787554426814\n",
      "0.48216231687059996\n",
      "0.5743061114689418\n",
      "0.46723777738325506\n",
      "0.5755424928145522\n",
      "0.451434119180767\n",
      "0.5957163484843788\n",
      "0.4835922281019413\n",
      "0.6387284587719574\n",
      "0.46590187454855775\n",
      "0.6165955901952072\n",
      "0.451434119180767\n",
      "0.5943813078599167\n",
      "0.43686770314365003\n",
      "0.6605683789791965\n",
      "0.4835922281019413\n",
      "0.5190210880508975\n",
      "0.5372173380049057\n",
      "0.5372173380049057\n",
      "0.5372173380049057\n",
      "0.5375735693311237\n",
      "0.5560504362963227\n",
      "0.5755424928145522\n",
      "0.5361516317907764\n",
      "0.5560504362963227\n",
      "0.5190210880508975\n",
      "0.5375735693311237\n",
      "0.5190210880508975\n",
      "0.5549034648808365\n",
      "0.5014402908763704\n",
      "0.5017490561548967\n",
      "0.5372173380049057\n",
      "0.5343853390186821\n",
      "0.5361516317907764\n",
      "0.5343853390186821\n",
      "0.5549034648808365\n",
      "0.5361516317907764\n",
      "0.5180294433064873\n",
      "0.48216231687059996\n",
      "0.5180294433064873\n",
      "0.5005163102032328\n",
      "0.49898400873493554\n",
      "0.46590187454855775\n",
      "0.49898400873493554\n",
      "0.5163853908209305\n",
      "0.49898400873493554\n",
      "0.5141017513074537\n",
      "0.5163853908209305\n",
      "0.5163853908209305\n",
      "0.5163853908209305\n",
      "0.5141017513074537\n",
      "0.5319330276840529\n",
      "0.5343853390186821\n",
      "0.5163853908209305\n",
      "0.4776426870136627\n",
      "0.48216231687059996\n",
      "0.49898400873493554\n",
      "0.5319330276840529\n",
      "0.49898400873493554\n",
      "0.5163853908209305\n",
      "0.5005163102032328\n",
      "0.5530031353721702\n",
      "0.4835922281019413\n",
      "0.5005163102032328\n",
      "0.49898400873493554\n",
      "0.5005163102032328\n",
      "0.5005163102032328\n",
      "0.5005163102032328\n",
      "0.5163853908209305\n",
      "0.5141017513074537\n",
      "0.4835922281019413\n",
      "0.48216231687059996\n",
      "0.48017454881679633\n",
      "0.4640441489014569\n",
      "0.49898400873493554\n",
      "0.49685471020103866\n",
      "0.5141017513074537\n",
      "0.5163853908209305\n",
      "0.49685471020103866\n",
      "0.5180294433064873\n",
      "0.5560504362963227\n",
      "0.5180294433064873\n",
      "0.5372173380049057\n",
      "0.5190210880508975\n",
      "0.5014402908763704\n",
      "0.451434119180767\n",
      "0.45018469594369187\n",
      "0.451434119180767\n",
      "0.45018469594369187\n",
      "0.45018469594369187\n",
      "0.46804293643895606\n",
      "0.4835922281019413\n",
      "0.46723777738325506\n",
      "0.4844542473970555\n",
      "0.451434119180767\n",
      "0.46723777738325506\n",
      "0.45218699579550187\n",
      "0.4214066849263477\n",
      "0.42206695699373603\n",
      "0.40797404404520005\n",
      "0.42206695699373603\n",
      "0.42206695699373603\n",
      "0.4214066849263477\n",
      "0.4835922281019413\n",
      "0.46723777738325506\n",
      "0.5005163102032328\n",
      "0.4835922281019413\n",
      "0.48216231687059996\n",
      "0.4835922281019413\n",
      "0.46723777738325506\n",
      "0.46723777738325506\n",
      "0.4214066849263477\n",
      "0.40611992953359716\n",
      "0.4349932624861838\n",
      "0.43616298845797197\n",
      "0.43686770314365003\n",
      "0.39395168933457236\n",
      "0.3924053697863211\n",
      "0.3924053697863211\n",
      "0.40714806237983986\n",
      "0.6340498469565101\n",
      "0.43616298845797197\n",
      "0.40611992953359716\n",
      "0.3933705168854874\n",
      "0.40611992953359716\n",
      "0.40714806237983986\n",
      "0.40714806237983986\n",
      "0.3933705168854874\n",
      "0.4214066849263477\n",
      "0.4214066849263477\n",
      "0.3933705168854874\n",
      "0.42206695699373603\n",
      "0.42206695699373603\n",
      "0.45018469594369187\n",
      "0.4203105296700969\n",
      "0.451434119180767\n",
      "0.9317550075894323\n",
      "0.46723777738325506\n",
      "0.9642616587435098\n",
      "0.4214066849263477\n",
      "0.451434119180767\n",
      "0.4203105296700969\n",
      "0.45218699579550187\n",
      "0.46804293643895606\n",
      "0.5014402908763704\n",
      "0.5180294433064873\n",
      "0.5180294433064873\n",
      "0.5005163102032328\n",
      "0.5372173380049057\n",
      "0.5361516317907764\n",
      "0.5755424928145522\n",
      "0.5549034648808365\n",
      "0.5372173380049057\n",
      "0.5361516317907764\n",
      "0.5343853390186821\n",
      "0.5530031353721702\n",
      "0.5163853908209305\n",
      "0.5005163102032328\n",
      "0.5163853908209305\n",
      "0.49898400873493554\n",
      "0.49685471020103866\n",
      "0.49685471020103866\n",
      "0.5141017513074537\n",
      "0.49685471020103866\n",
      "0.49685471020103866\n",
      "0.49685471020103866\n",
      "0.49685471020103866\n",
      "0.49685471020103866\n",
      "0.49898400873493554\n",
      "0.49898400873493554\n",
      "0.5163853908209305\n",
      "0.49898400873493554\n",
      "0.49685471020103866\n",
      "0.5163853908209305\n",
      "0.48216231687059996\n",
      "0.5141017513074537\n",
      "0.48216231687059996\n",
      "0.5163853908209305\n",
      "0.49685471020103866\n",
      "0.5141017513074537\n",
      "0.5163853908209305\n",
      "0.5180294433064873\n",
      "0.5163853908209305\n",
      "0.49898400873493554\n",
      "0.5343853390186821\n",
      "0.5005163102032328\n",
      "0.49898400873493554\n",
      "0.49898400873493554\n",
      "0.5163853908209305\n",
      "0.5319330276840529\n",
      "0.5530031353721702\n",
      "0.49898400873493554\n",
      "0.5549034648808365\n",
      "0.5943813078599167\n",
      "0.6151513359678512\n",
      "0.6151513359678512\n",
      "0.5943813078599167\n",
      "0.5549034648808365\n",
      "0.5190210880508975\n",
      "0.5190210880508975\n",
      "0.5193525113308978\n",
      "0.5180294433064873\n",
      "0.4844542473970555\n",
      "0.4844542473970555\n",
      "0.451434119180767\n",
      "0.43686770314365003\n",
      "0.42206695699373603\n",
      "0.45218699579550187\n",
      "0.46723777738325506\n",
      "0.44844667978050157\n",
      "0.4144823793406415\n",
      "0.4312898928723943\n",
      "0.4435513882946582\n",
      "END REACHED\n"
     ]
    }
   ],
   "source": [
    "from scipy.spatial import distance as dist\n",
    "from imutils import face_utils\n",
    "import numpy as np\n",
    "import math\n",
    "import imutils\n",
    "import time\n",
    "import dlib\n",
    "import cv2\n",
    "from cv2 import VideoWriter_fourcc, VideoWriter\n",
    "import matplotlib.pyplot as plt\n",
    "from keras.preprocessing.image import img_to_array\n",
    "from keras.models import load_model\n",
    "\n",
    "\n",
    "def eye_brow_distance(leye,reye):\n",
    "    global points\n",
    "    distq = dist.euclidean(leye,reye)\n",
    "    #calculation of distance between left and right eye.\n",
    "    points.append(int(distq))\n",
    "    return distq\n",
    "\n",
    "def emotion_finder(faces,frame):\n",
    "    global emotion_classifier\n",
    "    EMOTIONS = [\"angry\" ,\"disgust\",\"fear\", \"happy\", \"sad\", \"surprise\",\"neutral\"]\n",
    "    x,y,w,h = face_utils.rect_to_bb(faces)\n",
    "    frame = frame[y:y+h,x:x+w]\n",
    "    roi = cv2.resize(frame,(64,64))\n",
    "    roi = roi.astype(\"float\") / 255.0\n",
    "    roi = img_to_array(roi)\n",
    "    roi = np.expand_dims(roi,axis=0)\n",
    "    preds = emotion_classifier.predict(roi)[0]\n",
    "    emotion_probability = np.max(preds)\n",
    "    label = EMOTIONS[preds.argmax()]\n",
    "    if label in ['fear','sad', 'neutral']:\n",
    "        label = 'stressed'\n",
    "    else:\n",
    "        label = 'not stressed'\n",
    "    return label\n",
    "    \n",
    "def normalize_values(points,disp):\n",
    "    normalized_value = abs(disp - np.min(points))/abs(np.max(points) - np.min(points))\n",
    "    stress_value = np.exp(-(normalized_value))\n",
    "    return stress_value\n",
    "\n",
    "\n",
    "\n",
    "detector = dlib.get_frontal_face_detector()\n",
    "predictor = dlib.shape_predictor(\"shape_predictor_68_face_landmarks.dat\")\n",
    "emotion_classifier = load_model(\"_mini_XCEPTION.102-0.66.hdf5\", compile=False)\n",
    "print(emotion_classifier, flush = True)\n",
    "cap = cv2.VideoCapture('inputvedio.mp4')\n",
    "'''cap =cv2.VideoCapture(0)\n",
    "\n",
    "fps=30 # Frames per second\n",
    "size=(int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))\n",
    "\n",
    "videoWriter=cv2.VideoWriter('MyVedio.avi',cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)\n",
    "\n",
    "success, frame =cap.read()\n",
    "    #read gives two outputs\n",
    "\n",
    "numFramesRemaining = 10*fps-1\n",
    "\n",
    "while success and numFramesRemaining >0:\n",
    "    videoWriter.write(frame)\n",
    "    success,frame= cap.read()\n",
    "    numFramesRemaining -=1'''\n",
    "\n",
    "points = []\n",
    "stress_list = []\n",
    "stressval_list = []\n",
    "stressgraph = []\n",
    "size=0\n",
    "while(True):\n",
    "    _,frame = cap.read()\n",
    "    if(not _): break\n",
    "    frame = cv2.flip(frame,1)\n",
    "    frame = imutils.resize(frame, width=500,height=500)\n",
    "    \n",
    "    \n",
    "    (lBegin, lEnd) = face_utils.FACIAL_LANDMARKS_IDXS[\"right_eyebrow\"]\n",
    "    (rBegin, rEnd) = face_utils.FACIAL_LANDMARKS_IDXS[\"left_eyebrow\"]\n",
    "\n",
    "    #preprocessing the image\n",
    "    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)\n",
    "    \n",
    "    detections = detector(gray,0)\n",
    "    for detection in detections:\n",
    "        emotion = emotion_finder(detection,gray)\n",
    "        cv2.putText(frame, emotion, (10,10),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)\n",
    "        shape = predictor(frame,detection)\n",
    "        shape = face_utils.shape_to_np(shape)\n",
    "        \n",
    "        leyebrow = shape[lBegin:lEnd]\n",
    "        reyebrow = shape[rBegin:rEnd]\n",
    "            \n",
    "        reyebrowhull = cv2.convexHull(reyebrow)\n",
    "        leyebrowhull = cv2.convexHull(leyebrow)\n",
    "\n",
    "        cv2.drawContours(frame, [reyebrowhull], -1, (0, 0, 255), 1)\n",
    "        cv2.drawContours(frame, [leyebrowhull], -1, (0, 0, 255), 1)\n",
    "\n",
    "        distq = eye_brow_distance(leyebrow[-1],reyebrow[0])\n",
    "        stress_value = normalize_values(points,distq)\n",
    "        print(stress_value)\n",
    "        #if stress_value!=1.0: stress_list.append(stress_list)\n",
    "        if math.isnan(stress_value):\n",
    "            continue\n",
    "        #cv2.putText(frame,\"stress level:{}\".format(str(int(stress_value*100))),(20,40),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)\n",
    "        #stress_list.append(frame)\n",
    "        cv2.putText(frame,\"stress level:{}\".format(str(int(stress_value*100))),(20,40),cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 1)\n",
    "        stress_list.append(frame)\n",
    "    height, width, layers = frame.shape\n",
    "    size = (width,height)\n",
    "    stressval_list.append(stress_value)\n",
    "out = cv2.VideoWriter('resvid.avi',cv2.VideoWriter_fourcc(*'DIVX'), 10, size)\n",
    "cap.release()\n",
    "print(\"END REACHED\")\n",
    "for i in range(len(stress_list)):\n",
    "    out.write(stress_list[i])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b0bc2bd1",
   "metadata": {},
   "source": [
    "# Training the model ;)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "875e9383",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 28709 images belonging to 7 classes.\n",
      "Found 7178 images belonging to 7 classes.\n",
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      " Layer (type)                Output Shape              Param #   \n",
      "=================================================================\n",
      " conv2d (Conv2D)             (None, 48, 48, 32)        320       \n",
      "                                                                 \n",
      " activation (Activation)     (None, 48, 48, 32)        0         \n",
      "                                                                 \n",
      " batch_normalization (BatchN  (None, 48, 48, 32)       128       \n",
      " ormalization)                                                   \n",
      "                                                                 \n",
      " conv2d_1 (Conv2D)           (None, 48, 48, 32)        9248      \n",
      "                                                                 \n",
      " activation_1 (Activation)   (None, 48, 48, 32)        0         \n",
      "                                                                 \n",
      " batch_normalization_1 (Batc  (None, 48, 48, 32)       128       \n",
      " hNormalization)                                                 \n",
      "                                                                 \n",
      " max_pooling2d (MaxPooling2D  (None, 24, 24, 32)       0         \n",
      " )                                                               \n",
      "                                                                 \n",
      " dropout (Dropout)           (None, 24, 24, 32)        0         \n",
      "                                                                 \n",
      " conv2d_2 (Conv2D)           (None, 24, 24, 64)        18496     \n",
      "                                                                 \n",
      " activation_2 (Activation)   (None, 24, 24, 64)        0         \n",
      "                                                                 \n",
      " batch_normalization_2 (Batc  (None, 24, 24, 64)       256       \n",
      " hNormalization)                                                 \n",
      "                                                                 \n",
      " conv2d_3 (Conv2D)           (None, 24, 24, 64)        36928     \n",
      "                                                                 \n",
      " activation_3 (Activation)   (None, 24, 24, 64)        0         \n",
      "                                                                 \n",
      " batch_normalization_3 (Batc  (None, 24, 24, 64)       256       \n",
      " hNormalization)                                                 \n",
      "                                                                 \n",
      " max_pooling2d_1 (MaxPooling  (None, 12, 12, 64)       0         \n",
      " 2D)                                                             \n",
      "                                                                 \n",
      " dropout_1 (Dropout)         (None, 12, 12, 64)        0         \n",
      "                                                                 \n",
      " conv2d_4 (Conv2D)           (None, 12, 12, 128)       73856     \n",
      "                                                                 \n",
      " activation_4 (Activation)   (None, 12, 12, 128)       0         \n",
      "                                                                 \n",
      " batch_normalization_4 (Batc  (None, 12, 12, 128)      512       \n",
      " hNormalization)                                                 \n",
      "                                                                 \n",
      " conv2d_5 (Conv2D)           (None, 12, 12, 128)       147584    \n",
      "                                                                 \n",
      " activation_5 (Activation)   (None, 12, 12, 128)       0         \n",
      "                                                                 \n",
      " batch_normalization_5 (Batc  (None, 12, 12, 128)      512       \n",
      " hNormalization)                                                 \n",
      "                                                                 \n",
      " max_pooling2d_2 (MaxPooling  (None, 6, 6, 128)        0         \n",
      " 2D)                                                             \n",
      "                                                                 \n",
      " dropout_2 (Dropout)         (None, 6, 6, 128)         0         \n",
      "                                                                 \n",
      " flatten (Flatten)           (None, 4608)              0         \n",
      "                                                                 \n",
      " dense (Dense)               (None, 64)                294976    \n",
      "                                                                 \n",
      " activation_6 (Activation)   (None, 64)                0         \n",
      "                                                                 \n",
      " batch_normalization_6 (Batc  (None, 64)               256       \n",
      " hNormalization)                                                 \n",
      "                                                                 \n",
      " dropout_3 (Dropout)         (None, 64)                0         \n",
      "                                                                 \n",
      " dense_1 (Dense)             (None, 64)                4160      \n",
      "                                                                 \n",
      " activation_7 (Activation)   (None, 64)                0         \n",
      "                                                                 \n",
      " batch_normalization_7 (Batc  (None, 64)               256       \n",
      " hNormalization)                                                 \n",
      "                                                                 \n",
      " dropout_4 (Dropout)         (None, 64)                0         \n",
      "                                                                 \n",
      " dense_2 (Dense)             (None, 7)                 455       \n",
      "                                                                 \n",
      " activation_8 (Activation)   (None, 7)                 0         \n",
      "                                                                 \n",
      "=================================================================\n",
      "Total params: 588,327\n",
      "Trainable params: 587,175\n",
      "Non-trainable params: 1,152\n",
      "_________________________________________________________________\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "from __future__ import print_function\n",
    "import keras\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense,Dropout,Activation,Flatten,BatchNormalization\n",
    "from keras.layers import Conv2D,MaxPooling2D\n",
    "import os\n",
    "\n",
    "num_classes = 7 # number of labels\n",
    "img_rows,img_cols = 48,48\n",
    "batch_size = 32 #number of traning example utlized in 1 iteration\n",
    "\n",
    "train_data_dir = 'train'\n",
    "validation_data_dir = 'test'\n",
    "\n",
    "train_datagen = ImageDataGenerator(\n",
    "\t\t\t\t\trescale=1./255,\n",
    "\t\t\t\t\trotation_range=30,\n",
    "\t\t\t\t\tshear_range=0.3,\n",
    "\t\t\t\t\tzoom_range=0.3,\n",
    "\t\t\t\t\twidth_shift_range=0.4,\n",
    "\t\t\t\t\theight_shift_range=0.4,\n",
    "\t\t\t\t\thorizontal_flip=True,\n",
    "\t\t\t\t\tfill_mode='nearest')\n",
    "\n",
    "validation_datagen = ImageDataGenerator(rescale=1./255)\n",
    "\n",
    "train_generator = train_datagen.flow_from_directory(\n",
    "\t\t\t\t\ttrain_data_dir,\n",
    "\t\t\t\t\tcolor_mode='grayscale',\n",
    "\t\t\t\t\ttarget_size=(img_rows,img_cols),\n",
    "\t\t\t\t\tbatch_size=batch_size,\n",
    "\t\t\t\t\tclass_mode='categorical',\n",
    "\t\t\t\t\tshuffle=True)\n",
    "\n",
    "validation_generator = validation_datagen.flow_from_directory(\n",
    "\t\t\t\t\t\t\tvalidation_data_dir,\n",
    "\t\t\t\t\t\t\tcolor_mode='grayscale',\n",
    "\t\t\t\t\t\t\ttarget_size=(img_rows,img_cols),\n",
    "\t\t\t\t\t\t\tbatch_size=batch_size,\n",
    "\t\t\t\t\t\t\tclass_mode='categorical',\n",
    "\t\t\t\t\t\t\tshuffle=True)\n",
    "\n",
    "\n",
    "model = Sequential()\n",
    "\n",
    "# LAYER 1\n",
    "\n",
    "model.add(Conv2D(32,(3,3),padding='same',kernel_initializer='he_normal',input_shape=(img_rows,img_cols,1)))\n",
    "model.add(Activation('elu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Conv2D(32,(3,3),padding='same',kernel_initializer='he_normal',input_shape=(img_rows,img_cols,1)))\n",
    "model.add(Activation('elu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(MaxPooling2D(pool_size=(2,2)))\n",
    "model.add(Dropout(0.2))\n",
    "\n",
    "# LAYER 2\n",
    "\n",
    "model.add(Conv2D(64,(3,3),padding='same',kernel_initializer='he_normal'))\n",
    "model.add(Activation('elu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Conv2D(64,(3,3),padding='same',kernel_initializer='he_normal'))\n",
    "model.add(Activation('elu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(MaxPooling2D(pool_size=(2,2)))\n",
    "model.add(Dropout(0.2))\n",
    "\n",
    "# LAYER 3\n",
    "\n",
    "model.add(Conv2D(128,(3,3),padding='same',kernel_initializer='he_normal'))\n",
    "model.add(Activation('elu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Conv2D(128,(3,3),padding='same',kernel_initializer='he_normal'))\n",
    "model.add(Activation('elu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(MaxPooling2D(pool_size=(2,2)))\n",
    "model.add(Dropout(0.2))\n",
    "\n",
    "\n",
    "# LAYER 4\n",
    "\n",
    "model.add(Flatten())\n",
    "model.add(Dense(64,kernel_initializer='he_normal'))\n",
    "model.add(Activation('elu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Dropout(0.5))\n",
    "\n",
    "# LAYER 5\n",
    "\n",
    "model.add(Dense(64,kernel_initializer='he_normal'))\n",
    "model.add(Activation('elu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Dropout(0.5))\n",
    "\n",
    "# LAYER 6\n",
    "\n",
    "model.add(Dense(num_classes,kernel_initializer='he_normal'))\n",
    "model.add(Activation('softmax'))\n",
    "\n",
    "print(model.summary())\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a7c683bc",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Naina\\AppData\\Local\\Temp/ipykernel_8988/3405561283.py:33: UserWarning: `Model.fit_generator` is deprecated and will be removed in a future version. Please use `Model.fit`, which supports generators.\n",
      "  history=model.fit_generator(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.7966 - accuracy: 0.2494\n",
      "Epoch 00001: val_loss improved from inf to 1.76592, saving model to Users/Naina/Stress\\Emotion_little_vgg.h5\n",
      "755/755 [==============================] - 236s 311ms/step - loss: 1.7966 - accuracy: 0.2494 - val_loss: 1.7659 - val_accuracy: 0.2769 - lr: 0.0010\n",
      "Epoch 2/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.7724 - accuracy: 0.2649\n",
      "Epoch 00002: val_loss improved from 1.76592 to 1.75244, saving model to Users/Naina/Stress\\Emotion_little_vgg.h5\n",
      "755/755 [==============================] - 232s 308ms/step - loss: 1.7724 - accuracy: 0.2649 - val_loss: 1.7524 - val_accuracy: 0.2765 - lr: 0.0010\n",
      "Epoch 3/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.7399 - accuracy: 0.2821\n",
      "Epoch 00003: val_loss improved from 1.75244 to 1.66264, saving model to Users/Naina/Stress\\Emotion_little_vgg.h5\n",
      "755/755 [==============================] - 233s 308ms/step - loss: 1.7399 - accuracy: 0.2821 - val_loss: 1.6626 - val_accuracy: 0.3293 - lr: 0.0010\n",
      "Epoch 4/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.6930 - accuracy: 0.3075\n",
      "Epoch 00004: val_loss improved from 1.66264 to 1.57970, saving model to Users/Naina/Stress\\Emotion_little_vgg.h5\n",
      "755/755 [==============================] - 233s 309ms/step - loss: 1.6930 - accuracy: 0.3075 - val_loss: 1.5797 - val_accuracy: 0.3676 - lr: 0.0010\n",
      "Epoch 5/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.6456 - accuracy: 0.3364\n",
      "Epoch 00005: val_loss improved from 1.57970 to 1.51193, saving model to Users/Naina/Stress\\Emotion_little_vgg.h5\n",
      "755/755 [==============================] - 236s 312ms/step - loss: 1.6456 - accuracy: 0.3364 - val_loss: 1.5119 - val_accuracy: 0.4187 - lr: 0.0010\n",
      "Epoch 6/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.5811 - accuracy: 0.3781\n",
      "Epoch 00006: val_loss improved from 1.51193 to 1.38241, saving model to Users/Naina/Stress\\Emotion_little_vgg.h5\n",
      "755/755 [==============================] - 235s 312ms/step - loss: 1.5811 - accuracy: 0.3781 - val_loss: 1.3824 - val_accuracy: 0.4748 - lr: 0.0010\n",
      "Epoch 7/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.5425 - accuracy: 0.4015\n",
      "Epoch 00007: val_loss improved from 1.38241 to 1.36719, saving model to Users/Naina/Stress\\Emotion_little_vgg.h5\n",
      "755/755 [==============================] - 236s 312ms/step - loss: 1.5425 - accuracy: 0.4015 - val_loss: 1.3672 - val_accuracy: 0.4748 - lr: 0.0010\n",
      "Epoch 8/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.5089 - accuracy: 0.4117\n",
      "Epoch 00008: val_loss did not improve from 1.36719\n",
      "755/755 [==============================] - 236s 312ms/step - loss: 1.5089 - accuracy: 0.4117 - val_loss: 1.3890 - val_accuracy: 0.4782 - lr: 0.0010\n",
      "Epoch 9/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.4841 - accuracy: 0.4263\n",
      "Epoch 00009: val_loss improved from 1.36719 to 1.33090, saving model to Users/Naina/Stress\\Emotion_little_vgg.h5\n",
      "755/755 [==============================] - 238s 315ms/step - loss: 1.4841 - accuracy: 0.4263 - val_loss: 1.3309 - val_accuracy: 0.4946 - lr: 0.0010\n",
      "Epoch 10/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.4559 - accuracy: 0.4377\n",
      "Epoch 00010: val_loss improved from 1.33090 to 1.26966, saving model to Users/Naina/Stress\\Emotion_little_vgg.h5\n",
      "755/755 [==============================] - 243s 321ms/step - loss: 1.4559 - accuracy: 0.4377 - val_loss: 1.2697 - val_accuracy: 0.5141 - lr: 0.0010\n",
      "Epoch 11/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.4443 - accuracy: 0.4429\n",
      "Epoch 00011: val_loss improved from 1.26966 to 1.24982, saving model to Users/Naina/Stress\\Emotion_little_vgg.h5\n",
      "755/755 [==============================] - 254s 336ms/step - loss: 1.4443 - accuracy: 0.4429 - val_loss: 1.2498 - val_accuracy: 0.5131 - lr: 0.0010\n",
      "Epoch 12/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.4278 - accuracy: 0.4456\n",
      "Epoch 00012: val_loss improved from 1.24982 to 1.22843, saving model to Users/Naina/Stress\\Emotion_little_vgg.h5\n",
      "755/755 [==============================] - 248s 328ms/step - loss: 1.4278 - accuracy: 0.4456 - val_loss: 1.2284 - val_accuracy: 0.5272 - lr: 0.0010\n",
      "Epoch 13/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.4146 - accuracy: 0.4556\n",
      "Epoch 00013: val_loss did not improve from 1.22843\n",
      "755/755 [==============================] - 237s 315ms/step - loss: 1.4146 - accuracy: 0.4556 - val_loss: 1.2962 - val_accuracy: 0.5037 - lr: 0.0010\n",
      "Epoch 14/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.4005 - accuracy: 0.4646\n",
      "Epoch 00014: val_loss improved from 1.22843 to 1.19430, saving model to Users/Naina/Stress\\Emotion_little_vgg.h5\n",
      "755/755 [==============================] - 236s 312ms/step - loss: 1.4005 - accuracy: 0.4646 - val_loss: 1.1943 - val_accuracy: 0.5363 - lr: 0.0010\n",
      "Epoch 15/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.3962 - accuracy: 0.4652\n",
      "Epoch 00015: val_loss did not improve from 1.19430\n",
      "755/755 [==============================] - 237s 314ms/step - loss: 1.3962 - accuracy: 0.4652 - val_loss: 1.2040 - val_accuracy: 0.5333 - lr: 0.0010\n",
      "Epoch 16/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.3802 - accuracy: 0.4693\n",
      "Epoch 00016: val_loss did not improve from 1.19430\n",
      "755/755 [==============================] - 247s 328ms/step - loss: 1.3802 - accuracy: 0.4693 - val_loss: 1.1965 - val_accuracy: 0.5309 - lr: 0.0010\n",
      "Epoch 17/25\n",
      "755/755 [==============================] - ETA: 0s - loss: 1.3783 - accuracy: 0.4745Restoring model weights from the end of the best epoch: 14.\n",
      "\n",
      "Epoch 00017: val_loss did not improve from 1.19430\n",
      "\n",
      "Epoch 00017: ReduceLROnPlateau reducing learning rate to 0.00020000000949949026.\n",
      "755/755 [==============================] - 274s 363ms/step - loss: 1.3783 - accuracy: 0.4745 - val_loss: 1.2185 - val_accuracy: 0.5323 - lr: 0.0010\n",
      "Epoch 00017: early stopping\n"
     ]
    }
   ],
   "source": [
    "from tensorflow.keras.optimizers import RMSprop,SGD,Adam\n",
    "from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping, ReduceLROnPlateau\n",
    "\n",
    "checkpoint = ModelCheckpoint('Users/Naina/Stress/Emotion_little_vgg.h5',\n",
    "                             monitor='val_loss',\n",
    "                             mode='min',\n",
    "                             save_best_only=True,\n",
    "                             verbose=1)\n",
    "\n",
    "earlystop = EarlyStopping(monitor='val_loss',\n",
    "                          min_delta=0,\n",
    "                          patience=3,\n",
    "                          verbose=1,\n",
    "                          restore_best_weights=True\n",
    "                          )\n",
    "\n",
    "reduce_lr = ReduceLROnPlateau(monitor='val_loss',\n",
    "                              factor=0.2,\n",
    "                              patience=3,\n",
    "                              verbose=1,\n",
    "                              min_delta=0.0001)\n",
    "\n",
    "callbacks = [earlystop,checkpoint,reduce_lr]\n",
    "\n",
    "model.compile(loss='categorical_crossentropy',\n",
    "              optimizer = Adam(lr=0.001),\n",
    "              metrics=['accuracy'])\n",
    "\n",
    "nb_train_samples = 24176\n",
    "nb_validation_samples = 3006\n",
    "epochs=25\n",
    "\n",
    "history=model.fit_generator(\n",
    "                train_generator,\n",
    "                steps_per_epoch=nb_train_samples//batch_size,\n",
    "                epochs=epochs,\n",
    "                callbacks=callbacks,\n",
    "                validation_data=validation_generator,\n",
    "                validation_steps=nb_validation_samples//batch_size)\n",
    "\n",
    "model.save('trained_model.hdf5')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "445672be",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABJQAAAKGCAYAAAAcZMHvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAADVIElEQVR4nOzdd3SU1cLF4d9Jh4SW0DsJvZcQelUBETsgiCKiINh79+p31WvvHRWxgiBSVKpKE5DeAwkQkCYQek893x8TEZEWSHJmJvtZK2sy87YdUZzsOee8xlqLiIiIiIiIiIjIuQpwHUBERERERERERHyLCiUREREREREREckWFUoiIiIiIiIiIpItKpRERERERERERCRbVCiJiIiIiIiIiEi2qFASEREREREREZFsUaEkIiIiThljyhtjxhlj1hpj1htj3jLGhJzlmKLGmNtPeF7WGPNdNq/7X2PMxeeb+3wYYxoZY6wxpvMZ9hlmjOmel7lEREREskuFkoiIiDhjjDHA98BYa201oDoQATx/lkOLAscLJWvtNmtttkoYa+1/rLU/Zy/xPxljgrJ5SG/gt6xHEREREZ+lQklERERc6ggcs9Z+BmCtzQDuA/obYwoaY/pljV6aZIxJMMY8nXXci0CMMWapMeYVY0xlY8xKgKxjxhpjfjDGbDDG3GmMud8Ys8QY87sxJjJrv2HGmO7GmNis8yw1xqwwxtis7TFZ111kjJlljKl5wnGvG2OmAS+d6w+aVZ51B/oBnYwxYX+9box51xgTb4z5CSh5wjH/McYsMMasNMYMyToHxpjpxpg3jDEzjTGrjTFNjTHfZ43yeu68/zREREREzpEKJREREXGpDrDoxBestQeATUDVrJfigD5AQ6CHMSYWeBRYb61taK196BTnrQtcn3Xs88ARa20jYC7Q96TrLcw6T0NgEvBq1qYhwF3W2ibAg8D7JxxWHbjYWvvAiefKmno34TQ/aytgg7V2PTAd6Jr1+tVADaAeMABoecIx71prm1pr6wIFgG4nbEu11rYFPgTGAXdk/dz9jDFRp8kgIiIikiNUKImIiIhLBrBneX2qtXa3tfYonulxrc/hvNOstQettcnAfuCHrNdXAJVPGcSYnkBj4FFjTASeYmeUMWYp8BFQ5oTdR2WNpvqHrKl3XU9+PUtvYETW9yP4e9pbW2C4tTbDWrsN+PWEYzoYY+YZY1bgGc1V54Rt40/4mVZZa/+01qYASUCF02QQERERyRHZnfcvIiIikpNWAdee+IIxpjCeQmQ90IR/F06nKqBOlnLC95knPM/kFO9/jDF1gP8D2lprM4wxAcC+rFFLp3L4HDKceP5APD/nFcaYJ/AUZlHGmEJZu/zrZ8qaEvc+EGut3WyMeQYIO2GXE3+mk39evccTERGRXKURSiIiIuLSL0BBY0xfOF68vAYMs9YeydrnEmNMpDGmAHAVMBs4CBQ6xfmyzRhTBM+Iob5ZI5r+mna3wRjTI2sfY4xpcAGXuRhYZq2tYK2tbK2tBIzG8/PMBHoZYwKNMWWADlnH/FUe7coaMaU7v4mIiIjXUKEkIiIizlhrLZ41hHoYY9YCicAx4PETdvsN+BJYCozOWvNoNzA7a7HqVy4wxlVAJeDjvxbnznq9D3CLMWYZnpFUV57tRGdYQ6k3MOak10bjWedpDLAWz9S1D4AZANbafcDHWa+PBRZk42cSERERyVXG8z5ORERExPsYY/rhmfJ1p+ssIiIiIvI3jVASEREREREREZFs0QglERERERERERHJFo1QEhERERERERGRbFGhJCIiIiIiIiIi2aJCSUREREREREREskWFkoiIiIiIiIiIZIsKJRERERERERERyRYVSiIiIiIiIiIiki0qlEREREREREREJFtUKImIiIiIiIiISLaoUBIRERERERERkWxRoSQiIiIiIiIiItmiQklERERERERERLJFhZKIiIiIiIiIiGSLCiUREREREREREckWFUoiIiIiIiIiIpItKpRERERERERERCRbVCiJiIiIiIiIiEi2qFASEREREREREZFsUaEkIiIiIiIiIiLZokJJRERERERERESyRYWSiIiIiIiIiIhkiwolERERERERERHJFhVKIiIiIiIiIiKSLSqUREREREREREQkW1QoiYiIiIiIiIhItqhQEhERERERERGRbFGhJCIiIiIiIiIi2aJCSUREREREREREskWFkoiIiIiIiIiIZIsKJRERERERERERyRYVSiIiIiIiIiIiki0qlEREREREREREJFtUKImIiIiIiIiISLaoUBIRERERERERkWxRoSQiIiIiIiIiItmiQklERERERERERLJFhZKIiIiIiIiIiGSLCiUREREREREREckWFUoiIiIiIiIiIpItKpRERERERERERCRbVCiJiIiIiIiIiEi2qFASEREREREREZFsUaEkIiIiIiIiIiLZokJJRERERERERESyRYWSiIiIiIiIiIhkiwolERERERERERHJFhVKIiIiIiIiIiKSLSqUREREREREREQkW1QoiYiIiIiIiIhItqhQEhERERERERGRbFGhJCIiIiIiIiIi2aJCSUREREREREREskWFkoiIiIiIiIiIZIsKJRERERERERERyRYVSiIiIiIiIiIiki0qlEREREREREREJFtUKImIiIiIiIiISLaoUBIRERERERERkWxRoSQiIiIiIiIiItmiQklERETETxhjuhhjEowx64wxj55ie3tjzH5jzNKsr/+csG2jMWZF1usL8za5iIiI+Jog1wFERERE5MIZYwKB94BLgC3AAmPMeGtt/Em7zrLWdjvNaTpYa3flZk4RERHxD35RKBUvXtxWrlzZdQwRERHJJYsWLdplrS3hOoeXiwPWWWuTAIwxI4ArgZMLpRyj92AiIiL+7UzvwfyiUKpcuTILF2pktoiIiL8yxvzhOoMPKAdsPuH5FqDZKfZrYYxZBmwDHrTWrsp63QJTjDEW+MhaO+RUFzHGDAQGAlSsWFHvwURERPzYmd6D+UWhJCIiIiKYU7xmT3q+GKhkrT1kjOkKjAWqZW1rZa3dZowpCUw1xqyx1s781wk9RdMQgNjY2JPPLyIiIvmEFuUWERER8Q9bgAonPC+PZxTScdbaA9baQ1nfTwCCjTHFs55vy3rcCYzBM4VORERE5JRUKImIiIj4hwVANWNMFWNMCNALGH/iDsaY0sYYk/V9HJ73gruNMeHGmEJZr4cDnYCVeZpeREREfIqmvImIiN9KS0tjy5YtHDt2zHUUOUdhYWGUL1+e4OBg11F8jrU23RhzJzAZCASGWmtXGWMGZW3/EOgODDbGpANHgV7WWmuMKQWMyeqagoBvrLWTnPwgIiIi4hNUKImIiN/asmULhQoVonLlymT9oixezFrL7t272bJlC1WqVHEdxydlTWObcNJrH57w/bvAu6c4LglokOsBRURExG9oypuIiPitY8eOERUVpTLJRxhjiIqK0ogyERERER+gQklERPyayiTfoj8vEREREd+gQklERERERERERLJFhZKIiEgu2b17Nw0bNqRhw4aULl2acuXKHX+empp6xmMXLlzI3XfffdZrtGzZMkeyTp8+nW7duuXIuURERETE/2lRbhERkVwSFRXF0qVLAXjmmWeIiIjgwQcfPL49PT2doKBT/684NjaW2NjYs15jzpw5OZJVRERERCQ7NEJJREQkD/Xr14/777+fDh068MgjjzB//nxatmxJo0aNaNmyJQkJCcA/Rww988wz9O/fn/bt2xMdHc3bb799/HwRERHH92/fvj3du3enZs2a9OnTB2stABMmTKBmzZq0bt2au+++O1sjkYYPH069evWoW7cujzzyCAAZGRn069ePunXrUq9ePd544w0A3n77bWrXrk39+vXp1avXhf/DEhERERGvpRFKIiKSL/zfD6uI33YgR89Zu2xhnr68TraPS0xM5OeffyYwMJADBw4wc+ZMgoKC+Pnnn3n88ccZPXr0v45Zs2YN06ZN4+DBg9SoUYPBgwcTHBz8j32WLFnCqlWrKFu2LK1atWL27NnExsZy2223MXPmTKpUqULv3r3POee2bdt45JFHWLRoEcWKFaNTp06MHTuWChUqsHXrVlauXAnAvn37AHjxxRfZsGEDoaGhx18TEREREf+kEUoiIiJ5rEePHgQGBgKwf/9+evToQd26dbnvvvtYtWrVKY+57LLLCA0NpXjx4pQsWZIdO3b8a5+4uDjKly9PQEAADRs2ZOPGjaxZs4bo6GiqVKkCkK1CacGCBbRv354SJUoQFBREnz59mDlzJtHR0SQlJXHXXXcxadIkChcuDED9+vXp06cPX3311Wmn8omIiIiIf9C7PRERyRfOZyRRbgkPDz/+/VNPPUWHDh0YM2YMGzdupH379qc8JjQ09Pj3gYGBpKenn9M+f017Ox+nO7ZYsWIsW7aMyZMn89577zFy5EiGDh3KTz/9xMyZMxk/fjzPPvssq1atUrEkIiIi4qc0QklERMSh/fv3U65cOQCGDRuW4+evWbMmSUlJbNy4EYBvv/32nI9t1qwZM2bMYNeuXWRkZDB8+HDatWvHrl27yMzM5Nprr+XZZ59l8eLFZGZmsnnzZjp06MDLL7/Mvn37OHToUI7/PCIiIiLiHfSxoYiIiEMPP/wwN910E6+//jodO3bM8fMXKFCA999/ny5dulC8eHHi4uJOu+8vv/xC+fLljz8fNWoUL7zwAh06dMBaS9euXbnyyitZtmwZN998M5mZmQC88MILZGRkcMMNN7B//36stdx3330ULVo0x38eEREREfEO5kKGwnuL2NhYu3DhQtcxRETEy6xevZpatWq5juHcoUOHiIiIwFrLHXfcQbVq1bjvvvtcxzqtU/25GWMWWWtjHUWS09B7MBEREf92pvdgeTrlzRgz1Biz0xiz8jTbixhjfjDGLDPGrDLG3JyX+URERPzRxx9/TMOGDalTpw779+/ntttucx1JRERERHxcXk95Gwa8C3xxmu13APHW2suNMSWABGPM19ba1LwKKCIi4m/uu+8+rx6RJCIiIiK+J09HKFlrZwJ7zrQLUMgYY4CIrH3/fRsbERERERERERFxxtvu8vYuUAvYBqwA7rHWZp5qR2PMQGPMQmPMwuTk5LzMKCIiIiIiIiKSr3lbodQZWAqUBRoC7xpjCp9qR2vtEGttrLU2tkSJErkSxlpLWsYp+ywRERERERERkXwrr9dQOpubgRet59Zz64wxG4CawHwXYb5btIWhszfyxnUNqFn6lL2WiIiIiIiIiJxJyiH4tg8EhkCpulCqjucxqioEelstIefK20YobQIuAjDGlAJqAEmuwhSPCCX54DGueGc2H81YT0amdRVFRER8UPv27Zk8efI/XnvzzTe5/fbbz3jMX7dh79q1K/v27fvXPs888wyvvvrqGa89duxY4uPjjz//z3/+w88//5yN9Kc2ffp0unXrdsHnERERkXxk/keQNB32bYI5b8PoW+D9ZvC/svBRWxh7O8x9D5JmwOHdrtPKOcrTKtAYMxxoDxQ3xmwBngaCAay1HwLPAsOMMSsAAzxird2VlxlP1KFmSSbf25bHx6zghYlr+GX1Tl7r2YAKkQVdRRIRER/Su3dvRowYQefOnY+/NmLECF555ZVzOn7ChAnnfe2xY8fSrVs3ateuDcB///vf8z6XiIiIyHk7th9mvw3VOkOfkZCeCrsSYcfKrK9VsO5nWPr138dElPaMYipd9+8RTcWrQ2Cwu59D/iWv7/LW21pbxlobbK0tb6391Fr7YVaZhLV2m7W2k7W2nrW2rrX2q7zMdypREaF8eEMTXuvRgNV/HqDLmzP5dsEmPLPyRERETq979+78+OOPpKSkALBx40a2bdtG69atGTx4MLGxsdSpU4enn376lMdXrlyZXbs8n6s8//zz1KhRg4svvpiEhITj+3z88cc0bdqUBg0acO2113LkyBHmzJnD+PHjeeihh2jYsCHr16+nX79+fPfddwD88ssvNGrUiHr16tG/f//j+SpXrszTTz9N48aNqVevHmvWrDnnn3X48OHUq1ePunXr8sgjjwCQkZFBv379qFu3LvXq1eONN94A4O2336Z27drUr1+fXr16ZfOfqoiIiPiUue/DsX3Q4XHP86AQT1HUoBd0eg5uHAMPJsKD6+DGsdDpeYjpCId3wu8fwPcD4IOW8HwZ+KA1fH+bp6Ba/ysc2unyJ8v3NFnxHBhjuLZJeZpFR/LQqOU8MnoFU+N38MI19SlRKNR1PBERORcTH4XtK3L2nKXrwaUvnnZzVFQUcXFxTJo0iSuvvJIRI0Zw3XXXYYzh+eefJzIykoyMDC666CKWL19O/fr1T3meRYsWMWLECJYsWUJ6ejqNGzemSZMmAFxzzTUMGDAAgCeffJJPP/2Uu+66iyuuuIJu3brRvXv3f5zr2LFj9OvXj19++YXq1avTt29fPvjgA+69914AihcvzuLFi3n//fd59dVX+eSTT876j2Hbtm088sgjLFq0iGLFitGpUyfGjh1LhQoV2Lp1KytXrgQ4Pn3vxRdfZMOGDYSGhp5ySp+IiIj4iSN7PFPZal0OZRueed+IEhDRAWI6/P1aRhrsXucZxbR9hedxw0xYPuLvfcJL/L0m01+jmUrUgCD9rp7bvG0NJa9WvlhBvr61GU91q83Mtbvo/OZMJq3803UsERHxYn9NewPPdLfevXsDMHLkSBo3bkyjRo1YtWrVP9Y7OtmsWbO4+uqrKViwIIULF+aKK644vm3lypW0adOGevXq8fXXX7Nq1aoz5klISKBKlSpUr14dgJtuuomZM2ce337NNdcA0KRJEzZu3HhOP+OCBQto3749JUqUICgoiD59+jBz5kyio6NJSkrirrvuYtKkSRQu7LnBRf369enTpw9fffUVQUH6bEtERMRvzXkbUg9B+8fP7/jAYChZC+p1h0v+D274Dh5YDQ8lwU0/QJcXoXpnOLoPFnwCYwfBR208azO93wK+uwWmvQDLvoXNCzzrM2m2UY7Ru7hsCggw3NK6Cm2rFef+kcsY9NVirmlcjmeuqEPhMM3nFBHxWmcYSZSbrrrqKu6//34WL17M0aNHady4MRs2bODVV19lwYIFFCtWjH79+nHs2LEznscYc8rX+/Xrx9ixY2nQoAHDhg1j+vTpZzzP2aZsh4Z6Ps0LDAwkPT39jPue7ZzFihVj2bJlTJ48mffee4+RI0cydOhQfvrpJ2bOnMn48eN59tlnWbVqlYolERERf3NoJ8z7COpeC6Vq5+y5w6OgSlvP118y0mFPEuzIGsm0YxVsng8rRwMnvFcJLQKRVSAy+t9fESXhNO+55N/07u08VStViO9vb8k7v6zlvenr+X39bl7t0YCWVYu7jiYiIl4kIiKC9u3b079//+Ojkw4cOEB4eDhFihRhx44dTJw4kfbt25/2HG3btqVfv348+uijpKen88MPP3DbbbcBcPDgQcqUKUNaWhpff/015cqVA6BQoUIcPHjwX+eqWbMmGzduZN26dVStWpUvv/ySdu3aXdDP2KxZM+655x527dpFsWLFGD58OHfddRe7du0iJCSEa6+9lpiYGPr160dmZiabN2+mQ4cOtG7dmm+++YZDhw5RtGjRC8ogIiIiXua3NyH9GLR/LG+uFxgEJap7vupe+/fr6Smw9w9P2XTi17YlED8ObMbf+waHZ5VLpyicCpWBgDya5GUtpB6GI7vgyG7PyKoju094vssznfCv5yHhcNvMs583h6lQugDBgQHc36kGHWqW5IGRy7j+k3n0b1WFh7vUICw40HU8ERHxEr179+aaa645PvWtQYMGNGrUiDp16hAdHU2rVq3OeHzjxo257rrraNiwIZUqVaJNmzbHtz377LM0a9aMSpUqUa9eveMlUq9evRgwYABvv/328cW4AcLCwvjss8/o0aMH6enpNG3alEGDBmXr5/nll18oX7788eejRo3ihRdeoEOHDlhr6dq1K1deeSXLli3j5ptvJjMzE4AXXniBjIwMbrjhBvbv34+1lvvuu09lkoiIiL85sA0WfgoNekPxqm6zBIX+XTSdLCMN9m2CPRv+WTYlr4HESZCResJ5wqBYlRMKpxNKpyIVIOAMHUBmBhzdm1UEZRVDJ5dCx7dlfaWfZvR6QBAULA4FozwjtUrX81zfAeMPdyuLjY21CxcudJrhaGoGL05czedz/6BqyQje6NmQeuWLOM0kIpLfrV69mlq1armOIdl0qj83Y8wia22so0hyGt7wHkxERLzQTw/AomFw1yIoVtl1mvOTmQEHtp40sumE4unEwicgGIpV+nva3NF9/yyJju7lH9PuThRaGApGnlASFT/F86zXwot79s/D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+++/T3Z2NnXq1OGTTz5h2bJlfPfdd8yePZuXXnqJsWPH8uKLL9KrVy/69evH9OnTeeSRR8jNzaVVq1YMGzaMsLAwatasya233sr48ePJycnhyy+/pEGDBn/KNXPmTBISErj++usZM2YMnTp1AmDXrl0MGjSIjRs3AjBs2DDatm3LyJEjef311zHG0LRpUz755BNuu+22E3kAoqOjyczMZNasWbzwwgtUrlyZZcuWsWbNGq666iq2bt1KVlYW999/PwMHDgRg8uTJPPnkk+Tl5RETE8MPP/xA/fr1mTdvHrGxseTn51OvXj0WLFhATEzMBX+ZNUNJRERERERERLymfPnyJCUlMXnyZMCdnXT99ddjjOHll18mOTmZFStWMHv2bFasWHHa/SxZsoTPPvuMn3/+ma+//prFixefeO6aa65h8eLFLF++nIYNG/LRRx/Rtm1bevfuzWuvvcayZcuIj48/sX1WVha33XYbn3/+OStXriQ3N5dhw4adeD4mJoalS5cyePDg0y6rGzNmDP379+fqq69mwoQJ5OTkAHDffffRsWNHli9fztKlS2ncuDGrV6/m5ZdfZsaMGSxfvpz//Oc/Z/13W7RoES+//PKJGVbDhw9nyZIlJCcn89Zbb7F371727NnDgAEDGDt2LMuXL+fLL78kKCiIm266iVGjRgEwbdo0mjVrVqhiEmiGkoiIiIiIiEjxdYaZREXp+LK3Pn368NlnnzF8+HAAvvjiC95//31yc3PZsWMHa9asoWnTpqfcx48//sjVV19NZGQkAL179z7x3KpVq3j66ac5cOAAmZmZXH755WfMs3btWmrVqkW9evUAuPXWW3n77bd54IEHALdABdCyZUu+/vrrP70+OzubiRMn8uabb1KyZElat27N1KlT6dmzJzNmzGDkyJEABAcHU7p0aUaOHEm/fv1OFHXKlSt31n+zpKQkatWqdeL+W2+9xbhx4wDYunUr69atY8+ePXTo0OHEdsf3e8cdd9CnTx8eeOABhg8fzu23337W452NCkoiIiIiIiIi4lVXXXUVDz30EEuXLuXo0aO0aNGCTZs28frrr7N48WLKli3LbbfdRlZW1hn3Y4w55eO33XYb33zzDc2aNWPEiBHMmjXrjPtxHOeMz4eFhQFuQSg3N/dPz0+ePJmMjAyaNGkCwJEjR4iMjKRnz56nPd6psoeEhJxo6O04DtnZ2Seei4qKOvH5rFmzmDZtGvPnzycyMpJOnTqRlZV12v1Wq1aNihUrMmPGDBYuXHhitlJhaMmbiIiIiIiIiHhVdHQ0nTp14o477jjRjPvgwYNERUVRunRpdu3axaRJk864jw4dOjBu3DiOHj3KoUOHGD9+/InnDh06ROXKlcnJyfld8aRkyZIcOnToT/tq0KABmzdvZv369QB88skndOzY8ZzPZ8yYMXz44Yds3ryZzZs3s2nTJqZOncqRI0fo2rXrieVzeXl5HDx4kK5du/LFF1+wd+9eAPbt2we4/aGWLFkCwLfffnti2dwfZWRkULZsWSIjI0lNTWXBggUAXHzxxcyePZtNmzb9br8Ad911FzfddBPXXXcdwcHB53xup6OCkoiIiIiIiIh4Xf/+/Vm+fDk33HADAM2aNaN58+Y0btyYO+64g3bt2p3x9S1atOD666/noosuom/fvlxyySUnnnvxxRdp3bo13bp1+10D7RtuuIHXXnuN5s2bs2HDhhOPh4eH8/HHH3PttdfSpEkTgoKCGDRo0Dmdx5EjR5gyZcrvZiNFRUXRvn17xo8fz3/+8x9mzpxJkyZNaNmyJatXr6Zx48Y89dRTdOzYkWbNmvHQQw8BMGDAAGbPnk1SUhILFy783aykk3Xv3p3c3FyaNm3KM888Q5s2bQCIjY3l/fff55prrqFZs2Zcf/31J17Tu3dvMjMzPbLcDcCcbVqXP0hMTHSSk5NtxxAREZEiYoxZ4jhOou0c8nsag4mI+KeUlBQaNmxoO4Z4WXJyMg8++CA//vjjKZ8/1ffFmcZg6qEkIiIiIiIiIhLAhg4dyrBhwzzSO+k4LXkTEREREREREQlgQ4YMYcuWLbRv395j+1RBSURERERERKSYCYT2N+I5F/L9oIKSiIiIiIiISDESHh7O3r17VVQSwC0m7d27l/Dw8PN6nXooiYiIiIiIiBQjcXFxpKens2fPHttRxEeEh4cTFxd3Xq9RQUlERERERESkGAkNDaVWrVq2Y4if05I3ERERERERERE5LyooiYiIiIiIiIjIeVFBSUREREREREREzosJhK7uxpg9wJYi2n0M8GsR7duX6DwDR3E4Ryge51kczhF0noGkKM+xhuM4sUW0b7lAGoN5RHE4z+JwjqDzDCTF4RyheJxncThHsDQGC4iCUlEyxiQ7jpNoO0dR03kGjuJwjlA8zrM4nCPoPANJcThH8Z7i8v1UHM6zOJwj6DwDSXE4Ryge51kczhHsnaeWvImIiIiIiIiIyHlRQUlERERERERERM6LCkpn977tAF6i8wwcxeEcoXicZ3E4R9B5BpLicI7iPcXl+6k4nGdxOEfQeQaS4nCOUDzOszicI1g6T/VQEhERERERERGR86IZSiIiIiIiIiIicl5UUBIRERERERERkfOigtIZGGO6G2PWGmPWG2OG2M7jacaYasaYmcaYFGPMamPM/bYzFSVjTLAx5mdjzATbWYqKMaaMMeYrY0xqwdf1YtuZPM0Y82DB9+sqY8wYY0y47UyeYIwZbozZbYxZddJj5YwxPxhj1hXclrWZ0RNOc56vFXzPrjDGjDPGlLEY0SNOdZ4nPfeIMcYxxsTYyOYppztHY8zfCn53rjbG/NNWPvFfgT7+Ao3BAk1xGH+BxmA2M3pCcRiDFYfxF/jWGEwFpdMwxgQDbwNXAI2A/saYRnZTeVwu8LDjOA2BNsA9AXiOJ7sfSLEdooj9B5jsOE4DoBkBdr7GmKrAfUCi4zgJQDBwg91UHjMC6P6Hx4YA0x3HqQtML7jv70bw5/P8AUhwHKcp8AvwhLdDFYER/Pk8McZUA7oBad4OVARG8IdzNMZ0BvoATR3HaQy8biGX+LFiMv4CjcECTUCPv0BjMDQG8xcjCPzxF/jQGEwFpdNLAtY7jrPRcZxs4DPcL1DAcBxnh+M4Sws+P4T7y6+q3VRFwxgTB/QEPrSdpagYY0oBHYCPABzHyXYc54DVUEUjBIgwxoQAkcB2y3k8wnGcOcC+PzzcB/hfwef/A67yZqaicKrzdBxnquM4uQV3FwBxXg/mYaf5egK8CTwG+P0VMU5zjoOBoY7jHCvYZrfXg4m/C/jxF2gMFkiK0fgLNAbza8VhDFYcxl/gW2MwFZROryqw9aT76QToL3oAY0xNoDmw0HKUovJv3B8i+ZZzFKXawB7g44Jp5R8aY6Jsh/Ikx3G24Vbb04AdQIbjOFPtpipSFR3H2QHuHx9ABct5vOEOYJLtEEXBGNMb2OY4znLbWYpQPeASY8xCY8xsY0wr24HE7xSr8RdoDBYAAn78BRqDoTGY3yom4y+wNAZTQen0zCkeC4iK5h8ZY6KBscADjuMctJ3H04wxvYDdjuMssZ2liIUALYBhjuM0Bw4TGNNzTyhYv94HqAVUAaKMMTfZTSWeYox5CncZyCjbWTzNGBMJPAU8aztLEQsByuIu4XkU+MIYc6rfpyKnU2zGX6AxWIAI+PEXaAwW6AJ1DFaMxl9gaQymgtLppQPVTrofR4BM6zyZMSYUdyAzynGcr23nKSLtgN7GmM24U+e7GGM+tRupSKQD6Y7jHH+H8yvcAU4guRTY5DjOHsdxcoCvgbaWMxWlXcaYygAFtwG7fMgYcyvQC/iL4ziB+MdjPO4gfHnBz6I4YKkxppLVVJ6XDnztuBbhzkjw++aX4lXFYvwFGoMFkOIw/gKNwTQG80/FZfwFlsZgKiid3mKgrjGmljGmBG7Tue8sZ/KogorlR0CK4zhv2M5TVBzHecJxnDjHcWrifh1nOI4TcO+oOI6zE9hqjKlf8FBXYI3FSEUhDWhjjIks+P7tSgA2vjzJd8CtBZ/fCnxrMUuRMcZ0Bx4HejuOc8R2nqLgOM5Kx3EqOI5Ts+BnUTrQouD/bSD5BugCYIypB5QAfrUZSPxOwI+/QGMwy7E8qpiMv0BjMI3B/FAxGn+BpTGYCkqnUdCc7F5gCu4Pyy8cx1ltN5XHtQNuxn23aFnBRw/boaRQ/gaMMsasAC4C/mE3jmcVvPv3FbAUWIn7M+x9q6E8xBgzBpgP1DfGpBtj7gSGAt2MMetwr0wx1GZGTzjNef4XKAn8UPBz6F2rIT3gNOcZUE5zjsOB2gWXsf0MuDUA3+2UIlRMxl+gMVigCejxF2gMhsZgfqE4jL/At8ZgRuM8ERERERERERE5H5qhJCIiIiIiIiIi50UFJREREREREREROS8qKImIiIiIiIiIyHlRQUlERERERERERM6LCkoiIiIiIiIiInJeVFASEREREREREZHzooKSiIiIiIiIiIicl/8HW82R3YEb1DkAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1440x720 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.figure(figsize=(20,10))\n",
    "plt.subplot(1, 2, 1)\n",
    "plt.suptitle('Optimizer : Adam', fontsize=10)\n",
    "plt.ylabel('Loss', fontsize=16)\n",
    "plt.plot(history.history['loss'], label='Training Loss')\n",
    "plt.plot(history.history['val_loss'], label='Validation Loss')\n",
    "plt.legend(loc='upper right')\n",
    "\n",
    "plt.subplot(1, 2, 2)\n",
    "plt.ylabel('Accuracy', fontsize=16)\n",
    "plt.plot(history.history['accuracy'], label='Training Accuracy')\n",
    "plt.plot(history.history['val_accuracy'], label='Validation Accuracy')\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e182e255",
   "metadata": {},
   "source": [
    "# Testing :)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "04f9d5a1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:Error in loading the saved optimizer state. As a result, your model is starting with a freshly initialized optimizer.\n",
      "angry : 21.751099\n",
      "disgust : 0.054468527\n",
      "fear : 5.193165\n",
      "happy : 0.0013106201\n",
      "sad : 70.66278\n",
      "surprise : 0.06525041\n",
      "neutral : 2.2719183\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from keras.preprocessing.image import img_to_array\n",
    "import cv2\n",
    "from keras.models import load_model\n",
    "import numpy as np\n",
    "# loading files\n",
    "haar_file=\"haarcascade_frontalface_default.xml\"\n",
    "emotion_model='_mini_XCEPTION.102-0.66.hdf5'\n",
    "\n",
    "cascade=cv2.CascadeClassifier(haar_file)\n",
    "emotion_classifier=load_model(emotion_model,compile=True)\n",
    "emotion_names=[\"angry\",\"disgust\",\"fear\", \"happy\", \"sad\", \"surprise\",\"neutral\"]\n",
    "#frame=cv2.imread('images/disgust_face.jpeg')\n",
    "#frame=cv2.imread('images/happy_face.jpeg')\n",
    "frame=cv2.imread('images/sad_face.png')\n",
    "#frame=cv2.imread('images/me_happy2.jpg')\n",
    "gray_frame=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)\n",
    "faces=cascade.detectMultiScale(gray_frame,1.5,5)\n",
    "text=[]\n",
    "for (x,y,w,h) in faces:\n",
    "    roi=gray_frame[y:y+h,x:x+w]\n",
    "    roi=cv2.resize(roi,(64,64))\n",
    "    roi=roi.astype(\"float\")/255.0\n",
    "    roi=img_to_array(roi)\n",
    "    roi=np.expand_dims(roi,axis=0)\n",
    "    \n",
    "    predicted_emotion=emotion_classifier.predict(roi)[0]\n",
    "    probab=np.max(predicted_emotion)\n",
    "    label=emotion_names[predicted_emotion.argmax()]\n",
    "    percen=predicted_emotion*100\n",
    "    for j in range(7):\n",
    "        text.append(emotion_names[j]+\" : \"+str(percen[j]))\n",
    "    for i in range(7):    \n",
    "        #cv2.putText(frame,text[i],(5,i*30+15),cv2.FONT_HERSHEY_SIMPLEX,0.8,(0,255,255),2)\n",
    "        print(text[i])\n",
    "    cv2.putText(frame,label,(x,y-10),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),1)\n",
    "    cv2.rectangle(frame,(x,y),(x+w,y+h),(0,0,255),2)\n",
    "cv2.imwrite('images/result.jpg', frame)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "80f0e226",
   "metadata": {},
   "source": [
    "# Recomendation ;)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "12260f63",
   "metadata": {},
   "outputs": [],
   "source": [
    "from playsound import playsound"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "4fb9e30d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Here are some song suggestions for your mood:\n",
      "https://www.youtube.com/watch?v=25ROFXjoaAU&feature=youtu.be\n",
      "https://www.youtube.com/watch?v=BzE1mX4Px0I\n",
      "Here are some tips to help you feel better:\n",
      "-> Do things you enjoy (or used to)\n",
      "-> Get quality exercise\n",
      "-> Eat a nutritious diet\n",
      "-> Challenge negative thinking\n",
      "Here are some resources that you may find beneficial:\n",
      "https://www.vandrevalafoundation.com/\n",
      "https://www.healthline.com/health/depression/recognizing-symptoms#fatigue\n",
      "https://www.youtube.com/watch?v=P6aPg3YBvBQ\n",
      "Listen to a tune that will soothe you.\n"
     ]
    }
   ],
   "source": [
    "#labels = [\"happy\", \"angry\", \"fear\", \"disgust\", \"sad\", \"surprised\", \"neutral\"]\n",
    "#label = \"sad\"\n",
    "tips = {\"fear\":[\"Drink water\",\"Get a good night's sleep\",\"Eat wholesome meals\",\"Go for a walk\",\"Turn off news feed/social media\",\"Talk to someone\"],\n",
    "        \"angry\":[\"Repeat gentle phrases to yourself\",\"Take a walk\",\"Use visualization to calm down\",\"Focus on your breathing\",\"Phone a friend\",\"Watch a stand up comedy\"],\n",
    "        \"sad\":[\"Do things you enjoy (or used to)\",\"Get quality exercise\",\"Eat a nutritious diet\",\"Challenge negative thinking\"]\n",
    "       }\n",
    "website_links = {\"fear\":[\"https://www.businessinsider.in/science/health/heres-how-to-take-care-of-yourself-if-youre-feeling-scared-or-sad-right-now/articleshow/55342883.cms\",\"https://mhanational.org/what-can-i-do-when-im-afraid\"],\n",
    "                 \"angry\":[\"https://www.thehotline.org/resources/how-to-cool-off-when-youre-angry/\",\"https://www.mayoclinic.org/healthy-lifestyle/adult-health/in-depth/anger-management/art-20045434\"],\n",
    "                 \"sad\":[\"https://www.vandrevalafoundation.com/\",\"https://www.healthline.com/health/depression/recognizing-symptoms#fatigue\"]\n",
    "                }\n",
    "youtube_links = {\"fear\":[\"https://www.youtube.com/watch?v=IAODG6KaNBc\"],\n",
    "                 \"angry\":[\"https://www.youtube.com/watch?v=P6aPg3YBvBQ\"],\n",
    "                 \"sad\":[\"https://www.youtube.com/watch?v=P6aPg3YBvBQ\"]\n",
    "                }\n",
    "song_links = {\"fear\":[\"https://www.youtube.com/watch?v=GyA8ccqwp-4&feature=youtu.be\",\"https://www.bing.com/videos/search?q=alone+part+2&docid=607990227673701963&mid=1B6860319511BF2C5CC21B6860319511BF2C5CC2&view=detail&FORM=VIRE\"],\n",
    "              \"angry\":[\"https://www.youtube.com/watch?v=e74wLJ_KRes&feature=youtu.be\",\"https://www.youtube.com/watch?v=JwWz-94a_Hk&feature=youtu.be\"],\n",
    "              \"sad\":[\"https://www.youtube.com/watch?v=25ROFXjoaAU&feature=youtu.be\",\"https://www.youtube.com/watch?v=BzE1mX4Px0I\"],\n",
    "              \"happy\":[\"https://www.youtube.com/watch?v=vGZhMIXH62M\",\"https://www.youtube.com/watch?v=Pkh8UtuejGw\"]\n",
    "             }\n",
    "tunes = {\"fear\":'fear.mp3',\n",
    "         \"angry\":'angry.mp3',\n",
    "         \"sad\":'sad.mp3'\n",
    "         }\n",
    "\n",
    "if (label == \"happy\"):\n",
    "    # songs\n",
    "    print(\"Here are some song suggestions for your mood:\")\n",
    "    for s in song_links.get('happy'):\n",
    "        print(s)\n",
    "\n",
    "elif (label == \"angry\"):\n",
    "    # songs\n",
    "    print(\"Here are some song suggestions for your mood:\")\n",
    "    for s in song_links.get('angry'):\n",
    "        print(s)\n",
    "    # tips\n",
    "    print(\"Here are some tips to help you feel better:\")\n",
    "    for i in tips.get('angry'):\n",
    "        print(\"-> \"+i)\n",
    "    # resources\n",
    "    print(\"Here are some resources that you may find beneficial:\")\n",
    "    for j in website_links.get('angry'):\n",
    "        print(j)\n",
    "    for k in youtube_links.get('angry'):\n",
    "        print(k)\n",
    "    # tunes\n",
    "    print(\"Here's a tune that will help you calm down.\")\n",
    "    playsound(tunes.get('angry'))\n",
    "\n",
    "elif (label == \"fear\"):\n",
    "    # songs\n",
    "    print(\"Here are some song suggestions for your mood:\")\n",
    "    for s in song_links.get('fear'):\n",
    "        print(s)\n",
    "    # tips\n",
    "    print(\"Here are some tips to help you feel better:\")\n",
    "    for i in tips.get('fear'):\n",
    "        print(\"-> \"+i)\n",
    "    # resources\n",
    "    print(\"Here are some resources that you may find beneficial:\")\n",
    "    for j in website_links.get('fear'):\n",
    "        print(j)\n",
    "    for k in youtube_links.get('fear'):\n",
    "        print(k)\n",
    "    # tunes\n",
    "    print(\"Here's a tune that will make you feel better.\")\n",
    "    playsound(tunes.get('fear'))\n",
    "\n",
    "elif (label == \"sad\"):\n",
    "    # songs\n",
    "    print(\"Here are some song suggestions for your mood:\")\n",
    "    for s in song_links.get('sad'):\n",
    "        print(s)\n",
    "    # tips\n",
    "    print(\"Here are some tips to help you feel better:\")\n",
    "    for i in tips.get('sad'):\n",
    "        print(\"-> \"+i)\n",
    "    # resources\n",
    "    print(\"Here are some resources that you may find beneficial:\")\n",
    "    for j in website_links.get('sad'):\n",
    "        print(j)\n",
    "    for k in youtube_links.get('sad'):\n",
    "        print(k)\n",
    "    # tunes\n",
    "    print(\"Listen to a tune that will soothe you.\")\n",
    "    playsound(tunes.get('sad'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c7beaf66",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}