You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

UIModellTaktil.py 8.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. '''--------------------------------------------------------------------------------------------------
  2. Das taktile Model steuert den Ablauf der aufrufe der Openvibe Funktionen fuer das taktile BCI
  3. noch nicht implementiert da noch kein Programm dafuer
  4. '''
  5. from subprocess import *
  6. from threading import Thread
  7. import time
  8. from UIModell import *
  9. class ModellTaktil(Modell):
  10. def __init__(self,c, dll):
  11. Thread.__init__(self)
  12. Modell.__init__(self, c, dll)
  13. #self.dll = dll
  14. self.aktiv= True
  15. self.openVibeAktiv = False
  16. def stop(self):
  17. '''--------------------------------------------------------------------------------------------------
  18. Die Funktion stop stopt den ablaufenden Thread
  19. '''
  20. print("stop thread")
  21. self.aktiv = False
  22. def setFunktion(self, func, args=None, kwargs=None):
  23. '''--------------------------------------------------------------------------------------------------
  24. Mittels dieser Funktion kann die im Thread ablaufende Funktion und deren Argumente eingestellt werden
  25. '''
  26. self.func = func
  27. self.args = args or []
  28. self.kwargs = kwargs or {}
  29. def run(self):
  30. '''--------------------------------------------------------------------------------------------------
  31. Wird bei Thread.start() aus dem Controller aufgerufen und laeuft ab sobald der Thread destartet wurde
  32. '''
  33. print("start thread")
  34. #self.aktiv = True
  35. t = Thread(target=self.func, args=self.args, kwargs=self.kwargs)
  36. t.setDaemon(True)
  37. t.start()
  38. while self.aktiv:
  39. time.sleep(0.1)
  40. def startCopySpelling(self):
  41. '''--------------------------------------------------------------------------------------------------
  42. Holt aus der shared Librarz die Befehle und startet das Copyspelling. Reagiert auf Error oder
  43. beenden. Bei Beenden startet es das XDawnTraining, bei Error wird der Vorgang gestoppt.
  44. '''
  45. print("start copySpelling")
  46. self.controller.resetInfo()
  47. self.controller.addInfoText('Starten des gefuerten Buchstabierens -- ')
  48. command = self.dll.getCommandCopyspellingVisuell().split(" ")
  49. process = Popen(command, stdout=PIPE, universal_newlines=True)
  50. self.openVibeAktiv = True
  51. while True:
  52. output = process.stdout.readline()
  53. print(output.strip())
  54. x = output.find("schlagwort?")
  55. y = output.find("Error")
  56. if(x != -1):
  57. print("Training finished")
  58. process.terminate()
  59. self.controller.addInfoText('Buchstabieren beendet\n')
  60. self.controller.stop("filterXdawn")
  61. break
  62. elif(y != -1 ):
  63. print("Error occured")
  64. self.controller.changeScreen("StartPage")
  65. self.controller.addInfoText("Fehler beim Buchstabieren aufgetaucht\n")
  66. process.terminate()
  67. self.controller.stop()
  68. break
  69. if not self.aktiv:
  70. print("stop")
  71. break
  72. self.controller.stop()
  73. def trainXDawn(self):
  74. '''--------------------------------------------------------------------------------------------------
  75. Holt aus der shared Library die Befehle und startet das XDawnTraining. Reagiert auf Error oder
  76. die Ausgabe das das Training beendet wurde. Bei Beenden startet es das ClassifierTraining, bei Error wird der Vorgang gestoppt.
  77. '''
  78. print("start training Xdawn")
  79. self.controller.addInfoText('Starten des xDawn-Trainings -- ')
  80. command = self.dll.getCommandXDawn().split(" ")
  81. process = Popen(command, stdout=PIPE, universal_newlines=True)
  82. self.openVibeAktiv = True
  83. while self.aktiv:
  84. output = process.stdout.readline()
  85. print(output.strip())
  86. x = output.find("Training finished and saved")
  87. y = output.find("Error")
  88. if(x != -1):
  89. print("Training finished")
  90. process.terminate()
  91. self.controller.addInfoText('Training beendet\n')
  92. self.controller.stop("filterClassic")
  93. break
  94. elif(y != -1 ):
  95. print("Error occured")
  96. self.controller.changeScreen("StartPage")
  97. self.controller.addInfoText("Fehler beim XDawn Training aufgetaucht\n")
  98. self.controller.stop()
  99. process.terminate()
  100. break
  101. if not self.aktiv:
  102. print("stop")
  103. break
  104. self.controller.stop()
  105. #self.controller.filterClassic()
  106. def trainClassifier(self):
  107. '''--------------------------------------------------------------------------------------------------
  108. Holt aus der shared Library die Befehle und startet das ClassifierTraining. Reagiert auf Error oder
  109. die Ausgabe das das Training beendet wurde. Bei Beenden startet es das speichern der Daten, bei Error wird der Vorgang gestoppt.
  110. '''
  111. print("start training Classifier")
  112. self.controller.addInfoText("Starten des Classifier-Trainings -- ")
  113. command = self.dll.getCommandClassifier().split(" ")
  114. process = Popen(command, stdout=PIPE, universal_newlines=True)
  115. self.openVibeAktiv = True
  116. counter = 0
  117. while True:
  118. output = process.stdout.readline()
  119. print(output.strip())
  120. x = output.find("aka Classifier trainer")
  121. accuracy = output.find("Training set accuracy is")
  122. y = output.find("Error")
  123. if(x != -1):
  124. counter = counter +1
  125. #counter = 18
  126. if(counter >= 17):
  127. print("Training finished")
  128. self.controller.addInfoText('Training beendet\n')
  129. process.terminate()
  130. self.controller.stop("save")
  131. break
  132. elif(y != -1 ):
  133. print("Error occured")
  134. self.controller.changeScreen("StartPage")
  135. self.controller.addInfoText("Fehler beim Classifier Training aufgetaucht\n")
  136. process.terminate()
  137. break
  138. elif(accuracy != -1):
  139. print("ACCURACY" + output)
  140. if not self.aktiv:
  141. print("stop")
  142. break
  143. self.controller.changeScreen("StartPage")
  144. self.controller.stop()
  145. def freeSpelling(self):
  146. '''--------------------------------------------------------------------------------------------------
  147. Holt aus der shared Library die Befehle und startet das Freespelling. Reagiert auf Error oder
  148. beenden. Daraufhin wird der Vorgang gestoppt.
  149. '''
  150. print("start freeSpelling")
  151. self.controller.resetInfo()
  152. self.controller.addInfoText('Starten des freien Buchstabierens -- ')
  153. command = self.dll.getCommandFreespellingVisuell().split(" ")
  154. process = Popen(command, stdout=PIPE, universal_newlines=True)
  155. self.openVibeAktiv = True
  156. while True:
  157. output = process.stdout.readline()
  158. print(output.strip())
  159. y = output.find("Error")
  160. x = output.find("Schlagwort")
  161. if(x != -1):
  162. print("End Spelling")
  163. process.terminate()
  164. self.controller.addInfoText('Buchstabieren beendet\n')
  165. self.controller.changeScreen("StartPage")
  166. self.controller.stop()
  167. break
  168. elif(y != -1 ):
  169. print("Error occured")
  170. self.controller.changeScreen("StartPage")
  171. self.controller.addInfoText("Fehler beim Buchstabieren aufgetaucht\n")
  172. process.terminate()
  173. self.controller.stop()
  174. break
  175. if not self.aktiv:
  176. print("stop")
  177. break
  178. self.controller.changeScreen("StartPage")
  179. self.controller.stop()
  180. def killProzess(self):
  181. '''--------------------------------------------------------------------------------------------------
  182. Ruft den Parent auf, dass Openvibe falls es noch laeuft geschlossen wird
  183. '''
  184. if(self.openVibeAktiv):
  185. self.openVibeAktiv = False
  186. self.killProzessParent()