addFilemanagment
This commit is contained in:
parent
9a08c137d1
commit
7028038643
@ -0,0 +1,2 @@
|
||||
# OpenViBE_visual_BCI
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,6 +1,7 @@
|
||||
import UIModellVisuell as modelVisuell
|
||||
import UIModellTaktil as modelsTaktil
|
||||
import UIViewTKinter as viewTkinter
|
||||
from shutil import copyfile
|
||||
|
||||
|
||||
|
||||
@ -9,6 +10,8 @@ class Controller():
|
||||
def __init__(self):
|
||||
self.view = viewTkinter.View(self)
|
||||
self.modi = "visuellesBCI"
|
||||
self.pathOVFile = "Projekte/OpenViBE_visual_BCI-master/openvibe_visual_bci/signals/p300-xdawn-train2.ov"
|
||||
self.infotext = ""
|
||||
|
||||
self.commands = {
|
||||
"copySpelling": self.commandoCopySpelling,
|
||||
@ -16,12 +19,13 @@ class Controller():
|
||||
"freeSpelling": self.commandFreeSpelling,
|
||||
"test": self.test,
|
||||
"wechsel": self.wechsel,
|
||||
"speicherort": self.speicherort
|
||||
"speicherort": self.setDataset
|
||||
}
|
||||
|
||||
self.nexts = {
|
||||
"filterXdawn" : self.filterXdawn,
|
||||
"filterClassic": self.filterClassic
|
||||
"filterClassic": self.filterClassic,
|
||||
"save": self.speichern
|
||||
}
|
||||
|
||||
self.pagesTaktil = {
|
||||
@ -66,11 +70,17 @@ class Controller():
|
||||
self.view.setChangeBtnText("Wechsel zu visuellen BCI")
|
||||
self.modi = "taktilesBCI"
|
||||
|
||||
def speicherort(self):
|
||||
pass
|
||||
def speichern(self):
|
||||
print("saveFile")
|
||||
copyfile(self.pathOVFile, self.file)
|
||||
|
||||
def setDataset(self):
|
||||
file = self.view.openfiledialog()
|
||||
copyfile(file, self.pathOVFile)
|
||||
|
||||
|
||||
def test(self):
|
||||
self.file = self.view.savefiledialog()
|
||||
if(self.modi == "taktilesBCI"):
|
||||
self.model = modelsTaktil.Modell(self)
|
||||
elif(self.modi == "visuellesBCI"):
|
||||
@ -80,6 +90,7 @@ class Controller():
|
||||
|
||||
#wird durch Btn gestartet -> startet copyspelling als thread
|
||||
def commandoCopySpelling(self):
|
||||
self.file = self.view.savefiledialog()
|
||||
if(self.modi == "taktilesBCI"):
|
||||
self.model = modelsTaktil.Modell(self)
|
||||
elif(self.modi == "visuellesBCI"):
|
||||
@ -116,7 +127,7 @@ class Controller():
|
||||
|
||||
def commandStop(self):
|
||||
if(self.model is not None):
|
||||
self.setInfos("Action: STOP-Command")
|
||||
self.addInfoText("Action: STOP-Command")
|
||||
self.model.stop()
|
||||
self.model.join()
|
||||
self.model.killProzess()
|
||||
@ -133,8 +144,12 @@ class Controller():
|
||||
func = self.nexts.get(next)
|
||||
func()
|
||||
|
||||
def setInfos(self,text):
|
||||
self.view.setInfoText(text)
|
||||
def addInfoText(self,text):
|
||||
self.infotext = self.infotext + text
|
||||
self.view.setInfoText(self.infotext)
|
||||
|
||||
def resetInfo(self):
|
||||
self.infotext = ""
|
||||
|
||||
def setTitle(self,text):
|
||||
self.view.setTitleText(text)
|
||||
|
Binary file not shown.
@ -11,7 +11,6 @@ class Modell(Thread):
|
||||
self.controller = c
|
||||
self.aktiv= True
|
||||
self.openVibeAktiv = False
|
||||
self.infoText = ''
|
||||
|
||||
def stop(self):
|
||||
print("stop thread")
|
||||
@ -35,8 +34,8 @@ class Modell(Thread):
|
||||
|
||||
def startCopySpelling(self):
|
||||
print("start copySpelling")
|
||||
self.infoText = 'start copyspelling -- '
|
||||
self.controller.setInfos(self.infoText)
|
||||
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'],
|
||||
@ -51,14 +50,13 @@ class Modell(Thread):
|
||||
if(x != -1):
|
||||
print("Training finished")
|
||||
process.terminate()
|
||||
self.infoText = self.infoText + 'finished Copyspelling\n'
|
||||
self.controller.setInfos(self.infoText)
|
||||
self.controller.addInfoText('finished Copyspelling\n')
|
||||
self.controller.stop("filterXdawn")
|
||||
break
|
||||
elif(y != -1 ):
|
||||
print("Error occured")
|
||||
self.controller.changeScreen("StartPage")
|
||||
self.controller.setInfos(self.infoText + "Fehler beim Copyspelling aufgetaucht\n")
|
||||
self.controller.addInfoText("Fehler beim Copyspelling aufgetaucht\n")
|
||||
process.terminate()
|
||||
self.controller.stop()
|
||||
break
|
||||
@ -70,8 +68,7 @@ class Modell(Thread):
|
||||
|
||||
def trainXDawn(self):
|
||||
print("start training Xdawn")
|
||||
self.infoText = self.infoText + 'start training XDawn -- '
|
||||
self.controller.setInfos(self.infoText)
|
||||
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'],
|
||||
@ -86,14 +83,13 @@ class Modell(Thread):
|
||||
if(x != -1):
|
||||
print("Training finished")
|
||||
process.terminate()
|
||||
self.infoText = self.infoText + 'finished Training\n'
|
||||
self.controller.setInfos(self.infoText)
|
||||
self.controller.addInfoText('finished Training\n')
|
||||
self.controller.stop("filterClassic")
|
||||
break
|
||||
elif(y != -1 ):
|
||||
print("Error occured")
|
||||
self.controller.changeScreen("StartPage")
|
||||
self.controller.setInfos(self.infoText + "Fehler beim XDawn Training aufgetaucht\n")
|
||||
self.controller.addInfoText("Fehler beim XDawn Training aufgetaucht\n")
|
||||
self.controller.stop()
|
||||
process.terminate()
|
||||
break
|
||||
@ -105,8 +101,7 @@ class Modell(Thread):
|
||||
|
||||
def trainClassifier(self):
|
||||
print("start training Classifier")
|
||||
self.infoText = self.infoText + "start training with Classifier -- "
|
||||
self.controller.setInfos(self.infoText)
|
||||
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'],
|
||||
@ -125,14 +120,14 @@ class Modell(Thread):
|
||||
#counter = 18
|
||||
if(counter >= 17):
|
||||
print("Training finished")
|
||||
self.infoText = self.infoText + 'finished Training\n'
|
||||
self.controller.setInfos(self.infoText)
|
||||
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.setInfos(self.infoText + "Fehler beim Classifier Training aufgetaucht\n")
|
||||
self.controller.addInfoText("Fehler beim Classifier Training aufgetaucht\n")
|
||||
process.terminate()
|
||||
break
|
||||
elif(accuracy != -1):
|
||||
@ -144,8 +139,8 @@ class Modell(Thread):
|
||||
def freeSpelling(self):
|
||||
#bei error auch abrechen?
|
||||
print("start freeSpelling")
|
||||
self.infoText = 'start free spelling -- '
|
||||
self.controller.setInfos(self.infoText)
|
||||
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,
|
||||
@ -159,15 +154,14 @@ class Modell(Thread):
|
||||
if(x != -1):
|
||||
print("End Spelling")
|
||||
process.terminate()
|
||||
self.infoText = self.infoText + 'finished freespelling\n'
|
||||
self.controller.setInfos(self.infoText)
|
||||
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.setInfos(self.infoText + "Fehler beim Freespelling aufgetaucht\n")
|
||||
self.controller.addInfoText("Fehler beim Freespelling aufgetaucht\n")
|
||||
process.terminate()
|
||||
self.controller.stop()
|
||||
break
|
||||
|
Binary file not shown.
@ -11,7 +11,6 @@ class Modell(Thread):
|
||||
self.controller = c
|
||||
self.aktiv= True
|
||||
self.openVibeAktiv = False
|
||||
self.infoText = ''
|
||||
|
||||
def stop(self):
|
||||
print("stop thread")
|
||||
@ -35,14 +34,14 @@ class Modell(Thread):
|
||||
|
||||
def startCopySpelling(self):
|
||||
print("start copySpelling")
|
||||
self.infoText = 'start copyspelling -- '
|
||||
self.controller.setInfos(self.infoText)
|
||||
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
|
||||
self.openVibeAktiv = True
|
||||
while True:
|
||||
output = process.stdout.readline()
|
||||
print(output.strip())
|
||||
@ -51,17 +50,17 @@ class Modell(Thread):
|
||||
if(x != -1):
|
||||
print("Training finished")
|
||||
process.terminate()
|
||||
self.infoText = self.infoText + 'finished Copyspelling\n'
|
||||
self.controller.setInfos(self.infoText)
|
||||
self.controller.addInfoText('finished Copyspelling\n')
|
||||
self.controller.stop("filterXdawn")
|
||||
break
|
||||
elif(y != -1 ):
|
||||
print("Error occured")
|
||||
self.controller.changeScreen("StartPage")
|
||||
self.controller.setInfos(self.infoText + "Fehler beim Copyspelling aufgetaucht\n")
|
||||
self.controller.addInfoText("Fehler beim Copyspelling aufgetaucht\n")
|
||||
process.terminate()
|
||||
self.controller.stop()
|
||||
break
|
||||
|
||||
|
||||
self.controller.stop()
|
||||
#self.killProzess()
|
||||
@ -69,9 +68,9 @@ class Modell(Thread):
|
||||
|
||||
def trainXDawn(self):
|
||||
print("start training Xdawn")
|
||||
self.infoText = self.infoText + 'start training XDawn -- '
|
||||
self.controller.setInfos(self.infoText)
|
||||
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)
|
||||
@ -84,14 +83,13 @@ class Modell(Thread):
|
||||
if(x != -1):
|
||||
print("Training finished")
|
||||
process.terminate()
|
||||
self.infoText = self.infoText + 'finished Training\n'
|
||||
self.controller.setInfos(self.infoText)
|
||||
self.controller.addInfoText('finished Training\n')
|
||||
self.controller.stop("filterClassic")
|
||||
break
|
||||
elif(y != -1 ):
|
||||
print("Error occured")
|
||||
self.controller.changeScreen("StartPage")
|
||||
self.controller.setInfos(self.infoText + "Fehler beim XDawn Training aufgetaucht\n")
|
||||
self.controller.addInfoText("Fehler beim XDawn Training aufgetaucht\n")
|
||||
self.controller.stop()
|
||||
process.terminate()
|
||||
break
|
||||
@ -103,31 +101,37 @@ class Modell(Thread):
|
||||
|
||||
def trainClassifier(self):
|
||||
print("start training Classifier")
|
||||
self.infoText = self.infoText + "start training with Classifier -- "
|
||||
self.controller.setInfos(self.infoText)
|
||||
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
|
||||
self.openVibeAktiv = True
|
||||
counter = 0
|
||||
while True:
|
||||
output = process.stdout.readline()
|
||||
print(output.strip())
|
||||
x = output.find("schlagwort?")
|
||||
x = output.find("aka Classifier trainer")
|
||||
accuracy = output.find("Training set accuracy is")
|
||||
y = output.find("Error")
|
||||
if(x != -1):
|
||||
print("Training finished")
|
||||
self.infoText = self.infoText + 'finished Training\n'
|
||||
self.controller.setInfos(self.infoText)
|
||||
process.terminate()
|
||||
break
|
||||
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.setInfos(self.infoText + "Fehler beim Classifier Training aufgetaucht\n")
|
||||
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()
|
||||
@ -135,8 +139,8 @@ class Modell(Thread):
|
||||
def freeSpelling(self):
|
||||
#bei error auch abrechen?
|
||||
print("start freeSpelling")
|
||||
self.infoText = 'start free spelling -- '
|
||||
self.controller.setInfos(self.infoText)
|
||||
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,
|
||||
@ -150,15 +154,14 @@ class Modell(Thread):
|
||||
if(x != -1):
|
||||
print("End Spelling")
|
||||
process.terminate()
|
||||
self.infoText = self.infoText + 'finished freespelling\n'
|
||||
self.controller.setInfos(self.infoText)
|
||||
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.setInfos(self.infoText + "Fehler beim Freespelling aufgetaucht\n")
|
||||
self.controller.addInfoText("Fehler beim Freespelling aufgetaucht\n")
|
||||
process.terminate()
|
||||
self.controller.stop()
|
||||
break
|
||||
@ -185,7 +188,4 @@ class Modell(Thread):
|
||||
Popen(["kill", "-TERM", str(pidOV)], stdout=PIPE).communicate()
|
||||
|
||||
|
||||
print("killed openvibe-designer")
|
||||
|
||||
|
||||
|
||||
print("killed openvibe-designer")
|
Binary file not shown.
@ -1,7 +1,9 @@
|
||||
try:
|
||||
from Tkinter import *
|
||||
import tkFileDialog as fd
|
||||
except ImportError:
|
||||
from tkinter import *
|
||||
from tkinter import filedialog as fd
|
||||
|
||||
#from tkinter import font
|
||||
from UIController import *
|
||||
@ -63,8 +65,9 @@ class View(Tk):
|
||||
def createTopFrame(self):
|
||||
self.topFrame = Frame(self, bg=self.layout["backgroundBar"], height=50, width=500)
|
||||
self.changeBtn = Button(self.topFrame, text="Wechsel zu taktilen BCI", command=lambda: self.controller.actionPerformed("wechsel"), height=2, width = 25, font=self.layout["fontSmall"], bg=self.layout["backgroundBtn"], fg=self.layout["fontColor"])
|
||||
self.saveBtn = Button(self.topFrame, text="Aenderung des Speicherorts", command=lambda: self.controller.actionPerformed("speicherort"), height=2, width = 25, font=self.layout["fontSmall"], bg=self.layout["backgroundBtn"], fg=self.layout["fontColor"])
|
||||
self.toplabel = Label(self.topFrame, text="visuelles Buchstabieren", font=self.layout["font"], bg=self.layout["backgroundBar"], fg=self.layout["fontColor"], )
|
||||
self.saveBtn = Button(self.topFrame, text="Auswaehlen der Datei", command=lambda: self.controller.actionPerformed("speicherort"), height=2, width = 25, font=self.layout["fontSmall"], bg=self.layout["backgroundBtn"], fg=self.layout["fontColor"])
|
||||
#self.setBtn = Button(self.topFrame, text="Auswaehlen der Datei", command=lambda: self.controller.actionPerformed("setFile"), height=2, width = 25, font=self.layout["fontSmall"], bg=self.layout["backgroundBtn"], fg=self.layout["fontColor"])
|
||||
self.toplabel = Label(self.topFrame, text="visuelles BCI", font=self.layout["font"], bg=self.layout["backgroundBar"], fg=self.layout["fontColor"], )
|
||||
|
||||
self.topFrame.grid(column=0, row=0)
|
||||
self.topFrame.grid_propagate(0)
|
||||
@ -72,6 +75,7 @@ class View(Tk):
|
||||
|
||||
self.changeBtn.grid(column=0, row=0, padx=10,pady=5)
|
||||
self.saveBtn.grid(column=1, row=0, padx=10, pady=5)
|
||||
#self.setBtn.grid(column=2, row=0, padx=10, pady=5)
|
||||
self.toplabel.grid(column=2, row=0, padx=100, pady=2)
|
||||
|
||||
def createMainFrame(self):
|
||||
@ -114,6 +118,16 @@ class View(Tk):
|
||||
def setChangeBtnText(self,text):
|
||||
self.changeBtn["text"] = text
|
||||
|
||||
def openfiledialog(self):
|
||||
path = "Projekte/OpenViBE_visual_BCI-master/openvibe_visual_bci/datasets"
|
||||
file = fd.askopenfilename(initialdir=path)
|
||||
return file
|
||||
|
||||
def savefiledialog(self):
|
||||
path = "Projekte/OpenViBE_visual_BCI-master/openvibe_visual_bci/datasets"
|
||||
file = fd.asksaveasfilename(initialdir=path)
|
||||
return file
|
||||
|
||||
|
||||
class StartPage(Frame):
|
||||
def __init__(self, parent, controller, layout):
|
||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user