tomwalters@365: #!/usr/bin/env python tomwalters@365: # encoding: utf-8 tomwalters@365: """ tomwalters@365: gen_hmmproto.py tomwalters@365: tomwalters@365: Created by Thomas Walters on 2010-07-08. tomwalters@365: """ tomwalters@365: tomwalters@365: import sys tomwalters@365: import getopt tomwalters@365: tomwalters@365: tomwalters@365: help_message = ''' tomwalters@365: Generate an HTK HMM prototype with an input_size dimensional input and tomwalters@365: total_hmm_states total HMM states (including start and end state) tomwalters@365: The feature type string can be specified in feature_type tomwalters@365: ''' tomwalters@365: tomwalters@365: tomwalters@365: class Usage(Exception): tomwalters@365: def __init__(self, msg): tomwalters@365: self.msg = msg tomwalters@365: tomwalters@365: tomwalters@365: def main(argv=None): tomwalters@365: if argv is None: tomwalters@365: argv = sys.argv tomwalters@365: try: tomwalters@365: try: tomwalters@365: opts, args = getopt.getopt(argv[1:], "hi:s:t:v", ["help", "input_size=", "total_hmm_states=", "feature_type="]) tomwalters@365: except getopt.error, msg: tomwalters@365: raise Usage(msg) tomwalters@365: tomwalters@365: # defaults tomwalters@365: input_size = 39 tomwalters@365: total_hmm_states = 6 tomwalters@365: feature_type = "MFCC_0_D_A" tomwalters@365: tomwalters@365: # option processing tomwalters@365: for option, value in opts: tomwalters@365: if option == "-v": tomwalters@365: verbose = True tomwalters@365: if option in ("-h", "--help"): tomwalters@365: raise Usage(help_message) tomwalters@365: if option in ("-i", "--input_size"): tomwalters@365: input_size = int(value) tomwalters@365: if option in ("-s", "--total_hmm_states"): tomwalters@365: total_hmm_states = int(value) tomwalters@365: if option in ("-t", "--feature_type"): tomwalters@365: feature_type = value tomwalters@365: tomwalters@365: except Usage, err: tomwalters@365: print >> sys.stderr, sys.argv[0].split("/")[-1] + ": " + str(err.msg) tomwalters@365: print >> sys.stderr, "\t for help use --help" tomwalters@365: return 2 tomwalters@365: tomwalters@365: print "~o " + str(input_size) + "" + "<" + feature_type + ">" tomwalters@365: print "~h \"proto\"" tomwalters@365: print "" tomwalters@365: print " " + str(total_hmm_states) tomwalters@365: for state in xrange(2, total_hmm_states): tomwalters@365: print " " + str(state) tomwalters@365: print "" + str(input_size) tomwalters@365: print "0 " * input_size tomwalters@365: print " " + str(input_size) tomwalters@365: print "1.0 " * input_size tomwalters@365: print tomwalters@365: print " " + str(total_hmm_states) tomwalters@365: print "0.0 1.0 " + "0.0 " * (total_hmm_states - 2) tomwalters@365: for state in xrange(1, total_hmm_states - 1): tomwalters@365: print ("0.0 " * state) + "0.6 0.4 " + "0.0 " * (total_hmm_states -2 - state) tomwalters@365: print "0.0 " * total_hmm_states tomwalters@365: print "" tomwalters@365: tomwalters@365: if __name__ == "__main__": tomwalters@365: sys.exit(main())