Added Smoothing methods

parent ab0ed01f
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"cells": [ "cells": [
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 1, "execution_count": 38,
"id": "ddaddef7", "id": "ddaddef7",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
...@@ -17,6 +17,14 @@ ...@@ -17,6 +17,14 @@
"from varname import nameof\n", "from varname import nameof\n",
"import matplotlib.pyplot as plt\n", "import matplotlib.pyplot as plt\n",
"\n", "\n",
"# single exponential smoothing\n",
"from statsmodels.tsa.holtwinters import SimpleExpSmoothing\n",
"\n",
"from scipy.signal import savgol_filter\n",
"\n",
"from statsmodels.nonparametric.kernel_regression import KernelReg\n",
"\n",
"\n",
"mp_face_mesh = mp.solutions.face_mesh\n", "mp_face_mesh = mp.solutions.face_mesh\n",
"face_mesh = mp_face_mesh.FaceMesh(min_detection_confidence=0.5, min_tracking_confidence=0.5)\n", "face_mesh = mp_face_mesh.FaceMesh(min_detection_confidence=0.5, min_tracking_confidence=0.5)\n",
"\n", "\n",
...@@ -244,7 +252,7 @@ ...@@ -244,7 +252,7 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 6, "execution_count": 6,
"id": "afaa8cf4", "id": "76fa937f",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
...@@ -262,7 +270,7 @@ ...@@ -262,7 +270,7 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 7, "execution_count": 7,
"id": "a8563fbf", "id": "c253af13",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
...@@ -288,7 +296,7 @@ ...@@ -288,7 +296,7 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 8, "execution_count": 8,
"id": "281362d2", "id": "39c681f9",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
...@@ -310,7 +318,7 @@ ...@@ -310,7 +318,7 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 9, "execution_count": 9,
"id": "3f5e2e86", "id": "67d7552f",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
...@@ -336,7 +344,7 @@ ...@@ -336,7 +344,7 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 16, "execution_count": 16,
"id": "dbcdcd78", "id": "c02d4191",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
...@@ -361,10 +369,135 @@ ...@@ -361,10 +369,135 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 40,
"id": "3b2327ad", "id": "60e94db4",
"metadata": {},
"outputs": [],
"source": [
"def smoothing(list_considered):\n",
" \n",
" count = 0\n",
" frame_count, yaw, pitch, roll = [], [], [], []\n",
" \n",
" for record in list_considered:\n",
" count += 1\n",
" frame_count.append(count)\n",
" yaw.append(record[0])\n",
" pitch.append(record[1])\n",
" roll.append(record[2])\n",
" \n",
" \n",
" single_exponential_smoothing(yaw, frame_count)\n",
" \n",
" savgol_filtering_smoothing(yaw, frame_count)\n",
" \n",
" kernel_regression_smoothing(yaw, frame_count)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "9b26ec2e",
"metadata": {},
"outputs": [],
"source": [
"def single_exponential_smoothing(list_considered, frame_count): \n",
" # create class\n",
" model = SimpleExpSmoothing(list_considered)\n",
" \n",
" # fit model\n",
" model_fit = model.fit()\n",
" \n",
" # make prediction\n",
" yhat = model_fit.predict()\n",
" \n",
" print(yhat)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "1c147f94",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [
"def savgol_filtering_smoothing(list_considered, frame_count):\n",
" x = frame_count\n",
" y = list_considered\n",
" \n",
" #filter size = 15 to consider half a second\n",
" yhat = savgol_filter(y, 15, 3)\n",
"\n",
" plt.plot(x, y, color='green')\n",
" plt.plot(x, yhat, color='red')\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "4e99b996",
"metadata": {},
"outputs": [],
"source": [
"def kernel_regression_smoothing(list_considered, frame_count):\n",
" x = frame_count\n",
" y = list_considered\n",
" \n",
" kr = KernelReg(y,x,'c')\n",
" plt.plot(x, y, '+')\n",
" y_pred, y_std = kr.fit(y)\n",
"\n",
" plt.plot(x, y_pred)\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 49,
"id": "dbec1b8c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"End of video input\n",
"[-10.65248915]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[INFO] FINISHED PROCESSING\n"
]
}
],
"source": [ "source": [
"#video details\n", "#video details\n",
"VIDEO_STREAM = 'test_videos/me/dark_far_right.mp4'\n", "VIDEO_STREAM = 'test_videos/me/dark_far_right.mp4'\n",
...@@ -372,7 +505,7 @@ ...@@ -372,7 +505,7 @@
"output_folder = 'result_analysis/me/' + video_name\n", "output_folder = 'result_analysis/me/' + video_name\n",
"\n", "\n",
"#to save details of rotational angles\n", "#to save details of rotational angles\n",
"raw_rot_angle_records, smoothed_rot_angle_records, diff_rot_angle_records = [], [], []\n", "raw_rot_angle_records, diff_rot_angle_records, single_exponential_smoothed_rot_angle_records = [], [], []\n",
"\n", "\n",
"#processing\n", "#processing\n",
"get_rotational_angles()\n", "get_rotational_angles()\n",
...@@ -382,20 +515,7 @@ ...@@ -382,20 +515,7 @@
"if not (os.path.isdir(output_folder)):\n", "if not (os.path.isdir(output_folder)):\n",
" os.makedirs(output_folder, mode = 0o777, exist_ok = False)\n", " os.makedirs(output_folder, mode = 0o777, exist_ok = False)\n",
" \n", " \n",
"write_to_csv_rot_angles(raw_rot_angle_records, output_folder + '/' + video_name + '_raw_rotational_angles.csv')\n", "smoothing(raw_rot_angle_records)\n",
"\n",
"find_diff_rot_angles(raw_rot_angle_records)\n",
"write_to_csv_rot_angles(diff_rot_angle_records, output_folder + '/' + video_name + '_diff_rotational_angles.csv')\n",
"\n",
" #plotting and saving graphs\n",
"output_folder_graphs = output_folder + '/graphs'\n",
" #check if specified path for graphs exists, if not create it\n",
"if not (os.path.isdir(output_folder_graphs)):\n",
" os.makedirs(output_folder_graphs, mode = 0o777, exist_ok = False)\n",
" \n",
"\n",
"plot_rot_angles(output_folder_graphs, \"Raw\", raw_rot_angle_records) \n",
"plot_rot_angles(output_folder_graphs, \"Differences in\", diff_rot_angle_records) \n",
" \n", " \n",
"print('[INFO] FINISHED PROCESSING')" "print('[INFO] FINISHED PROCESSING')"
] ]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment