Auxiliary Functions
Auxiliary Function有兩個函數parse_filepath()
跟batch_transcribe_speechFile()
。
函數parse_filepath()
功能為把音頻檔案的路徑拆成資料夾名稱跟檔案名稱。輸入為speech_file
,輸出為資料夾path
跟檔案名稱filename
。
035 def parse_filepath(speech_file):
036 if sys.platform == 'win32':
037 m = re.match(r'(.+)\\(.+)', speech_file)
038 else:
039 m = re.match(r'(.+)/(.+)', speech_file)
040
041 path = m.group(1)
042 filename = m.group(2)
043 return path, filename
...
124 def batch_transcribe_speechFile(speechFileQueue,existSpeechFileList,choices_list,timestamp_writer, nr, beta=True):
125 #print('speech files in Queue:')
126 #print(speechFileQueue)
127 for i, speechFile in enumerate(speechFileQueue):
128
129 if nr:
130 ''' audio noise reduction '''
131 path, filename = parse_filepath(speechFile)
132 ofilename = os.path.join(path,'nr',filename)
133 if not os.path.isfile(ofilename):
134 samp_freq, x = wavfile.read(speechFile)
135 y = butter_bandpass_filter(x, 300, 3000, samp_freq, order=6)
136 y = y.astype(x.dtype)
137 wavfile.write(ofilename, samp_freq, y)
138
139 else:
140 ofilename = speechFile
141
142 ''' transcription '''
143 choices = transcribe_file_with_word_time_offsets(ofilename, timestamp_writer, beta=beta)
144 choices_list.append(choices)
145
146 existSpeechFileList.append(speechFile)
147 df = pd.DataFrame({'filename':existSpeechFileList, 'sentence':choices_list})
148 df = df.sort_values(by=['filename'])
149 df.to_csv(output_csv_filename)
150 timestamp_writer.save()
行36-39判斷作業系統是否是window,原因是因為window的路徑分隔線()跟其他作業系統的分隔線(/)不同。
函數batch_transcribe_speechFile()
目的是協助函數transcribe_file_with_word_time_offsets()
,處理在大量音頻下,批次處理的能力。1. 跳過已經轉譯過的音頻 2. 縮小單個xlsx裡的音頻轉譯結果(25個音頻1個xlsx),方便閱讀 3. 使用band-pass filter降低雜訊。
函數batch_transcribe_speechFile()
輸入為
speechFileQueue
程式處理的檔案序列existSpeechFileList
過去已經轉譯過的音頻檔名列表choices_list
音頻轉譯文字結果列表,包含已經轉譯過音頻的結果timestamp_writer
xlsx檔案writer物件nr
noise reduction flag (是否要使用noise reduction)beta=True
beta version flag (是否使用google speech-to-text beta版)
行127-150為一個for loop,從speechFileQueue
逐步取出單一音頻檔處理。
行131-137是當使用者希望對音頻降噪時,呼叫函數butter_bandpass_filter
,保留人聲頻率範圍(300-3000Hz),產生一個降噪版的音頻,儲存在原音頻資料下新增的nr
子資料夾,檔名還是跟原音頻檔名相同。
行139-140代表使用者希望使用原音頻,檔案路徑ofilename
跟原檔案路徑speechFile
相同。
行143 呼叫函數transcribe_file_word_time_offset()
,輸出該音頻轉譯出來的結果清單choices
。
行144把新增的choices
清單加到大清單choices_list
行146把處理完的檔案speechFile
加入已經處理的檔案清單existSpeechFileList
,代表speechFile
被處理完。
行147建立一個檔名對應轉譯結果的table,以pandas.dataframe
方式處理
新增圖
行148把df
重新根據檔名排序,因爲行144,146新增時,不會考慮排序,一律把新增資料排在列表最後面。
行149把檔名對應轉譯結果的table存成csv檔 行150把單字的時間與信心指數的table存成xlsx檔。