2015년 12월 17일 목요일

Insight Bluetooth USB Dongle Data 읽기

USB Dongle 을 HID 로 연결한 후 어떻게 사용할지 찾아 보다가
SDK 에서 제공하는 Example 이 동작하는지 확인해 봐야 겠다는 생각을 했다.

Emotiv SDK : https://github.com/Emotiv/community-sdk

위 URL 은 non-eeg 모델을 위한 오픈소스 SDK 인데 (아직도 non-eeg 와 with-eeg
차이를 모르겠다. 으.. 아까운 300$) 몇가지 example 이 제공되고 있다.
libedk.so 라는 SDK library 는 소스가 오픈되지 않고 bin 디렉토리에 binary 로 들어 있고
Android, C#, C++, Java, ObjectiveC, Python 을 지원하는 것 같은 디렉토리 분류로 되어있으나 현재 버젼 자체로서는 제대로 동작하는 것이 거의 없다.

community-sdk$ tree -d -L 2
.
├── bin
│ ├── linux64
│ ├── win32
│ └── win64
├── doc
├── examples
│ ├── Android
│ ├── C#
│ ├── C++
│ ├── Java
│ ├── ObjectiveC
│ └── Python
├── include
│ └── java
├── lib
│ ├── Android
│ ├── Mac
│ ├── iOS
│ ├── java
│ ├── win32
│ └── win64
├── premium_examples
│ ├── C++
│ ├── Java
│ └── Python
└── tools
├── Mac OS
└── win32

오픈소스를 표방한다면 개발자 커뮤니티가 있어야 하는데 소통이 전혀 없어서 아쉬운 것은 스스로
알아서 만들어 가면서 써야 한다. ㅡ,.ㅡ;

일단 지금 관심사는 insight 가 제대로 동작 하는지, dongle 이 제 역할을 하는지 체크 하는 것.
API 문서를 보고 connection 과 센서의 상태를 체크하는 EmoState API 를 사용해서 hello world를
만들어 봤다.

API : https://emotiv.com/api/3.3.0/


컴파일 해서 실행해 보면 아래 헤드셑 정보 F3/F4/T7/T8/Pz 에 대한 data 가 들어온다.


Emotiv Insight Headset

실제 실행한 결과는 아래와 같다.

시작 후 2초 뒤부터 정보가 들어오는데 Battery 정보가 들어오다 말다 한다.
센서 정보야 머리카락에 걸려서 들쭉 날쭉 한다고 하지만 Battery 가 왔다 갔다 하는 것은
정보의 정확성을 심히 의심할 수 밖에 없는 상황인데...
여튼 센서 하나씩 뗐다 붙였다 하면 제대로 바뀌는 것을 봤을 때 동작은 하는 것 같다.

머리카락이 너무 덥수룩해서 윗통수? 쪽 접촉이 좋지 않다.
이걸 위해 삭발을 할 수도 없고..... 콘텍트 렌즈 세정제를 사용해서 인식율을 좋게 할 수
있다고 하던데 사서 써봐야 겠다. 안경 쓰는 사람에게는 T7/T8 쪽이 고통 스럽다.
구글 글라스 때도 그랬는데 렌즈나 라식을 고민해 봐야 하는 장비들...ㅠㅠ

$ ./emostate 
Emotiv Driver started!

Emostate updated
connect = 0
uptime : 0, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 0, T7 : 0, Pz : 0, T8 : 0, AF4 : 0

Emostate updated
connect = 1
uptime : 0.070373, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 4, AF4 : 4

Emostate updated
connect = 1
uptime : 0.594261, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 0, T7 : 4, Pz : 4, T8 : 0, AF4 : 0

Emostate updated
connect = 1
uptime : 0.742826, wireless strength : 2, battery level (cur/max) : 4/5, AF3 : 0, T7 : 4, Pz : 4, T8 : 0, AF4 : 0

Emostate updated
connect = 1
uptime : 0.883572, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 0, T7 : 4, Pz : 4, T8 : 0, AF4 : 0

Emostate updated
connect = 1
uptime : 0.993041, wireless strength : 2, battery level (cur/max) : 0/5, AF3 : 0, T7 : 4, Pz : 4, T8 : 0, AF4 : 0

Emostate updated
connect = 1
uptime : 1.15724, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 0, AF4 : 4

Emostate updated
connect = 1
uptime : 1.29799, wireless strength : 2, battery level (cur/max) : 4/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 0, AF4 : 4

Emostate updated
connect = 1
uptime : 1.44656, wireless strength : 2, battery level (cur/max) : 4/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 0, AF4 : 4

Emostate updated
connect = 1
uptime : 1.56384, wireless strength : 2, battery level (cur/max) : 2/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 0, AF4 : 4

Emostate updated
connect = 1
uptime : 1.64986, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 0, AF4 : 4

Emostate updated
connect = 1
uptime : 1.81406, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 0, AF4 : 4

Emostate updated
connect = 1
uptime : 1.9939, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 0, AF4 : 4

Emostate updated
connect = 1
uptime : 2.07991, wireless strength : 2, battery level (cur/max) : 2/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 0, AF4 : 4

Emostate updated
connect = 1
uptime : 2.25975, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 1, AF4 : 4

Emostate updated
connect = 1
uptime : 2.5647, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 1, AF4 : 4

Emostate updated
connect = 1
uptime : 2.72109, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 1, AF4 : 4

Emostate updated
connect = 1
uptime : 2.90093, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 1, AF4 : 4

Emostate updated
connect = 1
uptime : 3.02604, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 1, AF4 : 4

Emostate updated
connect = 1
uptime : 3.12769, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 1, AF4 : 4

Emostate updated
connect = 1
uptime : 3.27625, wireless strength : 2, battery level (cur/max) : 4/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 1, AF4 : 4

Emostate updated
connect = 1
uptime : 3.40136, wireless strength : 2, battery level (cur/max) : 3/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 1, AF4 : 4

Emostate updated
connect = 1
uptime : 3.54993, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 1, AF4 : 4

Emostate updated
connect = 1
uptime : 3.74541, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 1, AF4 : 4

Emostate updated
connect = 1
uptime : 3.85488, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 1, AF4 : 4

Emostate updated
connect = 1
uptime : 3.97998, wireless strength : 2, battery level (cur/max) : -1/5, AF3 : 4, T7 : 4, Pz : 4, T8 : 1, AF4 : 4

EmoState 가 제대로 동작하니까 FacialExpressionDetection 이나 MentalCommandDetection 도 해보면 좋겠지만 지금은 Dongle 테스트가 주 목적이니 여기까지 하고 다음에는 Dongle 없이 Bluetooth 만으로 연결해서 동작 하는지 확인해 봐야 겠다.

댓글 없음: