BCIPY เป็นห้องสมุดสำหรับทำการทดลองอินเทอร์เฟซคอมพิวเตอร์สมองใน Python มันทำหน้าที่เป็นแอปพลิเคชันแบบสแตนด์อโลนสำหรับการรวบรวมข้อมูลการทดลองหรือคุณสามารถใช้เครื่องมือที่คุณต้องการและเริ่มเขียนโค้ดระบบของคุณเอง ดูเอกสาร BCIPY อย่างเป็นทางการของเรารวมถึงพันธมิตรและข้อมูลบริบทเพิ่มเติมที่นี่
มันจะทำงานบน Windows ล่าสุด (7, 10, 11), Linux (Ubuntu 22.04) และ MacOS (Big Sur) เวอร์ชันอื่นอาจใช้งานได้เช่นกัน แต่ไม่รับประกัน หากต้องการดูเวอร์ชันที่รองรับและระบบปฏิบัติการ ณ ของรุ่นนี้ดูที่นี่: bcipy builds
กรุณาอ้างอิงเราเมื่อใช้!
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.
โครงการนี้ต้องใช้ Python 3.8 หรือ 3.9 โปรดดูหมายเหตุด้านล่างสำหรับการอ้างอิงเฉพาะระบบปฏิบัติการเพิ่มเติมก่อนที่การติดตั้งจะเสร็จสมบูรณ์และอ้างอิงเอกสาร/คำถามที่พบบ่อยของเราสำหรับข้อมูลเพิ่มเติม: https://bcipy.github.io/hardware-os-config/
คุณจะต้องติดตั้งข้อกำหนดเบื้องต้นที่กำหนดไว้ใน scriptsshelllinux_requirements.sh เช่นเดียวกับ pip install attrdict3
หากคุณใช้เครื่อง Windows คุณจะต้องติดตั้งเครื่องมือสร้าง Microsoft Visual C ++
Python 3.9 เท่านั้น! คุณจะต้องติดตั้ง Pywinhook ด้วยตนเอง ดูที่นี่สำหรับไฟล์ล้อที่เหมาะสม ( pyWinhook‑1.6.2‑cp39‑cp39‑win_amd64.whl ) จากนั้นเรียกใช้ pip install <path_to_wheel_file> นอกจากนี้เรายังรวมไฟล์ล้อ 64 บิตใน .bcipy/downloads/ directory
หากคุณใช้ Mac คุณจะต้องติดตั้ง XCode และเปิดใช้งานเครื่องมือบรรทัดคำสั่ง xcode-select --install หากใช้ชิป M1/2 คุณจะต้องใช้สคริปต์การติดตั้งใน scripts/shell/m2chip_install.sh เพื่อติดตั้งข้อกำหนดเบื้องต้น คุณอาจต้องใช้เทอร์มินัล Rosetta เพื่อเรียกใช้สคริปต์การติดตั้ง แต่สิ่งนี้ไม่จำเป็นในการทดสอบของเราโดยใช้ชิป M2
หากใช้ ZSH แทนการทุบตีคุณอาจพบข้อผิดพลาดในการแบ่งแยกเมื่อเรียกใช้ bcipy นี่เป็นเพราะปัญหาในการพึ่งพาโรคจิตโดยไม่มีการแก้ไขที่ทราบ ณ ตอนนี้ โปรดใช้ Bash แทน ZSH ในตอนนี้
ในการเรียกใช้ BCIPY บนคอมพิวเตอร์ของคุณหลังจากทำตามการพึ่งพาด้านบนคุณจะต้องติดตั้งแพ็คเกจ BCIPY
ในการติดตั้งสำหรับใช้ในเครื่องและใช้ GUI:
pip install kenlm==0.1 --global-option="--max_order=12"pip install psychopy==2023.2.1 --no-depspip install -e .หากต้องการเวอร์ชันล่าสุดจาก PYPI และสร้างโดยใช้โมดูล:
pip install bcipyอีกวิธีหนึ่งหากติดตั้ง Make คุณสามารถเรียกใช้คำสั่งติดตามเพื่อติดตั้ง:
# install in development mode
make dev-install เรียกใช้โปรโตคอลการทดลองหรืองานโดยตรงโดยใช้ยูทิลิตี้บรรทัดคำสั่ง 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" ในการฝึกอบรมโมเดลสัญญาณ (ปัจจุบัน PCARDAKDE ) ให้เรียกใช้คำสั่งต่อไปนี้หลังจากติดตั้ง 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" ในการสร้างพล็อตที่สามารถแสดงหรือบันทึกหลังจากการรวบรวมข้อมูลให้เรียกใช้คำสั่งต่อไปนี้หลังจากติดตั้ง 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" เครื่องจำลองสามารถเรียกใช้ได้โดยใช้ยูทิลิตี้บรรทัดคำสั่ง bcipy-sim
อดีต. bcipy-sim -d my_data_folder/ -p my_parameters.json -m my_models/ -n 5
เรียกใช้ bcipy-sim --help สำหรับเอกสารหรือดู readme ในโมดูลจำลอง
from bcipy . helpers import system_utils
system_utils . get_system_info ()เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัลของคุณเพื่อเริ่ม BCIPY GUI:
python bcipy/gui/BCInterface.pyอีกวิธีหนึ่งหากติดตั้ง Make คุณสามารถเรียกใช้คำสั่งติดตามเพื่อเริ่ม GUI จากไดเรกทอรีรูท BCIPY:
make bci-guiสิ่งเร้า : ตัวอักษรเดียวเสียงหรือภาพที่แสดง (โดยทั่วไปในการสอบถาม) เอกพจน์ = สิ่งเร้าพหูพจน์ = สิ่งเร้า
การทดลอง : การรวบรวมข้อมูลหลังจากสิ่งเร้าจะปรากฏขึ้น A ----
การสอบถาม : ชุดของสิ่งเร้าหลังจากการตรึงข้ามในงานสะกดเพื่อรวบรวมความตั้งใจของผู้ใช้ A ---- B --- C ----
ซีรีส์ : แต่ละซีรีส์มีคำถามอย่างน้อยหนึ่งครั้ง การตัดสินใจจดหมาย/ไอคอนเกิดขึ้นหลังจากซีรีส์ในงานสะกดคำ
เซสชัน : ข้อมูลที่รวบรวมสำหรับงาน ประกอบด้วยข้อมูลเมตาเกี่ยวกับงานและรายการซีรีส์
โปรโตคอล : ชุดของงานและการกระทำที่จะดำเนินการในเซสชัน สิ่งนี้ถูกกำหนดให้เป็นภายในการทดลองและสามารถลงทะเบียนได้โดยใช้ BCIPY GUI
ภารกิจ : การออกแบบการทดลองด้วยสิ่งเร้าการทดลองสอบถามและซีรีส์สำหรับใช้ใน BCI ตัวอย่างเช่น "การสอบเทียบ RSVP" เป็นงาน
โหมด : องค์ประกอบการออกแบบทั่วไประหว่างประเภทงาน ตัวอย่างเช่นการสอบเทียบและการสะกดฟรีเป็นโหมด
กระบวนทัศน์ : แสดงกระบวนทัศน์ที่มีคุณสมบัติและโหมดที่เป็นเอกลักษณ์ อดีต. การนำเสนอด้วยภาพอย่างรวดเร็ว (RSVP), Matrix Speller, การมองเห็นแบบคงที่ที่ปรากฏถึงศักยภาพ (SSVEP)
นี่เป็นรายการของโมดูลที่สำคัญและการทำงานของพวกเขา แต่ละโมดูลจะมี readme การสาธิตและการทดสอบของตัวเอง โปรดตรวจสอบข้อมูลเพิ่มเติม!
acquisition : ได้รับข้อมูลให้ชุดเวลาที่ต้องการกลับมาบันทึกไปยังไฟล์เมื่อสิ้นสุดเซสชันdisplay : จัดการการแสดงผลของสิ่งเร้าบนหน้าจอและผ่านเวลาสิ่งเร้ากลับsignal : แบบจำลองสัญญาณ EEG, แบบจำลองสัญญาณจ้องมอง, ตัวกรอง, การประมวลผล, ผู้ประเมินและผู้ชมgui : อินเทอร์เฟซผู้ใช้ปลายทางในงาน BCI ที่ลงทะเบียนและการแก้ไขพารามิเตอร์ ดู bcinterface.pyhelpers : ฟังก์ชั่นที่เป็นประโยชน์ที่จำเป็นสำหรับการโต้ตอบระหว่างโมดูล, I/O พื้นฐานและการสร้างภาพข้อมูลlanguage : ให้ความน่าจะเป็นของสัญลักษณ์ถัดไปในระหว่างการพิมพ์parameters : ตำแหน่งของพารามิเตอร์ JSON ซึ่งรวมถึง parameters.json (การทดลองหลัก / การกำหนดค่าแอพ) และ device.json (รีจิสทรีอุปกรณ์และการกำหนดค่า)static : สิ่งเร้าภาพและเสียงคู่มือการใช้งานและข้อความที่อ่านได้สำหรับ GUItask : BCIPY ใช้งานผู้ใช้ คอลเลกชันหลักของโมดูล BCI สำหรับใช้ในระหว่างการทดลองต่างๆ อดีต. การสอบเทียบ RSVPfeedback : กลไกข้อเสนอแนะสำหรับสิ่งเร้าทางเสียงและภาพmain : ผู้บริหารของการทดลอง จุดเข้าหลักในแอปพลิเคชันconfig : พารามิเตอร์การกำหนดค่าสำหรับแอปพลิเคชันรวมถึงเส้นทางและชื่อไฟล์ข้อมูลsimulator : ให้การสนับสนุนสำหรับการจำลองสถานการณ์ตามข้อมูลที่รวบรวมไว้ก่อนหน้านี้ ดู bcipy/task/README.md สำหรับข้อมูลเพิ่มเติมเกี่ยวกับกระบวนทัศน์ที่ได้รับการสนับสนุนงานการกระทำและโหมด ต่อไปนี้เป็นกระบวนทัศน์ที่ได้รับการสนับสนุนและผ่านการตรวจสอบแล้ว:
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.
การอ้างอิง:
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.
การอ้างอิง:
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.
ฟังก์ชั่นและโมดูลที่สำคัญทั้งหมดมีไฟล์ตัวอย่างและไฟล์ทดสอบที่เกี่ยวข้องซึ่งอาจทำงานในเครื่อง สิ่งนี้จะช่วยปรับทิศทางให้คุณไปยังฟังก์ชั่นและทำหน้าที่เป็นเอกสาร หากคุณเพิ่มลงใน repo คุณควรเพิ่มการทดสอบและแก้ไขการทดสอบใด ๆ ที่ล้มเหลวเมื่อคุณเปลี่ยนรหัส
ตัวอย่างเช่นคุณอาจเรียกใช้การสาธิต bcipy หลักโดย:
python demo/bci_main_demo.py
การสาธิตนี้จะโหลดในพารามิเตอร์และดำเนินการงานสาธิตที่กำหนดไว้ในไฟล์ มีไฟล์ตัวอย่างที่มีอยู่ในโมดูลส่วนใหญ่ยกเว้น GUI สัญญาณและพารามิเตอร์ เรียกใช้เป็นสคริปต์ Python!
การกำหนดค่าชดเชยแบบคงที่และการแก้ไขเป็นขั้นตอนสำคัญก่อนเริ่มการทดสอบ BCIPY ใช้ LSL เพื่อรับข้อมูล EEG และ Psychopy เพื่อนำเสนอสิ่งเร้า
เอกสารการซิงโครไนซ์ LSL เอกสารกำหนดเวลาโรคจิต
การชดเชยแบบคงที่คือความแตกต่างของเวลาปกติระหว่างสัญญาณและสิ่งเร้าของเรา ออฟเซ็ตนี้ถูกกำหนดผ่านการทดสอบผ่านโฟโตไดโอดหรือกลไกการกระตุ้นอื่น ๆ การแก้ไขออฟเซ็ตทำได้โดยการเปลี่ยนสัญญาณ EEG โดยออฟเซ็ตที่กำหนดโดยใช้พารามิเตอร์ static_offset
หลังจากรันงานตรวจสอบเวลา (เช่น rsvptimingverification) พร้อมโฟโตไดโอดที่แนบมากับจอแสดงผลและเชื่อมต่อกับอุปกรณ์การชดเชยสามารถกำหนดได้โดยการวิเคราะห์ข้อมูล ใช้โมดูล offset เพื่อแนะนำค่าการแก้ไขออฟเซ็ตและแสดงผลลัพธ์
ในการเรียกใช้การกำหนดค่าชดเชยและพิมพ์ผลลัพธ์ให้ใช้คำสั่งต่อไปนี้:
python bcipy/helpers/offset.py -rหลังจากเรียกใช้คำสั่งด้านบนค่าการแก้ไขออฟเซ็ตที่แนะนำจะแสดงในเทอร์มินัลและสามารถส่งผ่านเพื่อกำหนดเสถียรภาพของระบบและแสดงผลลัพธ์
# Let's say the recommneded offset value is 0.1
python bcipy/helpers/offset.py --offset " 0.1 " -pอีกวิธีหนึ่งหากติดตั้ง Make คุณสามารถเรียกใช้คำสั่งติดตามเพื่อเรียกใช้การกำหนดค่าชดเชยและแสดงผลลัพธ์:
make offset-recommend เมื่อเขียนการทดสอบให้วางไว้ในโมดูลที่ถูกต้องในโฟลเดอร์ทดสอบและนำหน้าไฟล์และทดสอบตัวเองด้วย test_ เพื่อให้ pytest ค้นพบ ดูการทดสอบโมดูลอื่น ๆ สำหรับตัวอย่าง!
ต้องติดตั้งข้อกำหนดการพัฒนาก่อนที่จะทำงาน: pip install -r dev_requirements.txt
ในการเรียกใช้การทดสอบทั้งหมดในบรรทัดคำสั่ง:
py . testในการเรียกใช้การทดสอบโมดูลเดียว (เช่นการได้มา) ในบรรทัดคำสั่ง:
py . test acquisitionเพื่อสร้างตัวชี้วัดการทดสอบความครอบคลุมในบรรทัดคำสั่ง:
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 htmlอีกวิธีหนึ่งหากติดตั้ง Make คุณสามารถเรียกใช้คำสั่งติดตามเพื่อเรียกใช้ความครอบคลุม/pytest และสร้าง HTML:
make coverage-html โครงการนี้บังคับใช้แนวทางสไตล์ PEP โดยใช้ Flake8
เพื่อหลีกเลี่ยงการใช้เวลาที่ไม่จำเป็นในการจัดรูปแบบเราขอแนะนำให้ใช้ autopep8 คุณสามารถระบุไฟล์หรือไดเรกทอรีเป็นรูปแบบอัตโนมัติ เมื่อพร้อมที่จะกดรหัสของคุณคุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อจัดรูปแบบรหัสของคุณ:
# autoformat all files in bcipy
autopep8 --in-place --aggressive -r bcipy
# autoformat only the processor file
autopep8 --in-place --aggressive bcipy/acquisition/processor.py ในที่สุดเรียกใช้การตรวจสอบผ้าสำลี: flake8 bcipy
อีกวิธีหนึ่งหากติดตั้ง Make คุณสามารถเรียกใช้คำสั่งติดตามเพื่อเรียกใช้ AutopeP8 และ Flake8:
make lint โครงการนี้บังคับใช้การตรวจสอบประเภท mypy การกำหนดค่าโครงการการพิมพ์พบได้ในไฟล์ mypy.ini ในการเรียกใช้การตรวจสอบประเภทให้เรียกใช้คำสั่งต่อไปนี้:
mypy bcipyในการสร้างรายงานให้เรียกใช้คำสั่งต่อไปนี้:
mypy --html-report bcipyอีกวิธีหนึ่งหากติดตั้ง Make คุณสามารถเรียกใช้คำสั่งติดตามเพื่อเรียกใช้ mypy:
make typeหากคุณต้องการเพิ่มในทีมพัฒนา Slack หรือมีคำถามเพิ่มเติมโปรดติดต่อเราที่ [email protected]!
เราติดตามและจะบังคับใช้พันธสัญญาของผู้มีส่วนร่วมเพื่อส่งเสริมสภาพแวดล้อมที่ปลอดภัยและครอบคลุมสำหรับซอฟต์แวร์โอเพ่นซอร์สนี้โปรดอ้างอิงลิงค์นี้สำหรับข้อมูลเพิ่มเติม: https://www.contributor-covenant.org/
แนวทางอื่น ๆ :
ดูทรัพยากรนี้สำหรับตัวอย่าง: http://docs.python-guide.org/en/latest/writing/style/
การมีส่วนร่วมทั้งหมดได้รับการชื่นชมอย่างมาก!