BCIPY es una biblioteca para realizar experimentos de interfaz de computadoras cerebrales en Python. Funciona como una aplicación independiente para la recopilación de datos experimentales o puede tomar las herramientas que necesita y comenzar a codificar su propio sistema. Consulte nuestra documentación oficial de BCIPY, incluidas afiliaciones y más información de contexto aquí.
Se ejecutará en los últimos Windows (7, 10, 11), Linux (Ubuntu 22.04) y MacOS (Big Sur). Otras versiones también pueden funcionar, pero no están garantizadas. Para ver versiones compatibles y sistemas operativos a partir de este lanzamiento, vea aquí: BCIPY BUSTA.
¡Por favor cíquanos al usar!
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.
Este proyecto requiere Python 3.8 o 3.9. Consulte las notas a continuación para obtener dependencias específicas adicionales del sistema operativo antes de que se pueda completar la instalación y haga referencia a nuestra documentación/preguntas frecuentes para obtener más información: https://bcipy.github.io/hardware-os-config/
Deberá instalar los requisitos previos definidos en scriptsshelllinux_requirements.sh así como pip install attrdict3 .
Si está utilizando una máquina Windows, deberá instalar las herramientas de compilación de Microsoft Visual C ++.
Python 3.9 solamente! Deberá instalar Pywinhook manualmente. Vea aquí el archivo de rueda apropiado ( pyWinhook‑1.6.2‑cp39‑cp39‑win_amd64.whl ). Luego ejecute pip install <path_to_wheel_file> . También incluimos el archivo de rueda de 64 bits en el directorio .bcipy/downloads/ .
Si está utilizando una Mac, deberá instalar Xcode y habilitar herramientas de línea de comandos. xcode-select --install . Si usa un chip M1/2, deberá usar el script de instalación en scripts/shell/m2chip_install.sh para instalar los requisitos previos. También es posible que deba usar el terminal Rosetta para ejecutar el script de instalación, pero esto no ha sido necesario en nuestras pruebas utilizando chips M2.
Si usa ZSH, en lugar de BASH, puede encontrar una falla de segementación al ejecutar BCIPY. Esto se debe a un problema en una dependencia de la psicopia sin una solución conocida hasta ahora. Utilice Bash en lugar de ZSH por ahora.
Para ejecutar BCIPY en su computadora, después de seguir las dependencias anteriores, deberá instalar el paquete BCIPY.
Para instalar para usar localmente y el uso de la GUI:
pip install kenlm==0.1 --global-option="--max_order=12" .pip install psychopy==2023.2.1 --no-deps .pip install -e .Si desea la última versión de Pypi y construir usando módulos:
pip install bcipyAlternativamente, si se instala MAYA, puede ejecutar el comando de siguiente para instalar:
# install in development mode
make dev-install Invoca un protocolo o tarea experimental directamente utilizando la utilidad de línea de comandos 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" Para entrenar un modelo de señal (actualmente PCARDAKDE ), ejecute el siguiente comando después de instalar 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" Para generar gráficos que se pueden mostrar o guardar después de la recopilación de datos, ejecute el siguiente comando después de instalar 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" El simulador se puede ejecutar utilizando la utilidad de línea de comandos bcipy-sim .
Ex. bcipy-sim -d my_data_folder/ -p my_parameters.json -m my_models/ -n 5
Ejecute bcipy-sim --help para documentación o vea el ReadMe en el módulo de simulador.
from bcipy . helpers import system_utils
system_utils . get_system_info ()Ejecute el siguiente comando en su terminal para iniciar la GUI BCIPY:
python bcipy/gui/BCInterface.pyAlternativamente, si se instala la marca, puede ejecutar el comando de siguiente para iniciar la GUI desde el directorio root de BCIPY:
make bci-guiEstímulos : una sola letra, tono o imagen que se muestra (generalmente en una consulta). Singular = estímulo, plural = estímulos.
Prueba : se muestra una recopilación de datos después de un estímulo. A----
Consulta : el conjunto de estímulos después de una cruz de fijación en una tarea de ortografía para reunir la intención del usuario. A ---- B --- C ----
Serie : cada serie contiene al menos una consulta. Se toma una decisión de letra/ícono después de una serie en una tarea de ortografía.
Sesión : datos recopilados para una tarea. Compuesto por metadatos sobre la tarea y una lista de series.
Protocolo : una colección de tareas y acciones que se ejecutarán en una sesión. Esto se define como dentro de los experimentos y se puede registrar utilizando la GUI BCIPY.
Tarea : un diseño experimental con estímulos, pruebas, consultas y series para su uso en BCI. Por ejemplo, la "calibración RSVP" es una tarea.
Modo : elementos de diseño comunes entre los tipos de tareas. Por ejemplo, la calibración y la ortografía libre son modos.
Paradigma : Mostrar paradigma con propiedades y modos únicos. Ex. Presentación visual rápida-serial (RSVP), Speller de matriz, potencial evocado visual de estado estacionario (SSVEP).
Esta es una lista de los módulos principales y su funcionalidad. Cada módulo contendrá su propio readme, demostración y pruebas. ¡Por favor, échales un vistazo para obtener más información!
acquisition : adquiere datos, devuelve la serie de tiempo deseada, guarda para archivar al final de la sesión.display : maneja la visualización de estímulos en la pantalla y pasa el tiempo de estímulos.signal : modelos de señal EEG, modelos de señal de mirada, filtros, procesamiento, evaluadores y espectadores.gui : interfaz de usuario final en tareas BCI registradas y edición de parámetros. Ver bcinterface.py.helpers : funciones útiles necesarias para interacciones entre módulos, E/S básica y visualización de datos.language : da probabilidades de los siguientes símbolos durante la escritura.parameters : ubicación de los parámetros JSON. Esto incluye parámetros.json (configuración principal del experimento / aplicación) y dispositivo.json (registro y configuración del dispositivo).static : estímulos de imagen y sonido, manuales misceláneos y textos legibles para la GUI.task : BCIPY implementó tareas de usuario. Principal colección de módulos BCI para su uso durante varias experimentos. Ex. Calibración de RSVP.feedback : Mecanismos de retroalimentación para estímulos sólidos y visuales.main : Ejecutor de experimentos. Punto de entrada principal en la aplicaciónconfig : Parámetros de configuración para la aplicación, incluidas las rutas y los nombres de archivo de datos.simulator : proporciona soporte para la ejecución de simulaciones basadas en datos recopilados previamente. Consulte bcipy/task/README.md para obtener más información sobre todos los paradigmas, tareas, acciones y modos compatibles. Los siguientes son los paradigmas compatibles y validados:
Tablero de teclado RSVP
*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.
Citación:
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
Ortográfico de matriz
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.
Citación:
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.
Todas las funciones y módulos principales tienen archivos de demostración y prueba asociados con ellos que pueden ejecutarse localmente. Esto debería ayudarlo a orientarlo a la funcionalidad y servir como documentación. Si agrega al repositorio, debe agregar pruebas y arreglar cualquier prueba que falle cuando cambia el código.
Por ejemplo, puede ejecutar la demostración principal de BCIPY por:
python demo/bci_main_demo.py
Esta demostración se cargará en parámetros y ejecutará una tarea de demostración definida en el archivo. Hay archivos de demostración contenidos en la mayoría de los módulos, excepto la GUI, la señal y los parámetros. ¡Ejecutarlos como un guión de Python!
La determinación y corrección de compensación estática son pasos críticos antes de comenzar un experimento. BCIPY utiliza LSL para adquirir datos de EEG y psicopía para presentar estímulos.
Documentación de sincronización LSL Documentación de tiempo de psicoy
Un desplazamiento estático es la diferencia de tiempo regular entre nuestras señales y estímulos. Este desplazamiento se determina mediante pruebas a través de un fotodiodo u otro mecanismo de activación. La corrección de desplazamiento se realiza cambiando la señal EEG mediante el desplazamiento determinado usando el parámetro static_offset .
Después de ejecutar una tarea de verificación de sincronización (como RSVPTIMINGEVERIFICACIÓN) con un fotodiodo conectado a la pantalla y conectado a un dispositivo, el desplazamiento se puede determinar analizando los datos. Use el módulo offset para recomendar un valor de corrección de desplazamiento y mostrar los resultados.
Para ejecutar la determinación de desplazamiento e imprimir los resultados, use el siguiente comando:
python bcipy/helpers/offset.py -rDespués de ejecutar el comando anterior, el valor de corrección de desplazamiento recomendado se mostrará en el terminal y se puede pasar para determinar la estabilidad del sistema y mostrar los resultados.
# Let's say the recommneded offset value is 0.1
python bcipy/helpers/offset.py --offset " 0.1 " -pAlternativamente, si se instala MAYA, puede ejecutar el comando FIJO para ejecutar la determinación de offset y mostrar los resultados:
make offset-recommend Al escribir pruebas, colóquelas en el módulo correcto, en una carpeta de pruebas, y prefije el archivo y pruebe con test_ para que Pytest lo descubra. ¡Vea otras pruebas de módulo para ver ejemplos!
Los requisitos de desarrollo deben instalarse antes de ejecutar: pip install -r dev_requirements.txt
Para ejecutar todas las pruebas, en la línea de comando:
py . testPara ejecutar una sola prueba de módulos (ex. Adquisición), en la línea de comando:
py . test acquisitionPara generar métricas de cobertura de prueba, en la línea de comando:
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 htmlAlternativamente, si se instala la marca, puede ejecutar el comando siguiente para ejecutar cobertura/pytest y generar el html:
make coverage-html Este proyecto aplica las pautas de estilo PEP usando Flake8.
Para evitar pasar el tiempo innecesario en el formato, recomendamos usar autopep8 . Puede especificar un archivo o directorio para formato automático. Cuando está listo para presionar su código, puede ejecutar los siguientes comandos para formatear su código:
# autoformat all files in bcipy
autopep8 --in-place --aggressive -r bcipy
# autoformat only the processor file
autopep8 --in-place --aggressive bcipy/acquisition/processor.py Finalmente, ejecute la verificación de la pelusa: flake8 bcipy .
Alternativamente, si se instala MAYA, puede ejecutar el comando FIJO para ejecutar AutoPep8 y Flake8:
make lint Este proyecto aplica la verificación del tipo de mypy . La configuración del proyecto de escritura se encuentra en el archivo mypy.ini. Para ejecutar la verificación de tipo, ejecute el siguiente comando:
mypy bcipyPara generar un informe, ejecute el siguiente comando:
mypy --html-report bcipyAlternativamente, si se instala la marca, puede ejecutar el comando siguiente para ejecutar mypy:
make typeSi desea que lo agregen al equipo de desarrollo Slack o tenga preguntas adicionales, ¡comuníquese con nosotros a [email protected]!
Seguimos y aplicaremos el pacto del contribuyente para fomentar un entorno seguro e inclusivo para este software de código abierto, consulte este enlace para obtener más información: https://www.contributor-dovenant.org/
Otras pautas:
Vea este recurso para ejemplos: http://docs.python-guide.org/en/latest/writing/style/
¡Todas las contribuciones son muy apreciadas!