2019年8月14日 星期三

語音檔辨識與翻譯

寫個聊天機器人吧網誌中,已經完成了五個版本的聊天機器人,這邊則要開發一個能自動將 WAV 中文語音檔辨識成中文文字的程式。

安裝 SpeechRecognition 套件 (此時版本為 3.8.1)

    pip install SpeechRecognition

第一版程式

    import speech_recognition as sr
    recogn = sr.Recognizer()
    with sr.WavFile('C:\Temp\Audio.wav') as source:
        speech = recogn.record(source)
    print('辨識開始...')
    text = recogn.recognize_google(speech, language='zh-tw')
    print(text)
    print('辨識完成')

**********************************************************************************************************************

接著使用 googletrans 套件將中文翻譯成英文

安裝 googletrans 套件 (此時版本為 2.4.0)

    pip install googletrans

第二版程式

    import speech_recognition as sr
    recogn = sr.Recognizer()
    with sr.WavFile('C:\Temp\Audio.wav') as source:
        speech = recogn.record(source)
    print('開始辨識...')
    text = recogn.recognize_google(speech, language='zh-tw')
    print(text)
    print('辨識完成')

    from googletrans import Translator
    ts = Translator()
    print('開始翻譯...')
    text = ts.translate(text, dest='en').text
    print(text)
    print('翻譯完成')

**********************************************************************************************************************

用瀏覽器開啟新井紀子 TED 演講的影片(Can a robot pass a university entrance exam?),網址列顯示「https://www.youtube.com/watch?v=BXcFEhl7ynM」。修改網址列文字,移除「ube」三個字母使網址列成為「https://www.yout.com/watch?v=BXcFEhl7ynM」,按「Enter」鍵開啟下載頁面。


於下載頁面「格式」點選「MP3 (音頻)」,再點擊「記錄 MP3」,即可下載語音檔案「can-a-robot-pass-a-university-entrance-exam-noriko-arai.mp3」。


或是利用用 Python 剪輯影片網誌中的第三版程式來擷取聲音 MP3 檔。由於 SpeechRecognition 模組無法辨識 MP3 格式,所以需先將檔案格式轉換為 WAV 格式。此外語音檔通常很大,辨識時間將會很久,如果將語音檔分割為較短的數段,就可以選擇需要的部分進行處理。

安裝 pydub 套件 (此時版本為 0.23.1)

    pip install pydub

第三版程式

    import shutil, os
    from pydub import AudioSegment
    from pydub.utils import make_chunks
    os.mkdir('C:\\Temp\\tempdir')
    audiofile = AudioSegment.from_file('C:\Temp\Audio.wav', 'wav')
    chunklist = make_chunks(audiofile, 60000)
    for i, chunk in enumerate(chunklist): 
        chunk_name = 'C:\\Temp\\tempdir\\chunk{0}.wav'.format(i)
        print ("存檔:", chunk_name)
        chunk.export(chunk_name, format='wav')

    import speech_recognition as sr
    recogn = sr.Recognizer()
    print('開始辨識...')
    file = open('C:\Temp\Speech.txt', 'w')
    for i in range(len(chunklist)):
        with sr.WavFile('C:\\Temp\\tempdir\\chunk{}.wav'.format(i)) as source:
            speech = recogn.record(source)
            result = recogn.recognize_google(speech, language='zh-tw')
            print('{}. {}'.format(i+1, result))
            file.write(result)
    file.close()
    shutil.rmtree('C:\\Temp\\tempdir')
    print('辨識完成')

程式將語音檔以 60 秒為單位切割為數段語音檔後,再進行辨識。由於辨識結果可能有錯誤,必須再以人工進行文字修正。

沒有留言:

張貼留言