Download gst/livedemo.py from camenduru/pocketsphinx: direct link, hf CLI and curl.
- Browser
- Download file 3.68 kB
-
https://huggingface.co/camenduru/pocketsphinx/resolve/main/gst/livedemo.py
- Command line
-
hf download hf://camenduru/pocketsphinx/gst/livedemo.py
-
curl -L -o livedemo.py https://huggingface.co/camenduru/pocketsphinx/resolve/main/gst/livedemo.py
3.68 kB
| #!/usr/bin/env python | |
| # Copyright (c) 2008 Carnegie Mellon University. | |
| # | |
| # You may modify and redistribute this file under the same terms as | |
| # the CMU Sphinx system. See LICENSE for more information. | |
| from gi import pygtkcompat | |
| import gi | |
| gi.require_version('Gst', '1.0') | |
| from gi.repository import GObject, Gst | |
| GObject.threads_init() | |
| Gst.init(None) | |
| gst = Gst | |
| print("Using pygtkcompat and Gst from gi") | |
| pygtkcompat.enable() | |
| pygtkcompat.enable_gtk(version='3.0') | |
| import gtk | |
| class DemoApp(object): | |
| """GStreamer/PocketSphinx Demo Application""" | |
| def __init__(self): | |
| """Initialize a DemoApp object""" | |
| self.init_gui() | |
| self.init_gst() | |
| def init_gui(self): | |
| """Initialize the GUI components""" | |
| self.window = gtk.Window() | |
| self.window.connect("delete-event", gtk.main_quit) | |
| self.window.set_default_size(400,200) | |
| self.window.set_border_width(10) | |
| vbox = gtk.VBox() | |
| self.textbuf = gtk.TextBuffer() | |
| self.text = gtk.TextView(buffer=self.textbuf) | |
| self.text.set_wrap_mode(gtk.WRAP_WORD) | |
| vbox.pack_start(self.text) | |
| self.button = gtk.ToggleButton("Speak") | |
| self.button.connect('clicked', self.button_clicked) | |
| vbox.pack_start(self.button, False, False, 5) | |
| self.window.add(vbox) | |
| self.window.show_all() | |
| def init_gst(self): | |
| """Initialize the speech components""" | |
| self.pipeline = gst.parse_launch('autoaudiosrc ! audioconvert ! audioresample ' | |
| '! pocketsphinx ! fakesink') | |
| # '! pocketsphinx hmm=../model/en-us/en-us lm=../model/en-us/en-us.lm.bin dict=../model/en-us/cmudict-en-us.dict ! fakesink') | |
| bus = self.pipeline.get_bus() | |
| bus.add_signal_watch() | |
| bus.connect('message::element', self.element_message) | |
| self.pipeline.set_state(gst.State.PAUSED) | |
| def element_message(self, bus, msg): | |
| """Receive element messages from the bus.""" | |
| msgtype = msg.get_structure().get_name() | |
| if msgtype != 'pocketsphinx': | |
| return | |
| if msg.get_structure().get_value('final'): | |
| self.final_result(msg.get_structure().get_value('hypothesis'), msg.get_structure().get_value('confidence')) | |
| self.pipeline.set_state(gst.State.PAUSED) | |
| self.button.set_active(False) | |
| elif msg.get_structure().get_value('hypothesis'): | |
| self.partial_result(msg.get_structure().get_value('hypothesis')) | |
| def partial_result(self, hyp): | |
| """Delete any previous selection, insert text and select it.""" | |
| # All this stuff appears as one single action | |
| self.textbuf.begin_user_action() | |
| self.textbuf.delete_selection(True, self.text.get_editable()) | |
| self.textbuf.insert_at_cursor(hyp) | |
| ins = self.textbuf.get_insert() | |
| iter = self.textbuf.get_iter_at_mark(ins) | |
| iter.backward_chars(len(hyp)) | |
| self.textbuf.move_mark(ins, iter) | |
| self.textbuf.end_user_action() | |
| def final_result(self, hyp, confidence): | |
| """Insert the final result.""" | |
| # All this stuff appears as one single action | |
| self.textbuf.begin_user_action() | |
| self.textbuf.delete_selection(True, self.text.get_editable()) | |
| self.textbuf.insert_at_cursor(hyp) | |
| self.textbuf.end_user_action() | |
| def button_clicked(self, button): | |
| """Handle button presses.""" | |
| if button.get_active(): | |
| button.set_label("Stop") | |
| self.pipeline.set_state(gst.State.PLAYING) | |
| else: | |
| button.set_label("Speak") | |
| self.pipeline.set_state(gst.State.PAUSED) | |
| app = DemoApp() | |
| gtk.main() | |