197 lines
7.3 KiB
Python
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
|
|
|
|
|
|
|
|
|