#

EasyEEG BCI переходит на новый программный интерфейс

Вышло новое значимое обновление нейрогарнитуры EasyEEG BCI. Главное нововведение — программный интерфейс UDP, а также некоторые небольшие изменения.

Обзор нововведений:

  • Переход на обмен данными по широковещательному UDP протоколу
  • Передача кроме ЭЭГ, также частотных диапазонов в JSON
  • Ускорение реакции индикатора уровня сигнала
  • Небольшие исправления алгоритма спектральной обработки

Основное нововведение — отказ от протокола LSL и переход на UDP. Вообще говоря обычному пользователю это будет все равно, так как технология передачи данных между приложениями внутри системы никак не повлияет на эксплуатацию.
Зато это позволит создать быстрее и эффективнее новые приложения для данной системы. LSL, как показала практика, давал больше вреда чем пользы. Он более тяжелый, да и система безопасности ОС на него порой неадекватно реагировала.
Если он действительно нужен будет, всегда есть возможность создать слой совместимости.

Работа с новым программным интерфейсом UDP

Демонстрация будет на примере Python программы, он базово имеет все для этого и устанавливать ничего больше не надо.
При нажатии на кнопку UDP в приложении начинается широковещание в сеть на порт 2000.

программный интерфейс UDP в EasyEEG BCI

Передает данные теперь в JSON формате. Он позволяет легко манипулировать составом параметров и является практически стандартом сетевого взаимодействия.
Полный пакет данных теперь включает кроме ЭЭГ сигнала и времени между измерениями еще и все частотные характеристики. Поэтому приложению их не надо будет рассчитывать и можно сразу использовать для управления.

ПараметрТип данныхОписание
dintвремя между измерениями в мс
Efloatзначение ЭЭГ, отн.ед.
d1intдельта диапазон, отн. ед.
t1intтета1 диапазон, отн. ед.
t2intтета2 диапазон, %
a1intальфа1 диапазон, %
a2intальфа2 диапазон, %
b1intбета1 диапазон, %
b2intбета2 диапазон, %
b3intбета3 диапазон, %
g1intгамма диапазон, %
Структура JSON пакета

Если кнопка Спектр не нажата спектральные характеристики не передаются!

# Пример программы для получения данных с приложения EasyEEG BCI по протоколу UDP
# Совместим с приложением версии выше 2.0 включительно
# LabData.ru

import socket
import json

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
udp_host = '0.0.0.0'
udp_port = 2000
sock.bind((udp_host,udp_port))
bandsNames = ['d1','t1','t2','a1','a2','b1','b2','b3','g1']
bands = [0] * 9
t = 0.0
while True:
	print("Ожидание данных с устройства ...")
	data,addr = sock.recvfrom(1024)
	try:
		dt = json.loads(data.decode())["d"]
		EEG = json.loads(data.decode())["E"]
		t += dt
	except:
		EEG = 0
		dt = 0

	try:
		for bn, Name in enumerate(bandsNames):
			bands[bn] = json.loads(data.decode())[Name]
	except:
		bands = [0] * 9

	print(f"EEG= { EEG } time= { t } Bands= " + str(bands))

Данный пример программы будет выложен в открытый доступ в GitHub репозитории EasyEEG BCI LabData.

Кроме этого были сделаны небольшие исправления в части скорости реакции индикатора уровня и точности алгоритма спектрального преобразования.

Видеопрезентация


Приложения будут переводится на работу с UDP интерфейсом, о чем сообщу в ВК и телеграм канале. Также скоро выйдет новое приложение для данной системы, поэтому не забывайте подписываться на канал LabData в видеохостингах RUTUBE и VK-видео (дзен).

(c) Роман В. Исаков, 2021