[Python]語音識別媒體中的音訊到文字

2023-03-17 21:00:34

@

準備工作

  1. 安裝python3環境
  2. 申請一個可用的語音轉換API,此篇以Microsoft Azure Speech為例
    在Microsoft Azure 市場中搜尋speech關鍵字找到語音服務。並建立好服務範例

    在資源中找到建立的服務並檢視

    在此處點選顯示金鑰,我們要記住key值和location值,作為語音識別庫的請求引數

視訊轉音訊

安裝視訊庫moviepy

pip install moviepy 

編寫程式碼,將視訊檔test.mp4中的音訊提取到test2.wav

import moviepy.editor

videoClip = moviepy.editor.VideoFileClip(r"{}".format("test.mp4"))
videoClip.audio.write_audiofile(r"{}".format("test2.wav"))

識別音訊到文字

安裝語音識別庫SpeechRecognition

pip install SpeechRecognition 

編寫程式碼,將視訊檔test3.wav中的音訊識別,並轉換成文字寫入test.txt

import speech_recognition 

audio2 = speech_recognition.AudioFile("{}".format("test3.wav"))
recognizer =  speech_recognition.Recognizer()
with audio2 as source:
    audioData = recognizer.record(source)
result = recognizer.recognize_azure(audioData,key="<your api key>",language="zh-CN",location="eastus")
with open('test.txt', 'w') as file:
    if result.__len__()>0:
        file.write(result[0])

完整程式碼如下

import speech_recognition 
import moviepy.editor

videoClip = moviepy.editor.VideoFileClip(r"{}".format("test.mp4"))
videoClip.audio.write_audiofile(r"{}".format("test2.wav"))
audio2 = speech_recognition.AudioFile("{}".format("test2.wav"))
recognizer =  speech_recognition.Recognizer()
with audio2 as source:
    audioData = recognizer.record(source)
result = recognizer.recognize_azure(audioData,key="<your api key>",language="zh-CN",location="eastus")
with open('test.txt', 'w') as file:
    if result.__len__()>0:
        file.write(result[0])

音訊直接轉換文字

Azure提供了快捷轉換語音到文字的工具 https://speech.microsoft.com/portal
點選實時語音轉文字

這裡需要注意的是,需要上傳的音訊格式為16kHz 或 8kHz、16 位和單聲道 PCM

上傳完成後將自動轉換成文字

安裝音訊轉換庫pydub

pip install pydub

編寫程式碼,將test.aac檔案以16kHz 取樣率和單聲道 PCM 編碼方式,儲存至test1.wav
注意,如果使用ffmpeg編碼的格式,需要下載ffmpeg相關庫到指令碼所在目錄
http://www.ffmpeg.org/download.html

from pydub import AudioSegment

audio1 = AudioSegment.from_file("test.aac", "aac")
#  -ac 1 -ar 16000 
audio1.export("test1.wav", format="wav",parameters=["-ac", "1", "-ar", "16000"])