当前位置: 首页 > news >正文

用JS实现人脑和计算机交互,这个厉害了

在过去的几年中,我对神经科技产生了浓厚的兴趣。这篇文章将分享我在学习神经科技过程中学到的东西,希望能帮助那些想要入门的人!

不过在深入讨论这个话题之前,我想先简单地谈谈我是如何进入这个领域的。

背景故事

我没有计算机科学背景(我的专业是广告和市场营销),所以我通过General Assembly沉浸式编码训练营学习编码技能。

在我寻找第一份工作的同时,我开始研究JavaScript和硬件。我参与的第一个项目是借助Leap Motion(一种体感控制器)通过手部动作来控制Sphero智能球。

\"\"

使用Leap Motion控制Sphero

这是我第一次使用JavaScript控制浏览器之外的东西,我立刻被吸引住了!

从那时起,我花了很多个人时间用于设计交互式项目的原型。每一次我都会尝试挑战自己,以便学习到新的东西。

在尝试了几种不同的设备之后,我一直在寻找下一个挑战,于是就有了我的第一个大脑传感器Neurosky。

大脑传感器的首次实验

因为对大脑传感器开始感兴趣,所以我决定先购买一个Neurosky,因为它比其他产品便宜得多。

\"\"

Neurosky大脑传感器

我真的不知道自己是否有能力为它开发程序(我才刚刚完成编码训练营),所以我不想浪费太多钱。幸运的是,已经有一个现成为Neurosky构建的JavaScript框架,所以我可以直接用它。我努力使用我的注意力来控制Sphero和Parrot AR无人机。

我很快意识到,这个大脑传感器并不是很准确。它只有3个传感器,你可以访问来自每个传感器的原始数据,用于构建可视化器,但3个传感器实际上还不足以得出有关大脑中发生的事情的任何结论。

在我研究其他可用的大脑传感器时,偶然发现了Emotiv Epoc。它提供了更多的功能,所以我决定购买它。

在介绍这款设备的工作原理之前,先让我们简单地谈谈大脑。

大脑是如何运作的?

我绝对不是神经科学方面的专家,所以我的解释可能是不完整的。如果你想要更好地了解大脑传感器和神经科技,就需要知道一些基本的东西。

大脑由数十亿个神经元组成。这些神经元是处理信息的专用细胞,而不是随机扩散出去的。我们知道,大脑组织的不同部分负责不同的生理功能。

\"\"

大脑的不同部分

我们以移动为例。

在大脑中,负责运动和协调的部分包括初级运动皮层和小脑。在协调运动时,这些部位的神经元被触发,并将轴突发送到脊髓。然后它们触发会激活肌肉的运动神经元,然后就会做出动作。

\"\"

神经元的解剖图

正如我之前所说的,这是一个非常简单的解释,但关键在于,这些电子信号可以通过附在头皮表面上的EEG(Electroencephalography)设备进行跟踪。

其他一些系统也可用于跟踪大脑的活动,但它们通常更具侵入性,非常昂贵,且需要动手术。例如,ECog(Electrocorticography)需要被植入到头骨内。

希望以上这些解释对你来说是有用的,我们现在可以花一些时间看看Emotiv Epoc是如何跟踪这些电信号的。

大脑传感器是如何工作的?

Emotiv有3种不同的设备:

  • Emotiv Insight;

  • Epoc Flex;

  • Emotiv Epoc。

Epoc在头部周围放置了14个传感器(也称为通道)。

10/20国际EEG系统(左下图)可以作为参考,它反映了电极位置与大脑下方区域之间的关系。通过绿色和橙色部分,你可以看到Epoc上使用了哪些传感器(右下图)。

\"\"

10/20国际EEG系统与Emotiv Epoc

正如你所看到的,14个通道看起来好像很多,但实际上比医疗设备上的传感器数量要少。不过它们似乎很好地分布在头部周围。

Epoc的采样率为2048,内部下采样到128 SPS或256 SPS,频率响应在0.16到43 Hz之间。

这意味着它将从连续信号中获得每秒2048个采样,其中响应频率从0.16Hz变化到43Hz。

如果我们看一下不同类型的脑电波,可以看到它们的工作频率介于0.5Hz和100Hz之间。

\"\"

脑电波的类型

为什么这个很重要?因为根据想要构建的应用程序类型,我们可能只想关注在特定频率的脑电波。例如,如果我们想要构建一个冥想应用程序,我们可能只想关注4-8Hz之间的θ波。

现在我们知道了设备的工作原理,接下来让我们来看看它可以跟踪哪些东西。

Emotiv的功能

Emotiv的软件不是开源的,因此你无法访问每个传感器的原始数据,但你可以访问:

  • 加速计和陀螺仪;

  • 性能指标(兴奋程度、参与度、放松程度、兴趣、压力和注意力);

  • 面部表情(眨眼、眨眼、惊讶、皱眉、微笑、紧绷、大笑、假笑);

  • 意识指令(推、拉、抬、下、左、右、向左旋转、向右旋转、顺时针旋转、逆时针旋转、反向旋转、消失)。

