def phoneme_rec_accuracy_hmm(acModelDir, trPhData, testPhData, debug=True):
    syspath = 'recsystem'
    
    train = []
    trTarget = []
    for ph in trPhData:
        train += trPhData[ph]
        trTarget += [ph] * len(trPhData[ph])

    print len(train), len(trTarget)

    hmmcl = HMMClassifier(nStates=3, nMix=1)
    #hmmcl.train(train, trTarget)
    hmmcl.load(trPhData.keys(), pathToHmm=acModelDir)
#    hmmcl.refine_cov_matrix()
    print len(hmmcl.modelsDict)

    test = []
    testTarget = []
    for ph in testPhData:
        test += testPhData[ph]
        testTarget += [ph] * len(testPhData[ph])

    print len(test), len(testTarget)

    predRes = hmmcl.predict(test)

    if debug:
        f = open('results', 'w')
        yaml.dump(zip(testTarget, predRes), f, default_flow_style=False)
        f.close()

    return sum([1 if t == p else 0 for t, p in zip(testTarget, predRes)]) / float(len(testTarget))
def check_particular_phoneme(phData):
    syspath = 'recsystem'
    somePh = phData.keys()[0]
    print somePh, len(phData[somePh][0]), len(phData[somePh][0][0])
    for sample in phData[somePh][0]:
        p = plt.plot(sample)
    plt.grid(True)
    plt.show()
    hmm = init_hmm(nStates=3, nMix=1, dim=len(phData[somePh][0][0]))
    seq_set = ghmm.SequenceSet(ghmm.Float(), [sum(phSample, []) for phSample in phData[somePh]])
    print 'Let us train it!'
    hmm.baumWelch(seq_set)
#    print os.path.join(syspath, 'hmm', somePh)
#    hmm = hmm_built_from(HmmFromGHMMBuilder, os.path.join(syspath, 'hmm', somePh))
    hmmReloaded = HMMClassifier.reassigned_ghmm_object(hmm, 0.5)
    loglikel = [hmmReloaded.loglikelihood(seq) for seq in seq_set]

    pl = plt.plot(loglikel)
    plt.show()