_                                         _           _   
     (_)_ __  _ __  _ __ ___    _ __  _ __ ___ (_) ___  ___| |_ 
     | | '_ \| '_ \| '__/ _ \  | '_ \| '__/ _ \| |/ _ \/ __| __|
     | | | | | |_) | | | (_) | | |_) | | | (_) | |  __/ (__| |_ 
     |_|_| |_| .__/|_|  \___/  | .__/|_|  \___// |\___|\___|\__|
             |_|               |_|           |__/               

# InproTK

InproTK is a toolkit for incremental processing, to be precise, 
incremental spoken language processing, and even more precise, 
incremental situated spoken interaction processing (i.e., dialogue).

InproTK is being used for building speech-based human-computer 
interfaces for speech-based manipulation, flexible spoken output, 
multi-modal integration, and full-fledged dialogue systems. 

The core of InproTK is its _Incremental Unit_ architecture, which 
provides data structures (the _IU network_) to manage the changing 
hypotheses of a system about the state of affairs while input is 
being processed (and hence, more knowledge is integrated into the 
system). As part of the architecture, the IU network is manipulated 
by _IU modules_, which, based on changes to existing IUs, generate 
their own IUs, or purge IUs from the network. 
It is highly convenient for a module to be informed about the 
hypothesis states either in terms of the full state (all IUs), 
or in terms of what has changed since the last state (all edits); 
InproTK provides both views to IU modules. 

InproTK comes with a collection of pre-existing IU modules: 
* incremental speech recognition based on CMU Sphinx-4,
* incremental speech recognition based on Google's cloud-based 
  speech recognizer via Google Chrome (or Chromium),
* incremental speech synthesis based on MaryTTS
* semantic tagging, some syntax/semantics generation based on RMRS,
* an information state-based dialogue manager, but also integration 
  with the OpenDial dialogue management toolkit
* debugging modules for visualizing and logging the IU network evolution.

## Applications

All generic applications reside in the inpro.apps package.
This directory is also where the default configuration files
are stored. The configuration file used can be changed in all
applications described below with the commandline switch "-c".
- SimpleReco: main starting point into our world. This executable 
starts the speech recognition and all modules that are connected
to it. (Remember? Bottom-up processing.) 
Speech recognition can be configured to run from file (-F), from
microphone (-M) or from the network via RTP (-R; notice that our 
RTP implementation is far from standard-conforming).
There are options for additional output, to control ASR incrementality
filtering, and to control special recognition modes (like forced
alignment or completely fake recognition from a TextGrid). Start
SimpleReco without arguments to get a list of commandline options.

- SimpleText: to test higher-level modules, it is often convenient
to directly input words, instead of just talking into the system.
This allows for more fine-grained, detailed and repeatable testing.
SimpleText allows to do just that. By default, SimpleText will start
in interactive mode. SimpleText -h will give you the list of 
commandline options.

- SimpleRTP: This can be used to forward data via RTP which is 
useful in connection with SimpleReco -R if the recognizer should 
not run on the local machine. 
- SimpleMonitor: Likewise, this program can be used to output data
that is sent to the monitor via RTP.