Продолжаю работу над обучением нейросети распознавать сигнал электроэнцефалограммы для управления экзокистью при реабилитации детей с ДЦП.
Для создания нейроинтерфейса я использую платформу OpenVIBE, которая поддерживает LabStreamingLayer (LSL) - протокол для обмена потоковыми данными между приложениями - и содержит в себе драйвер нашей модели энцефалографа - NVX52. Это позволяет отправлять результаты ЭЭГ-съемки с энцефалографа сразу в поток LSL, который совмещает наши ЭЭГ с метками стимуляций – моментами, когда на экране человек, согласно сценарию OpenVIBE, видит стрелки влево и вправо и должен представлять соответствующие движения.
Но у OpenVIBE есть давняя, но до сих пор не решенная проблема - он не может нормально записывать сигналы в формате EDF+, то есть в формате ЭЭГ с указанными временными метками событий. Внутренний формат OpenVIBE OV или обычный текстовый формат CSV он сохраняет корректно, а файлы EDF+ в итоге получаются с нулевой длиной, он их не обрабатывает.
Поскольку разработчики OpenVIBE пока не предложили подходящего решения, пришлось вспомнить Java и написать конвертер самому.
Теперь можно удобно и быстро конвертировать файлы CSV to EDF+ с сохранением временных меток событий. Сейчас работаю над тем, чтобы на этапе конвертирования частотными фильтрами убирать помехи.
Это уже не первый конвертер, который мне пришлось написать самостоятельно для обработки научных данных. Во время предыдущего исследования мы работали на энцефалографе NVX52, который через программу ExoHead записывал данные в формате BCI собственной версии, который вообще ничем не читался. Пришлось сделать конвертер BCI to EDF+.
Ну и наконец, для облегчения работы с данными при обучении ИНС для распознавания различных состояний по сигналам ЭЭГ написал конвертер EDF-файлов в несколько форматов CSV: для Deeplearning4j, Keras и обратно в OpenVibe. Кроме того, конвертер умеет понижать частоту сигнала ЭЭГ, применять фильтры, убирать шумы. Для ускорения конвертации работает в 4 потока, задействуя 4 ядра процессора.
Все три программы будут выложены в свободном доступе.