只有意识命令需要用户进行专门的培训。要训​​练这些“想法”,需要下载他们的软件。

在完成一些培训后,相关的文件将被保存在本地或云端。

如果你想要自己开发程序,可以使用他们的Cortex API和社区SDK(在3.5版本之后已停止维护)。

或者如果你想使用JavaScript,可以使用我曾经使用过的框架Epoc.js。

Epoc.js

Epoc.js是一个可以使用JavaScript与Emotiv Epoc和Insight进行交互的框架。你可以访问上述的那些功能(加速计/陀螺仪数据、性能指标、面部表情和意识命令),并可以与模拟器进行交互。

你只需要几行代码:

\"\"

在上面的示例代码中,我们先是导入和初始化必要的Node模块。然后,我们调用connectToLiveData方法,并将训练后保存的用户文件传给它。我们得到一个回调,其中有一个事件对象,我们可以通过它跟踪不同的属性。例如,如果我们想要跟踪用户是否在眨眼,我们可以使用event.blink。

每个返回的属性要么是0(未激活),要么是1(已激活)。

可以在存储库的README文件中找到可用属性的完整列表。

这个框架是使用Emotiv C++ SDK、Node.js和3个Node模块(Node-gyp、Bindings和Nan)开发的。

这是创建Node插件的老方法,如果你有兴趣了解更多信息,建议你看一下N-API。

接下来,让我们开始创建一些原型。

原型

1. 脑键盘

\"\"

使用眼球运动控制键盘

我使用Emotiv Epoc构建的第一个演示是脑键盘,目标是看看我是否可以构建一个界面,让人们使用面部表情进行交流。

眼睛向右或向左看,可以突出显示键盘右边或左边的字母,眨眼表示选择字母,并在输入字段中显示选定的字母。

这是一个非常简单的原型!

2. WebVR

我的第二个原型涉及到意识命令。我想看看是否可以只通过思想来导览3D空间。

\"\"

大脑与计算机Web接口

在这个原型中,我使用Three.js创建了基本的3D场景,并使用epoc.js跟踪意识命令,以及通过Web套接字将它们从服务器发送到前端。

3. 物联网

我的第三个原型是使用JavaScript控制硬件。这是我几年来一直在研究的东西,所以能够构建一个可以通过想法来控制一只Parrot迷你无人机的项目让我感到非常兴奋!

\"\"

这些原型都很小,主要是为了验证一些想法,并了解这种技术的可能性和局限性,所以让我们首先谈谈局限性。

局限性

尽管这项技术看起来很令人兴奋,但仍然存在很多限制。

训练

事实上,每个用户都必须通过培训来记录脑电波,并将其与特定命令相匹配,这给大多数人的使用造成了障碍。除非应用程序能够解决人们真正的需求并且设备的准确性特别好,否则我不认为人们愿意花时间训练大脑传感器。

延迟

在使用意识命令构建原型时,我发现,在我开始产生想法的那一刻与在程序中看到反馈的那一刻之间会有一点延迟。

我认为这是因为后台使用的机器学习算法在实时接收来自设备的数据后,需要采用一段时间才能根据之前训练过的思想对当前思想进行分类。

这确实会影响你可以使用传感器构建的应用程序的类型。例如,构建冥想应用程序就没有问题,因为延迟不会对用户体验产生太大影响。但是,如果你想构建一个可以使用想法控制的轮椅,那么延迟就会带来非常严重的影响。

侵入性与非侵入性

EEG设备非常棒,因为你不需要动手术,你只需要戴上设备,在传感器上涂一些凝胶就可以了!不过,因为是非侵入性的,所以传感器跟踪的是穿过颅骨的电子信号,导致了这种方法效率较低。

时间解析度非常好,因为采样率非常快,但空间解析度不是很高。EEG设备只能跟踪头皮表面周围的大脑活动,跟踪不到发生在大脑中的更深层次的活动。

社会接受度

脑袋上套着一个大脑传感器看起来并不美观。只要设备看起来是那个样子,我认为消费者不会喜欢戴它们。随着技术的进步,我们可能可以开发出可隐藏在帽子等配饰中的设备。但还有另外一个问题,在戴了几分钟后,大脑传感器会让人感到不适。

因为EEG设备是非侵入性的,传感器必须在头皮上施加一点压力才能更好地跟踪电子信号。你可以想象,这个轻微的压力起初是可以忍受的,但随着时间的推移慢慢变得让人不那么舒服。此外,因为需要在传感器上涂上一些凝胶,这是人们使用它们的另一个障碍。

不过,尽管现在的EEG传感器可用性不那么高,也无法吸引大多数人,但未来仍然存在一些有趣的可能性。

未来可能性

考虑当前状态下的技术以及未来的发展,我们可以想到一些不同的应用。

无障碍

我希望大脑传感器可以帮助患有某种残疾的人可以更独立,过上更好的生活。

