BCIgui/Projekte/UIModellVisuell.py
2022-01-11 14:31:48 +00:00

197 lines
7.3 KiB
Python

from subprocess import *
from threading import Thread
import time
from UIModell import Modell
class ModellVisuell(Modell):
def __init__(self,c, path_ov, path_files):
Thread.__init__(self)
Modell.__init__(self, c)
self.PATH_FILES = path_files
self.PATH_OV = path_ov
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
self.positionWindow()
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
self.killProzessParent()
def positionWindow(self):
print("calles positionWindow")
name = "firefox"
parameter = self.controller.getWindowSize()
positionX = int(parameter[0]+ int(parameter[3] * 0.05))
positionY = int(parameter[1]) + int(parameter[2]*0.08)
height = int(parameter[2])*0.55
width = int(parameter[3])*0.9
windowID = Popen(["xdotool", "search", "--onlyvisible", "--name", name], stdout=PIPE).communicate()[0].strip()
Popen(["xdotool", "windowsize", windowID, str(width), str(height)], stdout=PIPE).communicate()
Popen(["xdotool", "windowmove", windowID, str(positionX), str(positionY)], stdout=PIPE).communicate()
Popen(["xdotool", "windowactivate", windowID], stdout=PIPE).communicate()[0].strip()
#windowminimize ums ein fenster klein zu machen