BCIPY est une bibliothèque pour mener des expériences d'interface cerveau-ordinateur dans Python. Il fonctionne comme une application autonome pour la collecte de données expérimentales ou vous pouvez prendre les outils dont vous avez besoin et commencer à coder votre propre système. Consultez notre documentation officielle BCIPY, y compris les affiliations et plus d'informations sur le contexte ici.
Il fonctionnera sur les dernières Windows (7, 10, 11), Linux (Ubuntu 22.04) et MacOS (Big Sur). D'autres versions peuvent également fonctionner, mais ne sont pas garanties. Pour voir les versions prises en charge et les systèmes d'exploitation à ce jour, consultez ici: BCIPY Builds.
Veuillez nous citer lorsque vous utilisez!
Memmott, T., Koçanaoğulları, A., Lawhead, M., Klee, D., Dudy, S., Fried-Oken, M., & Oken, B. (2021). BciPy: brain–computer interface software in Python. Brain-Computer Interfaces, 1-18.
Ce projet nécessite Python 3.8 ou 3.9. Veuillez consulter les notes ci-dessous pour des dépendances spécifiques au système d'exploitation supplémentaires avant que l'installation puisse être terminée et référencer notre documentation / FAQ pour plus d'informations: https://bcipy.github.io/hardware-os-config/
Vous devrez installer les conditions préalables définies dans scriptsshelllinux_requirements.sh ainsi que pip install attrdict3 .
Si vous utilisez une machine Windows, vous devrez installer les outils de construction Microsoft Visual C ++.
Python 3.9 seulement! Vous devrez installer PywinHook manuellement. Voir ici pour le fichier de roue approprié ( pyWinhook‑1.6.2‑cp39‑cp39‑win_amd64.whl ). Ensuite, exécutez pip install <path_to_wheel_file> . Nous incluons également le fichier de roue 64 bits dans le répertoire .bcipy/downloads/ .
Si vous utilisez un Mac, vous devrez installer Xcode et activer les outils de ligne de commande. xcode-select --install . Si vous utilisez une puce M1 / 2, vous devrez utiliser le script d'installation dans scripts/shell/m2chip_install.sh pour installer les conditions préalables. Vous devrez peut-être également utiliser le terminal Rosetta pour exécuter le script d'installation, mais cela n'a pas été nécessaire dans nos tests à l'aide de puces M2.
Si vous utilisez Zsh, au lieu de Bash, vous pouvez rencontrer un défaut de ségmentation lors de l'exécution de BCIPY. Cela est dû à un problème dans une dépendance de la psychopie sans aucune correction connue. Veuillez utiliser Bash au lieu de Zsh pour l'instant.
Afin d'exécuter BCIPY sur votre ordinateur, après avoir suivi les dépendances ci-dessus, vous devrez installer le package BCIPY.
Pour installer pour une utilisation localement et l'utilisation de l'interface graphique:
pip install kenlm==0.1 --global-option="--max_order=12" .pip install psychopy==2023.2.1 --no-deps .pip install -e .Si vous souhaitez la dernière version de PYPI et pour construire à l'aide de modules:
pip install bcipyAlternativement, si la fabrication est installée, vous pouvez exécuter la commande suivante pour installer:
# install in development mode
make dev-install Invoquez un protocole d'expérience ou une tâche directement à l'aide de l'utilitaire de ligne de commande bcipy .
bcipy --helpbcipy --user "bci_user" --task "RSVP Calibration"bcipy --user "bci_user" --experiment "default"bcipy --fakebcipy --novizbcipy --alertbcipy --parameters "path/to/valid/parameters.json" Pour former un modèle de signal (actuellement PCARDAKDE ), exécutez la commande suivante après l'installation de BCIPY:
bcipy-train
bcipy-train --helpbcipy-train -d path/to/databcipy-train -vbcipy-train -sbcipy-train --balanced-accbcipy-train --alertbcipy-train -p "path/to/valid/parameters.json" Pour générer des parcelles qui peuvent être affichées ou enregistrées après la collecte de données, exécutez la commande suivante après l'installation de BCIPY:
bcipy-erp-viz
bcipy-erp-viz --helpbcipy-erp-viz -s path/to/databcipy-erp-viz --showbcipy-erp-viz --savebcipy-erp-viz -p "path/to/valid/parameters.json" Le simulateur peut être exécuté à l'aide de l'utilitaire de ligne de commande bcipy-sim .
Ex. bcipy-sim -d my_data_folder/ -p my_parameters.json -m my_models/ -n 5
Exécutez bcipy-sim --help pour la documentation ou consultez la lecture dans le module du simulateur.
from bcipy . helpers import system_utils
system_utils . get_system_info ()Exécutez la commande suivante dans votre terminal pour démarrer l'interface graphique BCIPY:
python bcipy/gui/BCInterface.pyAlternativement, si la fabrication est installée, vous pouvez exécuter la commande suivante pour démarrer l'interface graphique à partir du répertoire racine BCIPY:
make bci-guiStimuli : une seule lettre, un ton ou une image indiquée (généralement dans une enquête). Singulier = stimulus, pluriel = stimuli.
Essai : une collecte de données après un stimuli est montré. UN----
Enquête : l'ensemble des stimuli après une croix de fixation dans une tâche d'orthographe pour recueillir l'intention des utilisateurs. A ---- b --- c ----
Série : Chaque série contient au moins une enquête. Une décision de lettre / icône est prise après une série dans une tâche d'orthographe.
Session : données collectées pour une tâche. Composé de métadonnées sur la tâche et une liste de séries.
Protocole : une collection de tâches et d'actions à exécuter dans une session. Ceci est défini comme dans les expériences et peut être enregistré à l'aide de l'interface graphique BCIPY.
Tâche : une conception expérimentale avec des stimuli, des essais, des demandes et des séries pour une utilisation dans BCI. Par exemple, "Calibration RSVP" est une tâche.
Mode : Éléments de conception courants entre les types de tâches. Par exemple, l'étalonnage et l'orthographe libre sont des modes.
Paradigme : Afficher le paradigme avec des propriétés et des modes uniques. Ex. Présentation visuelle sériale rapide (RSVP), orthographe matricielle, potentiel évoqué visuel en régime permanent (SSVEP).
Il s'agit d'une liste des principaux modules et de leurs fonctionnalités. Chaque module contiendra son propre réadme, démo et tests. Veuillez les consulter pour plus d'informations!
acquisition : acquiert des données, redonne les séries chronologiques souhaitées, enregistre dans le fichier à la fin de la session.display : gère l'affichage des stimuli à l'écran et transmet la synchronisation des stimuli.signal : Modèles de signal EEG, modèles de signaux de regard, filtres, traitement, évaluateurs et téléspectateurs.gui : interface de l'utilisateur final dans les tâches BCI enregistrées et l'édition des paramètres. Voir bcinterface.py.helpers : fonctions utiles nécessaires pour les interactions entre les modules, les E / S de base et la visualisation des données.language : donne des probabilités de symboles suivants pendant la saisie.parameters : Emplacement des paramètres JSON. Cela inclut Paramètres.json (configuration de l'expérience principale / application) et device.json (Registre et configuration de périphériques).static : Image et stimuli sonores, manuels divers et textes lisibles pour GUI.task : BCIPY a implémenté les tâches utilisateur. Principale collection de modules BCI à utiliser lors de diverses expérimentations. Ex. Étalonnage RSVP.feedback : Mécanismes de rétroaction pour les stimuli sonores et visuels.main : exécuteur de l'exécuteur des expériences. Point d'entrée principal dans l'applicationconfig : paramètres de configuration pour l'application, y compris les chemins de données et les noms de fichiers de données.simulator : fournit une prise en charge de l'exécution de simulations basées sur les données précédemment collectées. Voir bcipy/task/README.md pour plus d'informations sur tous les paradigmes, tâches, actions et modes pris en charge. Voici les paradigmes pris en charge et validés:
RSVPKeyboard
*RSVP KeyboardTM* is an EEG (electroencephalography) based BCI (brain computer interface) typing system. It utilizes a visual presentation technique called rapid serial visual presentation (RSVP). In RSVP, the options are presented rapidly at a single location with a temporal separation. Similarly in RSVP KeyboardTM, the symbols (the letters and additional symbols) are shown at the center of screen. When the subject wants to select a symbol, they await the intended symbol during the presentation and elicit a p300 response to a target symbol.
Citation:
Orhan, U., Hild, K. E., 2nd, Erdogmus, D., Roark, B., Oken, B., & Fried-Oken, M. (2012). RSVP Keyboard: An EEG Based Typing Interface. Proceedings of the ... IEEE International Conference on Acoustics, Speech, and Signal Processing. ICASSP (Conference), 10.1109/ICASSP.2012.6287966. https://doi.org/10.1109/ICASSP.2012.6287966
Orthographe matricielle
Matrix Speller is an EEG (electroencephalography) based BCI (brain computer interface) typing system. It utilizes a visual presentation technique called Single Character Presentation (SCP). In matrix speller, the symbols are arranged in a matrix with fixed number of rows and columns. Using SCP, subsets of these symbols are intensified (i.e. highlighted) usually in pseudorandom order to produce an odd ball paradigm to induce p300 responses.
Citation:
Farwell, L. A., & Donchin, E. (1988). Talking off the top of your head: toward a mental prosthesis utilizing event-related brain potentials. Electroencephalography and clinical Neurophysiology, 70(6), 510-523.
Ahani A, Moghadamfalahi M, Erdogmus D. Language-Model Assisted And Icon-based Communication Through a Brain Computer Interface With Different Presentation Paradigms. IEEE Trans Neural Syst Rehabil Eng. 2018 Jul 25. doi: 10.1109/TNSRE.2018.2859432.
Toutes les principales fonctions et modules ont des fichiers de démonstration et de test qui leur sont associés qui peuvent être exécutés localement. Cela devrait vous aider à vous orienter vers la fonctionnalité et à servir de documentation. Si vous ajoutez au dépôt, vous devez ajouter des tests et fixer tout test qui échoue lorsque vous modifiez le code.
Par exemple, vous pouvez exécuter la démo BCIPY principale par:
python demo/bci_main_demo.py
Cette démo se chargera dans les paramètres et exécutera une tâche de démonstration définie dans le fichier. Il y a des fichiers de démonstration contenus dans la plupart des modules, à l'exception de l'interface graphique, du signal et des paramètres. Exécutez-les comme un script Python!
La détermination du décalage statique et la correction sont des étapes critiques avant de commencer une expérience. BCIPY utilise LSL pour acquérir des données EEG et une psychopie pour présenter des stimuli.
Documentation de synchronisation LSL documentation de synchronisation psychopie
Un décalage statique est le décalage horaire régulier entre nos signaux et nos stimuli. Ce décalage est déterminé par des tests via une photodiode ou un autre mécanisme de déclenchement. La correction du décalage est effectuée en décalant le signal EEG par le décalage déterminé en utilisant le paramètre static_offset .
Après avoir exécuté une tâche de vérification de synchronisation (telle que RSVPtiMingVerification) avec une photodiode attachée à l'affichage et connectée à un périphérique, le décalage peut être déterminé en analysant les données. Utilisez le module offset pour recommander une valeur de correction de décalage et afficher les résultats.
Pour exécuter la détermination du décalage et imprimer les résultats, utilisez la commande suivante:
python bcipy/helpers/offset.py -rAprès avoir exécuté la commande ci-dessus, la valeur de correction de décalage recommandée sera affichée dans le terminal et peut être transmise pour déterminer la stabilité du système et afficher les résultats.
# Let's say the recommneded offset value is 0.1
python bcipy/helpers/offset.py --offset " 0.1 " -pAlternativement, si la fabrication est installée, vous pouvez exécuter la commande suivante pour exécuter la détermination du décalage et afficher les résultats:
make offset-recommend Lors de la rédaction de tests, placez-les dans le module correct, dans un dossier de tests, et préfixez le fichier et testez-le avec test_ afin que PyTest le découvre. Voir d'autres tests de module pour des exemples!
Les exigences de développement doivent être installées avant l'exécution: pip install -r dev_requirements.txt
Pour exécuter tous les tests, dans la ligne de commande:
py . testPour exécuter un seul Modules Tests (Ex. Acquisition), dans la ligne de commande:
py . test acquisitionPour générer des mesures de couverture de test, dans la ligne de commande:
coverage run --branch --source=bcipy -m pytest --mpl -k " not slow "
# Generate a command line report
coverage report
# Generate html doc in the bci folder. Navigate to index.html and click.
coverage htmlAlternativement, si la fabrication est installée, vous pouvez exécuter la commande suivante pour exécuter la couverture / pytest et générer le HTML:
make coverage-html Ce projet applique des directives de style PEP à l'aide de flake8.
Pour éviter de passer du temps inutile à la mise en forme, nous vous recommandons d'utiliser autopep8 . Vous pouvez spécifier un fichier ou un répertoire au format automatique. Lorsque vous êtes prêt à pousser votre code, vous pouvez exécuter les commandes suivantes pour formater votre code:
# autoformat all files in bcipy
autopep8 --in-place --aggressive -r bcipy
# autoformat only the processor file
autopep8 --in-place --aggressive bcipy/acquisition/processor.py Enfin, exécutez le chèque de peluche: flake8 bcipy .
Alternativement, si la fabrication est installée, vous pouvez exécuter la commande suivante pour exécuter Autoperp8 et Flake8:
make lint Ce projet applique la vérification du type mypy . La configuration du projet de frappe se trouve dans le fichier mypy.ini. Pour exécuter la vérification de type, exécutez la commande suivante:
mypy bcipyPour générer un rapport, exécutez la commande suivante:
mypy --html-report bcipyAlternativement, si la fabrication est installée, vous pouvez exécuter la commande suivante pour exécuter mypy:
make typeSi vous souhaitez être ajouté à l'équipe de développement Slack ou si vous avez des questions supplémentaires, veuillez nous contacter à [email protected]!
Nous suivons et appliquons l'alliance du contributeur pour favoriser un environnement sûr et inclusif pour ce logiciel open source, veuillez référencer ce lien pour plus d'informations: https://www.contributeur-covenant.org/
Autres directives:
Voir cette ressource pour des exemples: http://docs.python-guide.org/en/latest/writing/style/
Toutes les contributions sont grandement appréciées!