Olá, pessoal! Neste atigo eu vou abordar o estudo de um dispositivo que permite a interface direta entre o cérebro e o computador. Ele permite tanto o controle de ações através do pensamento, quanto a leitura e a interpretação de emoções do usuário.
Antes de começar a descrever como trabalhar com o dispositivo, destaco mais uma vez a exclusividade e a iniciativa pioneira do iMasters em abordar assuntos novos como, por exemplo, o material publicado sobre o uso de CUDA para programação de GPU, publicado em uma série de artigos.
A área da computação que estuda como interagimos com o computador se chama HCI (Human Computer Interaction) e é possível notar que os mais variados tipos de dispositivos são estudados devido à grande criatividade dos pesquisadores da área. Os dispositivos que permitem a interface direta com o cérebro (BCI – Brain Controlled Interface), vêm ganhando muito destaque atualmente, especialmente os não invasivos, ou seja, aqueles que não requerem a colocação cirúrgica de eletrodos.
Um destes dispositivos recentemente lançados no mercado se chama EPOC, da empresa Emotiv systems. Como a Figura 1 apresenta, ele é um capacete (headset) com diversos sensores que permitem a leitura e interpretação de ondas celebrais de forma não invasiva.
Figura 1. Capacete EPOC, da empresa Emotiv Systems.
Recentemente, eu tive a oportunidade de estudar este dispositivo junto com a sua suíte de programação – graças à minha colega Tânia Fraga. A Figura 2 mostra algumas posições de como este capacete ficou colocado na minha cabeça.
Figura 2. Posicionamento do capacete.
Posso dizer que a colocação do capacete não é muito incômoda e depois de alguns minutos é bem fácil se acostumar com ele. Não há nenhum tipo de sensação adicional, além da pequena pressão que os pontos de contato fazem na região de contato. E não, ele não causa câncer ou qualquer tipo de doença mental.
Antes de começar a detalhar o que este dispositivo faz, é preciso baixar um pouco a expectativa: ele NÃO faz a leitura de pensamentos como alguns leitores geeks e nerds podem estar pensando. E ele também NÃO vai substituir o teclado, mouse ou outro tipo de dispositivo que utilizamos para interagir com o computador – pelo menos, não por enquanto. Infelizmente, ainda estamos um pouco longe da interface utilizada pelo hacker Case, no clássico da ficção científica Cyberpunk.
Por isso é preciso ter em mente que, apesar de ser possível comprar e utilizar este dispositivo diretamente no site da Emotiv, este equipamento deve ser visto mais como um protótipo para estudos de que um produto que vai revolucionar como interagimos atualmente com as máquinas.
Após colocar o capacete – tomando os devidos cuidados para umedecer com solução salina os pontos de contato -, é preciso plugar um pequeno dispositivo na saída USB do computador. Este dispositivo permite trabalhar com o capacete sem a necessidade de fios, por meio de uma conexão bluetooth.
Na parte de software, é preciso utilizar um painel de controle que é fornecido junto com o SDK do dispositivo. É possível fazer o download de uma versão mais simples, o SDK Lite, diretamente no site da Emotiv indicada neste link. Vale a pena destacar também que existem diferentes edições do aparelho (com preços diferentes) e que há uma loja criada nos mesmos moldes da App store, que vende aplicativos pagos e gratuitos voltados para o dispositivo.
A Figura 3 mostra a tela principal do EPOC Control Panel. Nesta tela, é possível ver quais são os pontos de contato que estão transmitindo dados (marcados em verde) e informações adicionais, como o tempo decorrido desde que o aparelho começou a transmitir os dados.
É importante mencionar que além do painel de controle, existe outro aplicativo chamado Emotiv Composer que permite emular o sinal enviado pelo dispositivo. Desta maneira, é possível simular diversos estados e sinais enviados sem precisar utilizar o capacete.
Figura 3. Tela do EPOC Control Panel mostrando os pontos de conexão.
Uma vez que o dispositivo esteja configurado corretamente e enviando as informações, podemos calibrá-lo através da parte que cuida das expressões, a Expressiv Suite. Ela permite captar detalhes do rosto do usuário como, por exemplo, se ele está sorrindo, se piscou, ou levantou as sobrancelhas. Esta calibração é recomendada para cada pessoa que utilize o aparelho a fim de se obter valores que representem corretamente o estado mental do usuário.
Uma das partes que mais me interessou foi a parte afetiva do aparelho, que fornece indicadores, tais como nível de excitação/calma, engajamento/desinteresse e meditação. Os valores para estes indicadores são fornecidos em tempo real, conforme apresentado na Figura 4, que mostra o conteúdo da aba Affectiv Suite do EPOC Control Panel.
Figura 4. Indicadores afetivos fornecidos pelo aparelho.
Talvez, a parte de mais interesse dos leitores seja aquela que envolve aspectos cognitivos, pois com ela é possível treinar o aparelho para que ele execute algumas tarefas. No EPOC Control Panel é possível treinar o usuário para que ele foque seu pensamento em tarefas, como mover, empurrar ou posicionar um cubo virtual. Uma vez que o usuário tenha treinamento em cada uma destas modalidades, é possível associar a ação a uma tecla que será enviada para o sistema operacional com o fim de executar uma tarefa ou iniciar um aplicativo do Windows. O destaque vai para a capacidade do usuário em passar pela fase de treinamento e se concentrar o suficiente na tarefa para que haja o reconhecimento. Com certeza esta é uma funcionalidade interessante para auxiliar a interação com o computador – especialmente para portadores de necessidades especiais.
For fim, como o capacete também contém um giroscópio, é possível utilizá-lo no lugar do mouse para mover o ponteiro do Windows. Esta função é bem simples e exige do usuário considerável movimento do pescoço. Fiquei com a impressão que esta funcionalidade é destinada para deficientes que não conseguem interagir normalmente como mouse e precisam de auxílio, pois esta funcionalidade não está diretamente relacionada com a captação do estado mental.
Do ponto de vista de programação, é possível encontrar no SDK diversos exemplos de como trabalhar com este dispositivo utilizando o .NET framework e o Java. O instalador do SDK se encarrega de fornecer o assembly no formato DLL para o .NET e alguns arquivos com o código fonte .java (em um projeto do eclipse) para se trabalhar com esta DLL no Java.
Um detalhe: no caso do Java, utiliza-se o wrapper para uma biblioteca em C e é preciso com a biblioteca JNA para realizar esta interface. A Listagem 1 apresenta o código fonte em C# de exemplo, que faz a leitura dos dados fornecidos pelo aparelho e os joga para um arquivo de texto no formato CSV. A listagem 2 mostra um exemplo no qual recebemos eventos do dispositivo na linguagem Java. Todo o tratamento dos dados é realizado por meio de eventos.
using System;
using System.Collections.Generic;
using Emotiv;
using System.IO;
using System.Threading;
using System.Reflection;
namespace EEG_Example_1
{
class EEG_Logger
{
EmoEngine engine; // Access to the EDK is viaa the EmoEngine
int userID = -1; // userID is used to uniquely identify a user's headset
string filename = "outfile.csv"; // output filename
EEG_Logger()
{
// create the engine
engine = EmoEngine.Instance;
engine.UserAdded += new EmoEngine.UserAddedEventHandler(engine_UserAdded_Event);
// connect to Emoengine.
engine.Connect();
// create a header for our output file
WriteHeader();
}
void engine_UserAdded_Event(object sender, EmoEngineEventArgs e)
{
Console.WriteLine("User Added Event has occured");
// record the user
userID = (int)e.userId;
// enable data aquisition for this user.
engine.DataAcquisitionEnable((uint)userID, true);
// ask for up to 1 second of buffered data
engine.EE_DataSetBufferSizeInSec(1);
}
void Run()
{
// Handle any waiting events
engine.ProcessEvents();
// If the user has not yet connected, do not proceed
if ((int)userID == -1)
return;
Dictionary<EdkDll.EE_DataChannel_t, double[]> data = engine.GetData((uint)userID);
if (data == null)
{
return;
}
int _bufferSize = data[EdkDll.EE_DataChannel_t.TIMESTAMP].Length;
Console.WriteLine("Writing " + _bufferSize.ToString() + " lines of data ");
// Write the data to a file
TextWriter file = new StreamWriter(filename,true);
for (int i = 0; i < _bufferSize; i++)
{
// now write the data
foreach (EdkDll.EE_DataChannel_t channel in data.Keys)
file.Write(data[channel][i] + ",");
file.WriteLine("");
}
file.Close();
}
public void WriteHeader()
{
TextWriter file = new StreamWriter(filename, false);
string header = "COUNTER,INTERPOLATED,RAW_CQ,AF3,F7,F3, FC5, T7, P7, O1, O2,P8" +
", T8, FC6, F4,F8, AF4,GYROX, GYROY, TIMESTAMP, ES_TIMESTAMP" +
"FUNC_ID, FUNC_VALUE, MARKER, SYNC_SIGNAL,";
file.WriteLine(header);
file.Close();
}
static void Main(string[] args)
{
Console.WriteLine("EEG Data Reader Example");
EEG_Logger p = new EEG_Logger();
for (int i = 0; i < 10; i++)
{
p.Run();
Thread.Sleep(100);
}
}
}
}
Listagem 1. Exemplo em C# para ler os dados do EPOC.
import com.sun.jna.Pointer;
import com.sun.jna.ptr.*;
/** Simple example of JNA interface mapping and usage. */
public class EmoStateLog
{
public static void main(String[] args)
{
Pointer eEvent = Edk.INSTANCE.EE_EmoEngineEventCreate();
Pointer eState = Edk.INSTANCE.EE_EmoStateCreate();
IntByReference userID = null;
short composerPort = 1726;
int option = 1;
int state = 0;
userID = new IntByReference(0);
switch (option) {
case 1:
{
if (Edk.INSTANCE.EE_EngineConnect("Emotiv Systems-5") != EdkErrorCode.EDK_OK.ToInt()) {
System.out.println("Emotiv Engine start up failed.");
return;
}
break;
}
case 2:
{
System.out.println("Target IP of EmoComposer: [127.0.0.1] ");
if (Edk.INSTANCE.EE_EngineRemoteConnect("127.0.0.1", composerPort, "Emotiv Systems-5") != EdkErrorCode.EDK_OK.ToInt()) {
System.out.println("Cannot connect to EmoComposer on [127.0.0.1]");
return;
}
System.out.println("Connected to EmoComposer on [127.0.0.1]");
break;
}
default:
System.out.println("Invalid option...");
return;
}
while (true)
{
state = Edk.INSTANCE.EE_EngineGetNextEvent(eEvent);
// New event needs to be handled
if (state == EdkErrorCode.EDK_OK.ToInt()) {
int eventType = Edk.INSTANCE.EE_EmoEngineEventGetType(eEvent);
Edk.INSTANCE.EE_EmoEngineEventGetUserId(eEvent, userID);
// Log the EmoState if it has been updated
if (eventType == Edk.EE_Event_t.EE_EmoStateUpdated.ToInt()) {
Edk.INSTANCE.EE_EmoEngineEventGetEmoState(eEvent, eState);
float timestamp = EmoState.INSTANCE.ES_GetTimeFromStart(eState);
System.out.println(timestamp + " : New EmoState from user " + userID.getValue());
System.out.print("WirelessSignalStatus: ");
System.out.println(EmoState.INSTANCE.ES_GetWirelessSignalStatus(eState));
if (EmoState.INSTANCE.ES_ExpressivIsBlink(eState) == 1)
System.out.println("Blink");
if (EmoState.INSTANCE.ES_ExpressivIsLeftWink(eState) == 1)
System.out.println("LeftWink");
if (EmoState.INSTANCE.ES_ExpressivIsRightWink(eState) == 1)
System.out.println("RightWink");
if (EmoState.INSTANCE.ES_ExpressivIsLookingLeft(eState) == 1)
System.out.println("LookingLeft");
if (EmoState.INSTANCE.ES_ExpressivIsLookingRight(eState) == 1)
System.out.println("LookingRight");
System.out.print("ExcitementShortTerm: ");
System.out.println(EmoState.INSTANCE.ES_AffectivGetExcitementShortTermScore(eState));
System.out.print("ExcitementLongTerm: ");
System.out.println(EmoState.INSTANCE.ES_AffectivGetExcitementLongTermScore(eState));
System.out.print("EngagementBoredom: ");
System.out.println(EmoState.INSTANCE.ES_AffectivGetEngagementBoredomScore(eState));
System.out.print("CognitivGetCurrentAction: ");
System.out.println(EmoState.INSTANCE.ES_CognitivGetCurrentAction(eState));
System.out.print("CurrentActionPower: ");
System.out.println(EmoState.INSTANCE.ES_CognitivGetCurrentActionPower(eState));
}
}
else if (state != EdkErrorCode.EDK_NO_EVENT.ToInt()) {
System.out.println("Internal error in Emotiv Engine!");
break;
}
}
Edk.INSTANCE.EE_EngineDisconnect();
System.out.println("Disconnected!");
}
}
Listagem 2. Exemplo em Java para ler os dados do dispositivo EPOC.
Do ponto de vista prático, podemos encontrar diversos cenários onde a utilização deste dispositivo traz benefícios. Vou descrever três deles: análises voltadas para o marketing, estudos de usabilidade e aplicações na área artística.
Uma das principais tarefas de quem trabalha com marketing é testar novos produtos diretamente com o público alvo. Apesar de haver diversas técnicas, métricas e estudos nesta área, o uso de dispositivos como o EPOC pode fornecer informações adicionais que auxiliem na avaliação do que está sendo testado. Um exemplo prático: uma produtora de filmes quer avaliar quais dos seus três trailers empolga mais o usuário para investir e divulgar primeiro o trailer mais empolgante. Utilizando a métrica de engajamento é possível identificar este aspecto diretamente na consciência do usuário evitando discrepâncias e opiniões subjetivas envolvidas nos tradicionais métodos de avaliação. Este tipo de trabalho já é realizado hoje por algumas empresas americanas.
Outra área importante é a avaliação de usabilidade, um dos principais fatores que determina o consumo de um produto ou serviço. Seguindo as regras clássicas para avaliação de usabilidade para a User Experience, contar com um dispositivo pode facilitar a descoberta do quão desinteressado, ou calmo, o usuário está enquanto manipula o site ou produto avaliado.
Por fim, o uso de dispositivos que fazem a leitura do estado mental vem sendo empregado na área artística. Um exemplo é a obra de arte chamada Caracolomobile, que lê as expressões faciais e as externaliza. O vídeo abaixo mostra um pouco sobre como esta obra de arte funciona:
Para terminar, gostaria de indicar o vídeo abaixo, que mostra como as pesquisas na área de leitura neural estão avançadas. Já é possível obter imagens diretamente da mente do usuário, com certas características. Este vídeo mostra como a interface neural está evoluindo e indica que há grandes oportunidades voltadas para a pesquisa e para o mercado envolvedor destes dispositivos e suas aplicações.







