From 981b0f7e552bfd85c48ee3362d597da43c5c6c50 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?OTH=C3=89GUY=20Marion?= <marion.otheguy@imt-atlantique.fr>
Date: Fri, 14 Mar 2025 09:32:32 +0000
Subject: [PATCH] Upload New File

---
 preprocessing.ipynb | 279 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 279 insertions(+)
 create mode 100644 preprocessing.ipynb

diff --git a/preprocessing.ipynb b/preprocessing.ipynb
new file mode 100644
index 0000000..7de2d44
--- /dev/null
+++ b/preprocessing.ipynb
@@ -0,0 +1,279 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "#Libs\n",
+    "import cv2\n",
+    "import numpy as np\n",
+    "import pandas as pd\n",
+    "from tabulate import tabulate\n",
+    "import matplotlib.pyplot as plt"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Methods"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def split_on_nan_row(recording):\n",
+    "    # Split the DataFrame into subdatasets\n",
+    "    subdatasets = []\n",
+    "    current_subdataset = []\n",
+    "\n",
+    "    for index, row in recording.iterrows():\n",
+    "        if pd.isna(row['x1']) and pd.isna(row['y1']) and pd.isna(row['x2']) and pd.isna(row['y2']):\n",
+    "            if current_subdataset:\n",
+    "                subdatasets.append(pd.DataFrame(current_subdataset))\n",
+    "                current_subdataset = []\n",
+    "        elif pd.isna(row['x1']) and pd.isna(row['y1']) and row['x2'] and row['y2']:\n",
+    "            if current_subdataset:\n",
+    "                subdatasets.append(pd.DataFrame(current_subdataset))\n",
+    "                current_subdataset = []\n",
+    "        elif row['x1'] and row['y1'] and pd.isna(row['x2']) and pd.isna(row['y2']):\n",
+    "            if current_subdataset:\n",
+    "                subdatasets.append(pd.DataFrame(current_subdataset))\n",
+    "                current_subdataset = []\n",
+    "        else:\n",
+    "            if index > 0:\n",
+    "                prev_row = recording.iloc[index - 1]\n",
+    "                if not (pd.isna(prev_row['x1']) and pd.isna(prev_row['y1']) and pd.isna(prev_row['x2']) and pd.isna(prev_row['y2'])):\n",
+    "                    current_subdataset.append(row)\n",
+    "\n",
+    "        # Append the last subdataset if it exists\n",
+    "    if current_subdataset:\n",
+    "        subdatasets.append(pd.DataFrame(current_subdataset))\n",
+    "\n",
+    "    for i in range(len(subdatasets)):\n",
+    "        if len(subdatasets[i]) < 10:\n",
+    "            subdatasets.pop(i)\n",
+    "            break\n",
+    "    return subdatasets"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def get_average_points(subdatasets):\n",
+    "    average_points = []\n",
+    "\n",
+    "    for i in subdatasets:\n",
+    "        x1 = i['x1'].mean() \n",
+    "        y1 = i['y1'].mean()\n",
+    "        x2 = i['x2'].mean()\n",
+    "        y2 = i['y2'].mean()\n",
+    "        average_points.append((x1, y1, x2, y2))\n",
+    "\n",
+    "    return average_points"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def correct_points_orientation(list_of_points, label):\n",
+    "    average_points_corrected = []\n",
+    "    for i in range(len(list_of_points)):\n",
+    "        x1, y1, x2, y2 = list_of_points[i]\n",
+    "        if x1 < x2:\n",
+    "            x1, x2 = x2, x1\n",
+    "            y1, y2 = y2, y1\n",
+    "        average_points_corrected.append((x1, y1, x2, y2, label[i]))\n",
+    "    return average_points_corrected"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Variables"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Angular error\n",
+    "angle_error = np.radians(0.25)  # 0.25°\n",
+    "\n",
+    "# Define the positions of the eyes  (world coordinates)\n",
+    "coord_left_eye = np.array([-3.25, 0, 0])\n",
+    "coord_right_eye = np.array([3.25, 0, 0])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Recordings"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "label1 = ['infini', '25c', '25up', '25r', '50c', '50up', '50r', '75c', '75up', '75r', '200c', '200up', '200r' ]\n",
+    "\n",
+    "recording1_left = pd.read_csv('./recording1/centroids_left.csv')\n",
+    "recording1_right = pd.read_csv('./recording1/centroids_right.csv')\n",
+    "\n",
+    "# Retenir seulement les images non noirs\n",
+    "subdatasets1_left = split_on_nan_row(recording1_left)\n",
+    "subdatasets1_right = split_on_nan_row(recording1_right)\n",
+    "\n",
+    "# Recupérer les points moyens pour les douze points de fixations\n",
+    "average_points_left1 = get_average_points(subdatasets1_left)\n",
+    "average_points_right1 = get_average_points(subdatasets1_right)\n",
+    "\n",
+    "# Verifier qu'il n'y a pas d'échanges entre les centroides 1 et 2\n",
+    "average_points_left_corrected1, average_points_right_corrected1 = correct_points_orientation(average_points_left1, label1), correct_points_orientation(average_points_right1, label1)\n",
+    "\n",
+    "xy_eye_left1 = np.column_stack(([(average_points_left_corrected1[i][0] + average_points_left_corrected1[i][2])/2 for i in range(len(average_points_left_corrected1))], [(average_points_left_corrected1[i][1] + average_points_left_corrected1[i][3])/2 for i in range(len(average_points_left_corrected1))]))\n",
+    "xy_eye_right1 = np.column_stack(([(average_points_right_corrected1[i][0] + average_points_right_corrected1[i][2])/2 for i in range(len(average_points_right_corrected1))], [(average_points_right_corrected1[i][1] + average_points_right_corrected1[i][3])/2 for i in range(len(average_points_right_corrected1))]))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Recording 2"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "label2 = ['infini', '25c', '50c', '75c', '200c', '25up', '50up', '75up', '200up', '25r', '50r',  '75r', '200r' ]\n",
+    "\n",
+    "recording2_left = pd.read_csv('./recording2/centroids_left.csv')\n",
+    "recording2_left = recording2_left.drop([11474])\n",
+    "recording2_left = recording2_left.reset_index(drop=True)\n",
+    "\n",
+    "recording2_right = pd.read_csv('./.recording2/centroids_right.csv')\n",
+    "recording2_right = recording2_right.drop([319, 5926, 7611, 10201, 11500, 12791])\n",
+    "recording2_right = recording2_right.reset_index(drop=True)\n",
+    "\n",
+    "subdatasets2_left = split_on_nan_row(recording2_left)\n",
+    "subdatasets2_right = split_on_nan_row(recording2_right)\n",
+    "\n",
+    "average_points_left2 = get_average_points(subdatasets2_left)\n",
+    "average_points_right2 = get_average_points(subdatasets2_right)\n",
+    "\n",
+    "average_points_left_corrected2, average_points_right_corrected2 = correct_points_orientation(average_points_left2, label2), correct_points_orientation(average_points_right2, label2)\n",
+    "\n",
+    "xy_eye_left2 = np.column_stack(([(average_points_left_corrected2[i][0] + average_points_left_corrected2[i][2])/2 for i in range(len(average_points_left_corrected2))], [(average_points_left_corrected2[i][1] + average_points_left_corrected2[i][3])/2 for i in range(len(average_points_left_corrected2))]))\n",
+    "xy_eye_right2 = np.column_stack(([(average_points_right_corrected2[i][0] + average_points_right_corrected2[i][2])/2 for i in range(len(average_points_right_corrected2))], [(average_points_right_corrected2[i][1] + average_points_right_corrected2[i][3])/2 for i in range(len(average_points_right_corrected2))]))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Recording 3"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "label3 = ['infini', '75c', '75up', '50up', '75r', '50r', '200c', '25c', '25r', '50c', '200r', '25up', '200up']\n",
+    "\n",
+    "recording3_left = pd.read_csv('./recording3/centroids_left.csv')\n",
+    "recording3_right = pd.read_csv('./recording3/centroids_right.csv')\n",
+    "recording3_right = recording3_right.drop([9268, 10181, 11001, 12687])\n",
+    "recording3_right = recording3_right.reset_index(drop=True)\n",
+    "\n",
+    "subdatasets3_left = split_on_nan_row(recording3_left)\n",
+    "subdatasets3_right = split_on_nan_row(recording3_right)\n",
+    "\n",
+    "average_points_left3 = get_average_points(subdatasets3_left)\n",
+    "average_points_right3 = get_average_points(subdatasets3_right)\n",
+    "\n",
+    "average_points_left_corrected3, average_points_right_corrected3 = correct_points_orientation(average_points_left3, label3), correct_points_orientation(average_points_right3, label3)\n",
+    "\n",
+    "xy_eye_left3 = np.column_stack(([(average_points_left_corrected3[i][0] + average_points_left_corrected3[i][2])/2 for i in range(len(average_points_left_corrected3))], [(average_points_left_corrected3[i][1] + average_points_left_corrected3[i][3])/2 for i in range(len(average_points_left_corrected3))]))\n",
+    "xy_eye_right3 = np.column_stack(([(average_points_right_corrected3[i][0] + average_points_right_corrected3[i][2])/2 for i in range(len(average_points_right_corrected3))], [(average_points_right_corrected3[i][1] + average_points_right_corrected3[i][3])/2 for i in range(len(average_points_right_corrected3))]))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Recording 4"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "label4 = ['infini', '25up', '200c', '200up', '75c', '25c', '50c', '200r', '25r', '75r', '75up', '50up', '50r' ]\n",
+    "\n",
+    "recording4_left = pd.read_csv('./recording4/centroids_left.csv')\n",
+    "recording4_left = recording4_left.drop([1971,1972, 4402, 6891,7982,9011, 10229, 10434, 12390, 13182])\n",
+    "recording4_left = recording4_left.reset_index(drop=True)\n",
+    "\n",
+    "recording4_right = pd.read_csv('./recording4/centroids_right.csv')\n",
+    "recording4_right = recording4_right.drop([1960, 4394, 8170, 10423, 13177])\n",
+    "recording4_right = recording4_right.reset_index(drop=True)\n",
+    "\n",
+    "subdatasets4_left = split_on_nan_row(recording4_left)\n",
+    "subdatasets4_right = split_on_nan_row(recording4_right)\n",
+    "\n",
+    "average_points_left4 = get_average_points(subdatasets4_left)\n",
+    "average_points_right4 = get_average_points(subdatasets4_right)\n",
+    "\n",
+    "average_points_left_corrected4, average_points_right_corrected4 = correct_points_orientation(average_points_left4, label4), correct_points_orientation(average_points_right4, label4)\n",
+    "\n",
+    "xy_eye_left4 = np.column_stack(([(average_points_left_corrected4[i][0] + average_points_left_corrected4[i][2])/2 for i in range(len(average_points_left_corrected4))], [(average_points_left_corrected4[i][1] + average_points_left_corrected4[i][3])/2 for i in range(len(average_points_left_corrected4))]))\n",
+    "xy_eye_right4 = np.column_stack(([(average_points_right_corrected4[i][0] + average_points_right_corrected4[i][2])/2 for i in range(len(average_points_right_corrected4))], [(average_points_right_corrected4[i][1] + average_points_right_corrected4[i][3])/2 for i in range(len(average_points_right_corrected4))]))"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "img_pro",
+   "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.12.0"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
-- 
GitLab