在我构建第一个脑键盘原型时,我就有了这个想法。我知道原型不完整,但我真的很想知道一般的消费者设备是否可以帮到人们。并非每个人都可以访问复杂的医疗系统,我很高兴看到人们可以在线购买的设备可以给他们带来帮助!

专注力

专注力目前已经成为某些大脑传感器(例如Muse)的焦点应用。

冥想可能很困难,因为很难知道你做得对不对。大脑传感器可以直接反馈人们的表现,甚至为他们提供改进指导。

预防

如果我们可以像使用手机一样使用大脑传感器,我们可能可以构建一些应用程序,用于跟踪某些生理功能会在什么时候出现异常。例如,如果我们能够开发检测算法来预防中风、焦虑症或癫痫,那就太棒了。

效率

大脑传感器可以帮助进行冥想,也可以跟踪一天当中你最关注的时间段。如果我们经常佩戴传感器,它最终会告诉我们应该在什么时候完成哪些任务。你甚至可以安排好日程,让你的时间用得更有效率。

艺术

我喜欢技术和艺术之间的交集,以此来探索无法在工作完成的事情。我真的认为用大脑传感器构建创造性的东西不应该被低估,在获得更“有用”的应用之前,我们可以探索技术的不同可能性和局限性。

与其他传感器组合

我最近在想,我们不应该将大脑传感器作为一个独立的东西来看待。大脑只能通过身体的其他部位感知世界,所以如果没有眼睛就看不到任何东西,没有耳朵就听不到任何声音……所以,如果我们想要了解脑电波,我们应该跟踪其他生物功能。

所以,我们最终会得到如下所示的设备:

\"\"

我们可以肯定的是,没有人会每天戴这些设备……

接下来

几个礼拜前,我买了一个新的脑传感器,OpenBCI。我接下来想研究原始数据和机器学习,所以我认为这个设备非常有用,因为它是完全开源的!

因为时间的关系,我还没用它构建任何东西,不过这里有一些设备和界面的预览。

\"\"

相关资源

如果你想尝试一些工具或了解更多信息,请参考以下链接!

框架

  • Epoc.js——用于与Emotiv Epoc进行交互的JavaScript框架。

  • Brain bits——用于Emotiv头戴设备的P300在线拼写机制。

  • Wits——一个Node.js库,用于通过Emotiv Epoc EEG设备读取你的想法。

  • Brain Monitor——使用Node.js开发的终端应用程序,用于实时监控大脑信号。

  • Ganglion BLE——OpenBCI提供的用于Ganglion大脑和计算机接口的Web蓝牙客户端。

  • BCI.js——用JavaScript进行EEG信号处理和机器学习。

其他有用的链接

  • NeurotechX

  • 书籍“Brain-Computer Interfacing”

  • 书籍“Principals of Neural Science

  • Uri Shaked对神经科学的介绍

  • Viacheslav Nesterov的“使用脑计算机接口检测大脑活动状态”

英文原文:
https://medium.com/@devdevcharlie/experimenting-with-brain-computer-interfaces-in-javascript-8d6cb891fda8

更多内容请关注前端之巅(ID:frontshow)

\"\"

相关文章:

  • 翻硬币
  • How cc Works 中文译文
  • 如何优雅地查看 JS 错误堆栈?
  • [转]IPTABLES中SNAT和MASQUERADE的区别
  • PaddlePaddle-GitHub的正确打开姿势
  • Codeforces 1097 Alex and a TV Show
  • 第八届(2018)CSR年度盛典在北京举办
  • 身残心不残 河北大城63岁独身老人捐献遗体
  • Spring Batch JSON 支持
  • settings配置数据库和日志
  • K-means 怎么选 K ?
  • 蚂蚁金服庆涛:OceanBase支撑2135亿成交额背后的技术原理
  • Electron构建跨平台应用Mac/Windows/Linux
  • 每个 JavaScript 开发者都该了解的 ES2018 新特性
  • 混合式开发框架资料汇总
  • python3.6+scrapy+mysql 爬虫实战
  • express + mock 让前后台并行开发
  • Github访问慢解决办法
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • IDEA常用插件整理
  • JavaWeb(学习笔记二)
  • Lucene解析 - 基本概念
  • V4L2视频输入框架概述
  • windows下mongoDB的环境配置
  • 欢迎参加第二届中国游戏开发者大会
  • 简单数学运算程序(不定期更新)
  • 前端设计模式
  • 如何实现 font-size 的响应式
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 入手阿里云新服务器的部署NODE
  • 用jquery写贪吃蛇
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • # .NET Framework中使用命名管道进行进程间通信
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #Z2294. 打印树的直径
  • (11)MSP430F5529 定时器B
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (一) springboot详细介绍
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • ****Linux下Mysql的安装和配置
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .htaccess配置重写url引擎
  • .net 受管制代码
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .net开发时的诡异问题,button的onclick事件无效
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @Autowired自动装配
  • @SuppressWarnings(unchecked)代码的作用
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [51nod1610]路径计数
  • [android学习笔记]学习jni编程