Newer
Older
#!/usr/bin/env python2
import sys
import os
directory = os.path.dirname(__file__) or '.'
os.environ['GST_PLUGIN_PATH'] = directory + '/asr/'
print 'gst plugin path =', os.environ['GST_PLUGIN_PATH']
# import gtk stuff
from threading import Thread
import gi
gi.require_version('Gst', '1.0')
from gi.repository import GObject, Gst, Gtk, Gdk
GObject.threads_init()
Gdk.threads_init()
Gst.init(None)
# make sure ctrl-c works
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
# import local stuff
def __init__(self, xml_filename, asr_config_file, osc_host, osc_port):
super(ScriptedASR, self).__init__()
self.connect("destroy", self.quit)
self.set_title('ASR Transcript [xml=%s asr=%s osc=%s:%s]' % (xml_filename, asr_config_file, osc_host, osc_port))
self.lines = [x for x in self.xmlview.get_line_iterator()]
self.current_line = -1
self.confirmer = confirm.ConfirmationBox()
vbox.pack_start(self.confirmer, False, True, 5)
self.asr = asr.ASR(asr_config_file, self.hyp_changed, self.hyp_changed)
# slu
prefix = 'slu/automate/homeostasis_25nov_%s'
self.slu = {}
for section_fst in glob.glob(prefix % 'section*.fst'):
found = re.search('section(\d+)\.fst$', section_fst)
if found:
section_id = int(found.group(1))
self.slu[section_id] = SLU.SLU(prefix % 'dico_word.txt', prefix % 'dico_action.txt', section_fst, prefix % 'clean_tail.fst')
# load css style
style_provider = Gtk.CssProvider()
style_provider.load_from_data(open('data/style.css', 'rb').read())
Gtk.StyleContext.add_provider_for_screen( Gdk.Screen.get_default(), style_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
# setup singletons
osc.setup(osc_host, osc_port)
actions.setup(self.confirmer, self.xmlview)
def line_clicked(self, widget, event):
if self.current_line >= 0:
self.lines[self.current_line].highlight(False)
for i, line in enumerate(self.lines):
if widget is line:
self.current_line = i
self.lines[self.current_line].highlight(True)
#hyp = ' '.join(hyp).replace('[noise]', ' ').split()
words = hyp[-1].strip().replace('_', ' ').split()
if section_id in self.slu:
slu = self.slu[section_id]
previous_actions = slu.num_actions()
slu.process(words)
for action_id in range(previous_actions, slu.num_actions()):
action = slu.get_action(action_id)
#if self.current_line >= len(self.lines) - 1:
# print "FINISHED"
# return
#line = self.lines[self.current_line + 1].text.split()
#import levenstein
#num_errors, num_ref, alignment, score = levenstein.align(line, words)
#num_matches = 0
#for ref_word, hyp_word in alignment:
# if ref_word == hyp_word and ref_word != None:
# num_matches += 1
#score = float(num_matches) / max(len(line), len(words))
#print 'ASR:', hyp[-1], 'REF:', self.lines[self.current_line + 1].text, 'score:', score
#levenstein.print_alignment(alignment)
#if score >= 0.5:
# if self.current_line >= 0:
# self.lines[self.current_line].highlight(False)
# self.current_line += 1
# self.lines[self.current_line].highlight(True)
Gtk.main_quit()
if __name__ == '__main__':
xml_filename = 'data/homeostasis_25nov.xml'
if len(sys.argv) > 1:
xml_filename = sys.argv[1]
xml_filename, asr_config_file, osc_host, osc_port = selector.ModelSelector(xml_filename, asr_config_file).run()
if xml_filename == None or asr_config_file == None or osc_host == None or osc_port == None:
app = ScriptedASR(xml_filename, asr_config_file, osc_host, osc_port)