BCIgui/Masterarbeit/UIModellVisuell.py
2021-10-31 10:37:47 +01:00

191 lines
7.0 KiB
Python

from subprocess import *
from threading import Thread
import time
class Modell(Thread):
PATH_OV = 'meta/dist/designer-Release/openvibe-designer.sh'
PATH_FILES = 'Projekte/OpenViBE_visual_BCI-master/openvibe_visual_bci/'
def __init__(self,c):
Thread.__init__(self)
self.controller = c
self.aktiv= True
self.openVibeAktiv = False
def stop(self):
print("stop thread")
self.aktiv = False
def setFunktion(self, func, args=None, kwargs=None):
self.func = func
self.args = args or []
self.kwargs = kwargs or {}
def run(self):
print("start thread")
#self.aktiv = True
t = Thread(target=self.func, args=self.args, kwargs=self.kwargs)
t.setDaemon(True)
t.start()
while self.aktiv:
time.sleep(0.1)
def startCopySpelling(self):
print("start copySpelling")
self.controller.resetInfo()
self.controller.addInfoText('start copyspelling -- ')
self.controller.setTitle("Copy Spelling")
path = self.PATH_FILES + 'p300-visual-1-acquisition.xml'
process = Popen(['bash', self.PATH_OV, '--play', path, '--no-gui'],
stdout=PIPE,
universal_newlines=True)
self.openVibeAktiv = True
while True:
output = process.stdout.readline()
print(output.strip())
x = output.find("schlagwort?")
y = output.find("Error")
if(x != -1):
print("Training finished")
process.terminate()
self.controller.addInfoText('finished Copyspelling\n')
self.controller.stop("filterXdawn")
break
elif(y != -1 ):
print("Error occured")
self.controller.changeScreen("StartPage")
self.controller.addInfoText("Fehler beim Copyspelling aufgetaucht\n")
process.terminate()
self.controller.stop()
break
self.controller.stop()
#self.killProzess()
#self.controller.filterXdawn()
def trainXDawn(self):
print("start training Xdawn")
self.controller.addInfoText('start training XDawn -- ')
path = self.PATH_FILES + 'p300-visual-2-train-xDAWN.xml'
#path = 'Projekte/test.xml'
process = Popen(['bash', self.PATH_OV, '--play', path, '--no-gui'],
stdout=PIPE,
universal_newlines=True)
self.openVibeAktiv = True
while self.aktiv:
output = process.stdout.readline()
print(output.strip())
x = output.find("Training finished and saved")
y = output.find("Error")
if(x != -1):
print("Training finished")
process.terminate()
self.controller.addInfoText('finished Training\n')
self.controller.stop("filterClassic")
break
elif(y != -1 ):
print("Error occured")
self.controller.changeScreen("StartPage")
self.controller.addInfoText("Fehler beim XDawn Training aufgetaucht\n")
self.controller.stop()
process.terminate()
break
self.controller.stop()
#self.controller.filterClassic()
def trainClassifier(self):
print("start training Classifier")
self.controller.addInfoText("start training with Classifier -- ")
path = self.PATH_FILES + 'p300-visual-3-train-classifier.xml'
process = Popen(['bash', self.PATH_OV, '--play', path, '--no-gui'],
stdout=PIPE,
universal_newlines=True)
self.openVibeAktiv = True
counter = 0
while True:
output = process.stdout.readline()
print(output.strip())
x = output.find("aka Classifier trainer")
accuracy = output.find("Training set accuracy is")
y = output.find("Error")
if(x != -1):
counter = counter +1
#counter = 18
if(counter >= 17):
print("Training finished")
self.controller.addInfoText('finished Training\n')
process.terminate()
self.controller.stop("save")
break
elif(y != -1 ):
print("Error occured")
self.controller.changeScreen("StartPage")
self.controller.addInfoText("Fehler beim Classifier Training aufgetaucht\n")
process.terminate()
break
elif(accuracy != -1):
print("ACCURACY" + output)
self.controller.changeScreen("StartPage")
self.controller.stop()
def freeSpelling(self):
#bei error auch abrechen?
print("start freeSpelling")
self.controller.resetInfo()
self.controller.addInfoText('start free spelling -- ')
path = self.PATH_FILES + 'p300-visual-4-online.xml'
process = Popen(['bash', self.PATH_OV, '--play', path, '--no-gui'],
stdout=PIPE,
universal_newlines=True)
self.openVibeAktiv = True
while True:
output = process.stdout.readline()
print(output.strip())
y = output.find("Error")
x = output.find("Schlagwort")
if(x != -1):
print("End Spelling")
process.terminate()
self.controller.addInfoText('finished freespelling\n')
self.controller.changeScreen("StartPage")
self.controller.stop()
break
elif(y != -1 ):
print("Error occured")
self.controller.changeScreen("StartPage")
self.controller.addInfoText("Fehler beim Freespelling aufgetaucht\n")
process.terminate()
self.controller.stop()
break
self.controller.changeScreen("StartPage")
self.controller.stop()
def killProzess(self):
if(self.openVibeAktiv):
self.openVibeAktiv = False
print('start killing')
pidOV = 0
items = []
prozesse = Popen(["ps", "-e"], stdout=PIPE).communicate()[0].strip()
zeilen = prozesse.split('\n')
for z in zeilen:
if(z.find("openvibe-design") != -1):
z = z.strip()
items = z.split(' ')
pidOV = items[0]
#kill -TERM veranlasst dem Prozess sich selbst zu beenden (nicht erzwungen)
Popen(["kill", "-TERM", str(pidOV)], stdout=PIPE).communicate()
print("killed openvibe-designer")