Dataset de test et d'entraînement

Ce projet nécessite l'assemblage et l'utilisation d'un casque OpenBCI afin d'acquérir et de traiter des signaux électroencéphalographiques (EEG) en provenance du cerveau. Cependant, des retards dans l'acheminement du casque (qui est commandé des États-Unis) et dans son assemblage bloquent la progression de l'équipe dans l'évaluation des algorithmes de traitement du signal et d'intelligence artificielle. Ainsi, il apparaît évident que nous aurons besoin d'utiliser un dataset de signaux EEG réels afin de pouvoir tester nos fonctions sans avoir besoin d'utiliser le casque neuronal.

Au cours du projet, nous exploiterons ainsi les données du dataset BCI Competition 2008 2a. L'expérience sous-jacente de ce dataset est relativement simple. 9 sujets furent sélectionnés et étaient assis confortablement devant un écran leur donnant des instructions. L'enregistrement des signaux fut possible grâce à un set de 22 électrodes allouées aux acquisitions EEG et 3 électrodes dédiées aux enregistrements électro-oculographiques (EOG) afin de filtrer les artéfacts oculaires liés aux clignements ou aux mouvements des yeux. Les sujets ont dû réaliser deux sessions d'enregistrement : la première servant à titre d'entraînement (T) et la seconde à titre d'évaluation (E).

Pour chaque session, 3 essais furent réalisés afin de supprimer les artéfacts oculaires consistant respectivement à procéder à des enregistrements EOG avec les yeux ouverts, les yeux fermés et avec des mouvement des yeux. Ensuite, chaque sujet devait répéter un essai 288 fois. Le schéma ci-dessous présente la structure générale de l'expérience.

Les essais sont décomposés de la manière suivante : un bip signale au sujet le début de l'essai courant puis une croix de fixation apparaît pendant 2 secondes. Dès lors, un symbole apparaît afin de demander au sujet d'effectuer un mouvement parmi 4 classes correspondant respectivement à un mouvement imaginé de la main gauche (classe 1), à un mouvement imaginé de la main droite (classe 2), à un mouvement imaginé du pied (classe 3) ou à un mouvement imaginé de la langue. Le sujet maintient alors le mouvement puis peut observer une pause avant d'enchaîner sur le prochain essai. Il est important de noter que les essais sont programmés de manière à ce qu'il y ait le même nombre d'essais réalisés pour chaque classe (soit 72 essais). La figure suivante détaille le processus.

Ce dataset contient 18 fichiers .gdf contenant des signaux EEG/EOG et 18 fichiers .mat associés correspondant aux étiquettes des classes, c'est-à-dire décrivant pour chaque essai de chaque session pour chaque sujet la tâche mentale qui lui était demandée.

Un programme Python nommé import_data.py a été entièrement développé par l'équipe de traitement du signal. Celui-ci permet l'extraction des données de ce dataset par le biais d'une fonction nommée generate_usable_data.

Cette fonction prend en paramètre une chaîne de caractère indiquant le nom du sujet dont on souhaite récupérer les données EEG (par exemple “A07T”). Elle renvoie ensuite une matrice Numpy dont les indices permettent les accès suivants :

Indice 1 : permet de sélectionner le canal d'acquisition, de 0 (pour l'électrode 1) à 24 (pour l'électrode 25). Il est bon de noter que seules les canaux 0 à 22 sont des canaux EEG. Les autres correspondent aux signaux EOG (électro-oculogrammes) utilisés pour l'expérience.

Indice 2 : permet de sélectionner l'essai dont on souhaite récupérer le signal (entre 0 et 287).

Indice 3 : permet de sélectionner la variable à consulter (0 pour le signal et 1 pour le temps).

Indice 4 : permet de sélectionner un point particulier dans le signal de l'essai considéré (peu utile, il s'agit de l'ensemble des valeurs à considérer).

Elle renvoie aussi un tableau d'entiers contenant les labels pour chaque essai (1 pour un mouvement imaginé de la main gauche, 2 pour un mouvement imaginé de la main droite, 3 pour un mouvement imaginé de la langue et 4 pour un mouvement imaginé des pieds).

Ainsi, on peut par exemple accéder aux valeurs EEG et au label correspondant pour le sujet A05E sur le canal 5 et l'essai 247 de la manière suivante :

data,labels = generate_usable_data(“A05E”) donneeEEG_essai247 = data[5,247,0] label_essai247 = labels[247]

Ce programme pourra se révéler pratique tout au long du projet afin de tester nos algorithmes de traitement du signal et d'intelligence artificielle sans avoir à procéder à un enregistrement réel de données EEG. Cela permet donc un gain de temps, une possibilité accrue d'adaptabilité et un meilleur respect de la confidentialité des données personnelles en limitant le nombre de données nécessaires.