O BCIPY é uma biblioteca para conduzir experimentos de interface cerebral-computador em Python. Ele funciona como um aplicativo independente para a coleta experimental de dados ou você pode pegar as ferramentas necessárias e começar a codificar seu próprio sistema. Consulte nossa documentação oficial do BCIPY, incluindo afiliações e mais informações de contexto aqui.
Ele será executado no Windows mais recente (7, 10, 11), Linux (Ubuntu 22.04) e MacOS (Big Sur). Outras versões também podem funcionar, mas não são garantidas. Para ver versões suportadas e sistemas operacionais A partir desta versão, consulte aqui: BCIPY Builds.
Por favor, cite -nos ao 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 projeto requer Python 3.8 ou 3.9. Veja as notas abaixo para obter dependências específicas adicionais do sistema operacional antes da instalação pode ser concluída e faça referência a nossa documentação/perguntas frequentes para obter mais informações: https://bcipy.github.io/hardware-os-os-os-os-fonfig/
Você precisará instalar os pré -requisitos definidos nos scriptsshelllinux_requirements.sh bem como pip install attrdict3 .
Se você estiver usando uma máquina Windows, precisará instalar as ferramentas de construção do Microsoft Visual C ++.
Somente Python 3.9! Você precisará instalar o Pywinhook manualmente. Veja aqui o arquivo de roda apropriado ( pyWinhook‑1.6.2‑cp39‑cp39‑win_amd64.whl ). Em seguida, execute pip install <path_to_wheel_file> . Também incluímos o arquivo de roda de 64 bits no .bcipy/downloads/ diretório.
Se você estiver usando um Mac, precisará instalar o Xcode e ativar as ferramentas de linha de comando. xcode-select --install . Se estiver usando um chip M1/2, você precisará usar o script de instalação no scripts/shell/m2chip_install.sh para instalar os pré -requisitos. Você também pode precisar usar o terminal Rosetta para executar o script de instalação, mas isso não foi necessário em nossos testes usando chips M2.
Se estiver usando o ZSH, em vez de Bash, você poderá encontrar uma falha na segemação ao executar o BCIPY. Isso se deve a um problema em uma dependência de psicopia, sem nenhuma correção conhecida ainda. Por favor, use Bash em vez de ZSH por enquanto.
Para executar o BCIPY no seu computador, depois de seguir as dependências acima, você precisará instalar o pacote BCIPY.
Para instalar para uso localmente e uso da GUI:
pip install kenlm==0.1 --global-option="--max_order=12" .pip install psychopy==2023.2.1 --no-deps .pip install -e .Se desejar a versão mais recente da Pypi e construir usando módulos:
pip install bcipyComo alternativa, se for instalado, você poderá executar o comando a seguir para instalar:
# install in development mode
make dev-install Invoque um protocolo de experimento ou tarefa diretamente usando o utilitário de linha de comando 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 treinar um modelo de sinal (atualmente PCARDAKDE ), execute o seguinte comando depois de instalar o 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 gerar gráficos que podem ser mostrados ou salvos após a coleta de dados, execute o seguinte comando após a instalação do 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" O simulador pode ser executado usando o utilitário de linha de comando bcipy-sim .
Ex. bcipy-sim -d my_data_folder/ -p my_parameters.json -m my_models/ -n 5
Execute bcipy-sim --help para documentação ou consulte o ReadMe no módulo simulador.
from bcipy . helpers import system_utils
system_utils . get_system_info ()Execute o seguinte comando em seu terminal para iniciar a GUI BCIPY:
python bcipy/gui/BCInterface.pyComo alternativa, se for instalado, você poderá executar o comando a seguir para iniciar a GUI no diretório raiz do BCIPY:
make bci-guiEstímulos : uma única letra, tom ou imagem mostrada (geralmente em uma investigação). Singular = estímulo, plural = estímulos.
Trial : Uma coleção de dados após um estímulo é mostrada. UM----
Inquérito : o conjunto de estímulos após um cruzamento de fixação em uma tarefa de ortografia para reunir a intenção do usuário. A ---- b --- c ----
Série : Cada série contém pelo menos uma investigação. Uma decisão de carta/ícone é tomada após uma série em uma tarefa de ortografia.
Sessão : dados coletados para uma tarefa. Composto por metadados sobre a tarefa e uma lista de séries.
Protocolo : uma coleção de tarefas e ações a serem executadas em uma sessão. Isso é definido como em experimentos e pode ser registrado usando a GUI BCIPY.
Tarefa : Um desenho experimental com estímulos, ensaios, consultas e séries para uso no BCI. Por exemplo, "Calibração RSVP" é uma tarefa.
Modo : elementos de design comuns entre os tipos de tarefas. Por exemplo, calibração e ortografia livre são modos.
Paradigma : Exibir paradigma com propriedades e modos exclusivos. Ex. Apresentação visual rápida-série (RSVP), Matrix Speller, potencial evocado visual em estado estacionário (SSVEP).
Esta é uma lista dos principais módulos e sua funcionalidade. Cada módulo conterá seu próprio readme, demonstração e testes. Por favor, verifique -os para obter mais informações!
acquisition : adquire dados, oferece séries temporais desejadas, salvadas para arquivar no final da sessão.display : alças exibição de estímulos na tela e passa o tempo dos estímulos.signal : Modelos de sinal EEG, modelos de sinal de olhar, filtros, processamento, avaliadores e espectadores.gui : Interface do usuário final em tarefas BCI registradas e edição de parâmetros. Veja BCInterface.py.helpers : funções úteis necessárias para interações entre módulos, E/S básica e visualização de dados.language : fornece probabilidades dos próximos símbolos durante a digitação.parameters : Localização dos parâmetros JSON. Isso inclui parâmetros.json (configuração principal de experimento / aplicativo) e dispositivo.json (registro e configuração do dispositivo).static : estímulos de imagem e som, manuais Misc e textos legíveis para a GUI.task : BCIPY implementou tarefas de usuário. Coleção principal de módulos BCI para uso durante várias experimentações. Ex. Calibração RSVP.feedback : mecanismos de feedback para estímulos sólidos e visuais.main : Executor de experimentos. Ponto de entrada principal no aplicativoconfig : parâmetros de configuração para o aplicativo, incluindo caminhos e nomes de arquivos de dados.simulator : fornece suporte para executar simulações com base nos dados coletados anteriormente. Consulte bcipy/task/README.md para obter mais informações sobre todos os paradigmas, tarefas, ações e modos suportados. A seguir, estão os paradigmas suportados e validados:
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.
Citação:
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
Matrix Speller
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.
Citação:
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 as principais funções e módulos têm demonstração e arquivos de teste associados a eles que podem ser executados localmente. Isso deve ajudá -lo a orientá -lo para a funcionalidade e servir como documentação. Se você adicionar ao repositório, deverá adicionar testes e corrigir qualquer teste que falhe ao alterar o código.
Por exemplo, você pode executar a demo principal do BCIPY por:
python demo/bci_main_demo.py
Essa demonstração carregará em parâmetros e executará uma tarefa de demonstração definida no arquivo. Existem arquivos de demonstração contidos na maioria dos módulos, exceto a GUI, o sinal e os parâmetros. Execute -os como um script python!
A determinação e correção do deslocamento estático são etapas críticas antes de iniciar um experimento. O BCIPY usa o LSL para adquirir dados de EEG e psicopy para apresentar estímulos.
Documentação de sincronização LSL Documentação de tempo de psicopópica
Um deslocamento estático é a diferença de tempo regular entre nossos sinais e estímulos. Esse deslocamento é determinado através do teste por meio de um fotodiodo ou outro mecanismo de acionamento. A correção de deslocamento é feita mudando o sinal EEG pelo deslocamento determinado usando o parâmetro static_offset .
Após a execução de uma tarefa de verificação de tempo (como, RSVPTIMingVerification) com um fotodiodo conectado à tela e conectado a um dispositivo, o deslocamento pode ser determinado analisando os dados. Use o módulo offset para recomendar um valor de correção de deslocamento e exibir os resultados.
Para executar a determinação do deslocamento e imprimir os resultados, use o seguinte comando:
python bcipy/helpers/offset.py -rApós a execução do comando acima, o valor de correção de deslocamento recomendado será exibido no terminal e pode ser passado para determinar a estabilidade do sistema e exibir os resultados.
# Let's say the recommneded offset value is 0.1
python bcipy/helpers/offset.py --offset " 0.1 " -pComo alternativa, se for instalado, você poderá executar o comando a seguir para executar a determinação do deslocamento e exibir os resultados:
make offset-recommend Ao escrever testes, coloque -os no módulo correto, em uma pasta de testes, e prefixo o arquivo e teste -o com test_ para que o pytest o descubra. Veja outros testes de módulo para exemplos!
Os requisitos de desenvolvimento devem ser instalados antes da execução: pip install -r dev_requirements.txt
Para executar todos os testes, na linha de comando:
py . testPara executar testes de módulos únicos (por exemplo, aquisição), na linha de comando:
py . test acquisitionPara gerar métricas de cobertura de teste, na linha 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 htmlComo alternativa, se for instalado, você poderá executar o comando a seguir para executar a cobertura/pytest e gerar o HTML:
make coverage-html Este projeto aplica diretrizes de estilo PEP usando Flake8.
Para evitar gastar tempo desnecessário em formatação, recomendamos o uso autopep8 . Você pode especificar um arquivo ou diretório para formato automático. Quando estiver pronto para pressionar seu código, você pode executar os seguintes comandos para formatar seu 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, execute a verificação de fiapos: flake8 bcipy .
Como alternativa, se for instalado, você poderá executar o comando a seguir para executar o AutoPep8 e Flake8:
make lint Este projeto aplica a verificação do tipo mypy . A configuração do projeto de digitação é encontrada no arquivo mypy.ini. Para executar a verificação do tipo, execute o seguinte comando:
mypy bcipyPara gerar um relatório, execute o seguinte comando:
mypy --html-report bcipyComo alternativa, se a marca estiver instalada, você poderá executar o comando a seguir para executar o mypy:
make typeSe você deseja ser adicionado à equipe da equipe de desenvolvimento ou tiver perguntas adicionais, entre em contato conosco em [email protected]!
Seguimos e aplicaremos a aliança do colaborador para promover um ambiente seguro e inclusivo para este software de código aberto, faça referência a este link para obter mais informações: https://www.contribore-covenant.org/
Outras diretrizes:
Veja este recurso para exemplos: http://docs.python-guide.org/en/latest/writing/style/
Todas as contribuições são muito apreciadas!