计算单词发音的准确性,单词发音准确性,import webim
import webimport sysimport osimport numpy as npimport fastdtwfrom scikits.audiolab import wavreadimport scikits.talkboxfrom scikits.talkbox import featuresfrom scikits.talkbox.features import mfccurls = ( '/demo', 'hello', '/calcmfcc', 'calcmfcc', '/calcdist', 'calcdist', '/addtemplate', 'addtemplate',)db = web.database(dbn='mysql', user='root', pw='root', db='audiotemplate')def str2list(sstr, spliter): arr=sstr.split(spliter) b=[] for s in arr: if(s!=''): b.append(int(s)) return bdef mydist(a, b): i_dist=0 for i in range(0, len(a)): i_dist=i_dist+abs(a[i]-b[i]) return i_dist/len(a)def mfcc2str(llist): re='' for i in llist: temp='' for j in i: temp=temp+str(j)+'@' re=re+temp+'#' return redef str2mfcc(sstr): temp=sstr.split('#') temp.pop() re=[] for lstr in temp: llist=[] arr=lstr.split('@') arr.pop() for elem in arr: llist.append(float(elem)) re.append(llist) return re def data2mfcc(sstr): data=str2list(sstr, ',') temp=mfcc(data)[0] return mfcc2str(temp)def dist(str1, str2): mf1=str2mfcc(str1) np1=np.array(mf1) mf2=str2mfcc(str2) np2=np.array(mf2) re=fastdtw.fastdtw(np1, np2, 1, mydist)[0] return reclass hello: def GET(self, name): return nameclass calcmfcc: def POST(self): data=web.data() return data2mfcc(data)class calcdist: def POST(self): form=web.input(name="a", data="") name=form.name mf=data2mfcc(form.data) temps=db.query('select * from template where name="' + name + '"') mindist=999999 for temp in temps: mindist=min(mindist, dist(mf, temp.mfcc_text)) return mindistclass addtemplate: def POST(self): form=web.input(name="a", data="") mf=data2mfcc(form.data) db.insert('template', name=form.name, mfcc_text=mf) return "ok"if __name__ == "__main__": app = web.application(urls, globals()) app.run()
评论关闭