From f6e563ecd31d7c5915b1dafcdc4acb396e994ed4 Mon Sep 17 00:00:00 2001 From: yemaozi88 <428968@gmail.com> Date: Wed, 6 Feb 2019 09:35:23 +0100 Subject: [PATCH] moved testing parts in htk_vs_kaldi into stimmen_test.py --- .vs/acoustic_model/v15/.suo | Bin 106496 -> 106496 bytes acoustic_model/acoustic_model.pyproj | 1 + acoustic_model/htk_vs_kaldi.py | 47 +++------------------ acoustic_model/stimmen_test.py | 61 +++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 40 deletions(-) create mode 100644 acoustic_model/stimmen_test.py diff --git a/.vs/acoustic_model/v15/.suo b/.vs/acoustic_model/v15/.suo index ef753d55acaf9cacc87dd7fb1e4d5794c0656e11..d1feede8ad1b869ad42871b1c365587eef4327fc 100644 GIT binary patch delta 2962 zcmb`Je{54#6vyv*eeK$@(XJbAV`b|)HVf-UHwVHPqk}mbUA;Y0>8h*(A3Lx?t|WOou% zhQMm{kn*`5`#sHiE5 z`QylXh#cY>BAIxOz(1hH*qfTuaS4~0*50J$YSSL7c6;$kLP72ba>ZyusJN&b$e&D9 z6BDt@oE{VsK1B!#O@xqe3lW!4j36WwN-QB8m#~F=Az>yV+6Z;Zi5G~tg3Ylyq2Q*N zFBD9S`O_FHigp$Q7%4cE7)?|Xg~WY?pBPJsHYi)%;Km|Lmib`{)e-2oH0BGzZWe1< zti2FS^jl7LC4O#M5pG;0)B_^&DJ2+i&9s1cw9rYkRxi4W zL3KHMpv!#<^2Oc|v{CgcLP(xVeUf> z(q3n_q&g?{LYLPmt4>cZC}X5ZP_aLY?8ulO#tHQk!!0s~>eI~oD7c@%o%K({iEvF` zY%3g!G?eo97J{8;*TQghQT4V#O05*}2VjNT+7y&vC0?ovio&eT=Ezu&ZEI|F@w5&x zV8vKxG?kaAAX3>u#M20qzngeHTvLdzjctcdv1HuGN`oAGfPXV^X)2U*ZzBv=eG7F% zr0(L4M=sthDUDKO`2ktX72jT7Ay?75;Kg|4wH0&zxt1@T2<80TMzEY%z;&(In*CdrU5myHZv!i&H`)!Tg+$^pyyN_Kky(7H3ZmGYUor5 zaMcbcmOBx%d-XEbe>p_*Z5B zm<#%PLTLY~02h8eRMmSz66)Xh)X>*Hz}h|sI{IEkZ=X-q`*cA4tPl0?eUb0=uHSv| z?^D?8`w{S*!;bc!U0C+h@&9j1@Fl{v7x}1EFmpwQQTWlX@AF{*yYZ82?IN7^ViCBt zLjV@IWrj4dl>TY_gcq#ZyhK<71EV;*da3d*r!U<+F*tqabXqiH1{i>^kszAY^<twLL;L#8kuXEtws2kqtNvCQEu|RF8~85;P%UoH z^G`~_$#;*0ouc1HkSQ8ivKQ^N?2Xq59!B@)jv~P1@J0#3GA>M0@Kc5S2+?fjLQR(?xR+w;O zC9Z2PUd`7pvtBr$y|uFfLR_z)DM1=!*m~Y|PkM9e$)j*4^P{6BKRlpySAZ8Zs~e8} z%>otTk_!&aF&xequ;kY!?wkN+cUX}&o^mf_-%_j5des7k!|ofu^guCexn+Iw`PmVW z)tLr?zpnR`|FBv%>Hm~}JpBHzBEl>UCPBX;W(VzSrY#?7gi5V)DjYSuGY?))=95;# z7~Wk&-ve|gro;|KR?J$WpN4h(NIkS_wv{j!aOrrz=5K-n$@`naVA@v?iTj&4NZjrR z2k&i%YOP@rRKmcJ9^O44{Mx~n;D7p?ll-9dJGw_hdWo8n2Z2Cvn)d AsQ>@~ delta 3045 zcmchZdr(yO702(n`(T&n3JZd+uq+Q(Spf}Eg9?|2RvnX|!Kjq-Fyd%qbd^OVT6a^O zl!#HdC-NhSiFA$Bw3!Kd({83i%+(UdX(MS&CdCfbP4thL0a^to4QZt3x9(a=)5e+3 z^v-QuOP7#f!u03;(zwV)YTQOShmR732n21Gdm4E$#7~GsVkPkyv4F4;j}YmEk)Q-)jbyC^ zB^G88-%xBJ*$mHyNEDi3h^|NOT-hI1Yc(k*;n`yHgbxH9l?%?WM3jy6TH%B zf=>utGx0Cl$&pnQ<(uYF)avpKh194ZFt@~x4lfr|4vZE_0P>aq*nYxv)9t;!ZDhIT*E{{X0$}**$#_@vE$i7S@6Vr)S zqO)~*iuRY};E}3!xZPU&2XDSsp8IEJNB|37SZq*k&lSNdiE^?{v1MNdCN6?m?DRT_ zWyxibu52i6kC0cm;8~?%MKgHwM7ewf8u3=S8+IxUE1L~+u_d*M5L(KXkJIt9-brjv zIhZi2FA-*AX5X*cCc%EJy|fZ9TzUWmEb1?m`#p-<@1b+*mlV$x2~fHs;ktec_WNH` z)K68wzxgHfT$RQzw}>wX?RX}0D>H2X6I=fTB+}B4`I?IARq2>|4ere%fuerR zGhA2s{gcPu-w2URiUn1^o)@v1G^!&>TtX!)jDs_zg>+2147@V*T=7Iy(1#_CPQW0X zX3Mi62j9F|i{9wrbT|`x9C-ZRJx52buYIbn+ErKY%62v`WH(}9fic*c zUK(h!nq*j-z(4eY=SF<>jbFd}1MbsRdhU*n)k8mI)=YRfP@b~t<}*OMO^dB`ZrHN9 zuD;Gy8ORabGwa9%eHb+;-!e=coEuQ&-vV4Bc18n>m?;J#jb=*6KW?QY*-=)N0$%2v z3I?CS2Hk*ZqM2RIg+5ryPTFA!OlMto^8Y>^O4yDG@SM-&fKN5-jZAo-b?1VWRm4Ll z`!EO0hhty_?rx)U-06I~(zG@+NLZAa$fP3J&0a8rBk)r4<;Q~_m`c4q&uj=69mi94 zHY-VUG`n;U9c(Q(t5mqqOmBc;diawJf^dlZcj$k~8}wantzFtS8B``EK)!EuGCT`> zpY(8VVLzKfZ^LH>;=f0s_;q|j;F_s!3wn2jLOeNO!GhtJ_#NmQOouoPtDOoH$4i&Q zZ^L9}O{J&mRXbc~^RnPQ{CQ>yGuffzK6TCTrDa1j{NH7o2Va?1f588@(ChVD((ljC zyuK`OXTlTAV+FhKb1NhQl>49n#-Pm#p8FhL3}X@OvxTsN`Im#99jFGgZ<7RVz|xn1 z!dsf1S}SWhLa#clJ-d}Tj|t|;`*&-I;afj{axD*6hD7JPPCHwdYoP~b^ D@r(ND diff --git a/acoustic_model/acoustic_model.pyproj b/acoustic_model/acoustic_model.pyproj index 11ca83b..715d6c0 100644 --- a/acoustic_model/acoustic_model.pyproj +++ b/acoustic_model/acoustic_model.pyproj @@ -52,6 +52,7 @@ + diff --git a/acoustic_model/htk_vs_kaldi.py b/acoustic_model/htk_vs_kaldi.py index c1e5c97..9095b3c 100644 --- a/acoustic_model/htk_vs_kaldi.py +++ b/acoustic_model/htk_vs_kaldi.py @@ -59,10 +59,6 @@ from htk import pyhtk #load_forced_alignment_kaldi = 1 #eval_forced_alignment_kaldi = 1 - - - -### ======================= add paths ======================= #sys.path.append(os.path.join(default.repo_dir, 'forced_alignment')) #from forced_alignment import convert_phone_set #from forced_alignment import pyhtk @@ -78,6 +74,7 @@ lattice_file = os.path.join(config_dir, 'stimmen.ltc') # lattice_file) hvite_scp = os.path.join(default.htk_dir, 'tmp', 'stimmen_test.scp') + ## ======================= make test data ====================== # copy wav files which is in the stimmen data. stimmen_test_dir = r'c:\OneDrive\Research\rug\_data\stimmen_test' @@ -87,25 +84,15 @@ df = stimmen_functions.load_transcriptions() word_list = [i for i in list(set(df['word'])) if not pd.isnull(i)] word_list = sorted(word_list) -#for index, row in df.iterrows(): -# filename = row['filename'] -# if isinstance(filename, str): -# wav_file = os.path.join(default.stimmen_wav_dir, filename) -# if os.path.exists(wav_file): -# shutil.copy(wav_file, os.path.join(stimmen_test_dir, filename)) -# pyhtk.create_label_file( -# row['word'], -# os.path.join(stimmen_test_dir, filename.replace('.wav', '.lab'))) - # after manually removed files which does not contain clear sound, # update df as df_test. -#wav_file_list = glob.glob(os.path.join(stimmen_test_dir, '*.wav')) -#df_test = pd.DataFrame(index=[], columns=list(df.keys())) -#for wav_file in wav_file_list: -# filename = os.path.basename(wav_file) -# df_ = df[df['filename'].str.match(filename)] -# df_test = pd.concat([df_test, df_]) +wav_file_list = glob.glob(os.path.join(stimmen_test_dir, '*.wav')) +df_test = pd.DataFrame(index=[], columns=list(df.keys())) +for wav_file in wav_file_list: + filename = os.path.basename(wav_file) + df_ = df[df['filename'].str.match(filename)] + df_test = pd.concat([df_test, df_]) #output = pyhtk.recognition( # os.path.join(default.htk_dir, 'config', 'config.rec', @@ -115,26 +102,6 @@ word_list = sorted(word_list) # os.path.join(config_dir, 'phonelist.txt'), # hvite_scp) - -## check phones included in stimmen but not in FAME! -splitted_ipas = [' '.join( - convert_phoneset.split_word(ipa, fame_ipa.multi_character_phones)) - for ipa in df['ipa']] -stimmen_phones = set(' '.join(splitted_ipas)) -stimmen_phones = list(stimmen_phones) -#stimmen_phones = list(set(fame_asr.phone_reduction(list(stimmen_phones)))) -#fame_phones = fame_asr.phoneset_short -fame_phones = fame_ipa.phoneset -stimmen_phones.sort() -fame_phones.sort() -print('phones which are used in stimmen transcription but not in FAME corpus are:\n{}'.format( - set(stimmen_phones) - set(fame_phones) - )) -for ipa in df['ipa']: - ipa_splitted = convert_phoneset.split_word(ipa, fame_ipa.multi_character_phones) - if ':' in ipa_splitted: - print(ipa_splitted) - htk = [fame_functions.ipa2htk(ipa) for ipa in df['ipa']] ipa = 'e:χ' diff --git a/acoustic_model/stimmen_test.py b/acoustic_model/stimmen_test.py new file mode 100644 index 0000000..8cbdace --- /dev/null +++ b/acoustic_model/stimmen_test.py @@ -0,0 +1,61 @@ +import os +os.chdir(r'C:\Users\Aki\source\repos\acoustic_model\acoustic_model') +import sys + +import shutil +import glob + +#import numpy as np +import pandas as pd + +import defaultfiles as default +import convert_xsampa2ipa +import stimmen_functions +import fame_functions +import convert_phoneset +from phoneset import fame_ipa, fame_asr +sys.path.append(default.toolbox_dir) +import file_handling as fh +from htk import pyhtk + + +## ======================= user define ======================= + + + +## ======================= make test data ====================== +# copy wav files which is in the stimmen data. +stimmen_test_dir = r'c:\OneDrive\Research\rug\_data\stimmen_test' +fh.make_filelist(stimmen_test_dir, hvite_scp, file_type='wav') + +df = stimmen_functions.load_transcriptions() +#word_list = [i for i in list(set(df['word'])) if not pd.isnull(i)] +#word_list = sorted(word_list) + +#for index, row in df.iterrows(): +# filename = row['filename'] +# if isinstance(filename, str): +# wav_file = os.path.join(default.stimmen_wav_dir, filename) +# if os.path.exists(wav_file): +# shutil.copy(wav_file, os.path.join(stimmen_test_dir, filename)) +# pyhtk.create_label_file( +# row['word'], +# os.path.join(stimmen_test_dir, filename.replace('.wav', '.lab'))) + + +## check phones included in stimmen but not in FAME! +splitted_ipas = [' '.join( + convert_phoneset.split_word(ipa, fame_ipa.multi_character_phones)) + for ipa in df['ipa']] +stimmen_phones = set(' '.join(splitted_ipas)) +stimmen_phones = list(stimmen_phones) +fame_phones = fame_ipa.phoneset +stimmen_phones.sort() +fame_phones.sort() +print('phones which are used in stimmen transcription but not in FAME corpus are:\n{}'.format( + set(stimmen_phones) - set(fame_phones) + )) +for ipa in df['ipa']: + ipa_splitted = convert_phoneset.split_word(ipa, fame_ipa.multi_character_phones) + if ':' in ipa_splitted: + print(ipa_splitted)