返回文章列表

Python文字轉語音與語音辨識技術應用

本文介紹Python中文字轉語音和語音辨識的應用,包含使用pyttsx3套件實作文字轉語音,Whisper進行語音辨識,以及yt-dlp下載YouTube影片並提取音訊。同時也涵蓋了Python套件的安裝、更新與管理,以及如何建立虛擬環境等實用技巧。

Python 語音處理

Python 的豐富套件生態系統簡化了語音處理的複雜性,讓開發者能輕鬆整合文字轉語音和語音辨識功能。pyttsx3 套件利用作業系統的內建語音引擎,將文字轉換成語音,並可控制語速、音量等引數,還能將語音儲存成音訊檔案。Whisper 則是一個功能強大的語音辨識系統,使用多種模型,能將音訊檔案轉錄成文字,並支援多種語言。yt-dlp 則能下載 YouTube 影片並提取音訊,方便後續的語音處理。此外,文章也說明瞭如何使用 pip 管理 Python 套件,包含安裝、更新、移除和列出已安裝套件,以及建立和使用虛擬環境的技巧。

文字轉語音和語音辨識引擎

本章涵蓋了一個文字轉語音套件 pyttsx3 和一個語音辨識套件 Whisper。文字轉語音套件可以將文字字串轉換為語音,然後傳送到您的電腦的喇叭或儲存為音訊檔案。透過玄貓,您可以讓使用者免於閱讀螢幕上的文字。例如,一個烹飪食譜應用程式可以在您移動到廚房時大聲朗讀食材清單,您的每日指令碼可以刮取新聞文章(或您的電子郵件),然後準備一個 MP3 檔案以供您在早晨通勤時播放。

在另一端,語音辨識技術可以將語音檔案中的語音轉換為文字字串值。您可以使用此功能為您的程式新增語音命令或自動轉錄播客。與人類不同,您可以始終關閉電腦的音量以避免過多的語音輸出。

pyttsx3Whisper 都是免費使用且不需要網際網路連線的。 本章中介紹的文字轉語音和語音辨識引擎不僅限於英語,並且支援大多數廣泛使用的人類語言。

文字轉語音引擎

為了產生語音,pyttsx3 第三方套件使用您的作業系統的內建文字轉語音引擎:Windows 上的 Microsoft Speech API (SAPI5),macOS 上的 NSSpeechSynthesizer,Linux 上的 eSpeak。在 Linux 上,您可能需要安裝引擎。您可以透過玄貓安裝 pyttsx3。附錄 A 有關於安裝第三方套件的完整指示。

套件的名稱根據 py 代表 Python,tts 代表文字轉語音,x 因為它是從原始 pytts 套件延伸而來的,3 代表它是為 Python 3 而設計的。

產生語音

產生電腦化語音是電腦科學中的一個複雜主題。幸運的是,作業系統的文字轉語音引擎為我們做了艱難的工作,與此引擎互動作用是直接的。開啟一個新的檔案編輯器,輸入以下程式碼,並將其儲存為 hello_tts.py

import pyttsx3

engine = pyttsx3.init()
engine.say('Hello. How are you doing?')
engine.runAndWait()  # 電腦開始說話

程式不會產生任何文字輸出,因為它從未呼叫 print() 函式。相反,您應該聽到電腦說,“Hello. How are you doing?”(確保音量不是靜音)。使用者可以從鍵盤輸入回應,電腦應該口頭回應,“Yes. I am feeling <您的回應> as well。”

pyttsx3 模組允許您對電腦語音進行一些修改。您可以傳遞字串 ‘rate’、‘volume’ 和 ‘voices’ 到 Engine 物件的 getProperty() 方法以檢視其目前設定。輸入以下程式碼到互動 shell 中:

import pyttsx3

engine = pyttsx3.init()

engine.say('Hello. How are you doing?')
engine.runAndWait()  # 電腦說話

feeling = input('>')
engine.say('Yes. I am feeling ' + feeling + ' as well.')
engine.runAndWait()  # 電腦再次說話

注意輸出可能會在您的電腦上有所不同。音量設定是一個浮點數,其中 1.0 表示 100%。電腦語音以每分鐘 200 個字的速度說話。繼續此示例,使用以下程式碼:

import pyttsx3

engine = pyttsx3.init()

print(engine.getProperty('volume'))  # 輸出:1.0
print(engine.getProperty('rate'))  # 輸出:200

在我的 Windows 筆記型電腦上,使用英語(美國)語言,getProperty('voices') 傳回兩個 Voice 物件。(注意,這個字串是複數 ‘voices’ 而不是單數 ‘voice’。)這些 Voice 物件具有 name、gender 和 age 屬性,雖然 gender 和 age 在作業系統沒有儲存這些資訊時設定為 None。languages 屬性是一個字串,表示語言程式碼。

圖表翻譯:

此圖表展示了使用者與 pyttsx3 之間的互動過程,使用者輸入文字,pyttsx3 處理並產生語音輸出,使用者回應,pyttsx3 再次處理並產生語音回應。

文字轉語音與語音辨識技術

在人工智慧的應用中,文字轉語音(Text-to-Speech, TTS)和語音辨識(Speech Recognition)是兩項重要的技術。這些技術使得電腦可以與人們進行語音互動,提高了人機互動的便捷性和自然度。在本文中,我們將探討如何使用 Python 實作文字轉語音和語音辨識。

文字轉語音

Python 中有一個名為 pyttsx3 的函式庫,可以用於實作文字轉語音。首先,需要安裝 pyttsx3 函式庫,可以使用 pip 進行安裝:

pip install pyttsx3

安裝完成後,可以使用以下程式碼初始化文字轉語音引擎:

import pyttsx3

engine = pyttsx3.init()

然後,可以使用 say() 方法將文字轉換為語音:

engine.say("Hello, how are you?")

最後,需要呼叫 runAndWait() 方法來播放語音:

engine.runAndWait()

語音設定

pyttsx3 函式庫提供了多種語音設定,包括語音速率、音量和語音選擇。可以使用 setProperty() 方法來設定這些引數:

engine.setProperty('rate', 300)  # 設定語音速率為 300 字元每分鐘
engine.setProperty('volume', 0.5)  # 設定音量為 50%

儲存語音為 WAV 檔

pyttsx3 函式庫也提供了儲存語音為 WAV 檔的功能,可以使用 save_to_file() 方法:

engine.save_to_file("Hello, how are you?", "hello.wav")
engine.runAndWait()

語音辨識

Python 中有一個名為 whisper 的函式庫,可以用於實作語音辨識。首先,需要安裝 whisper 函式庫,可以使用 pip 進行安裝:

pip install openai-whisper

安裝完成後,可以使用以下程式碼載入語音辨識模型:

import whisper

model = whisper.load_model("base")

然後,可以使用 transcribe() 方法來辨識語音:

result = model.transcribe("hello.wav")
print(result["text"])
圖表翻譯:

內容解密:

在上述程式碼中,我們使用 pyttsx3 函式庫來實作文字轉語音,使用 whisper 函式庫來實作語音辨識。這些函式庫提供了簡單易用的 API,可以方便地整合到應用程式中。

使用 Whisper 進行語音轉文字

Whisper 是一種強大的語音轉文字工具,能夠自動轉換語音檔案為文字。以下是使用 Whisper 進行語音轉文字的步驟和注意事項。

選擇模型

Whisper 提供了多種模型可供選擇,每個模型都有不同的大小和準確度。根據您的需求,您可以選擇適合的模型。一般來說,‘base’ 模型適合於大多數的情況,而 ‘medium’ 模型則提供了更高的準確度。

轉換語音檔案

使用 whisper.load_model() 函式載入 Whisper 模型,然後使用 transcribe() 方法進行語音轉文字。您需要傳遞語音檔案的名稱給 transcribe() 方法。

語言偵測

Whisper 可以自動偵測語音檔案的語言,但您也可以指定語言。例如,model.transcribe('hello.wav', language='English')

輸出結果

transcribe() 方法傳回一個字典,其中包含了轉換結果。’text’ 鍵值對包含了轉換後的文字。

使用 GPU 加速

如果您的電腦具有 3D 圖形卡,您可以使用 GPU 加速 Whisper 的運算。只需將 whisper.load_model('base') 替換為 whisper.load_model('base', device='cuda') 即可。

建立字幕檔案

Whisper 的結果字典中包含了時間資訊,您可以使用這些資訊建立字幕檔案。常見的字幕檔案格式包括 SRT 和 VTT。

SRT 格式

SRT 格式是一種較舊的標準,仍然被廣泛使用。以下是 SRT 檔案的一個範例:

1
00:00:00,000 --> 00:00:05,640
Dinosaurs are a diverse group of reptiles of the cl

VTT 格式

VTT 格式是一種較新的標準,現代影片網站一般使用此格式。以下是 VTT 檔案的一個範例:

WEBVTT
00:00.000 --> 00:05.640
Dinosaurs are a diverse group of reptiles of the cl

其他輸出格式

Whisper 還可以輸出結果為 TSV 或 JSON 格式。TSV 格式不是官方的字幕格式,但可能對於需要將文字和時間資料匯出到其他程式的使用者有用。

TSV 格式

以下是 TSV 檔案的一個範例:

2
00:00:05,640 --> 00:00:14,960
appeared during the triassic period. Between 245 an

JSON 格式

JSON 格式是一種廣泛使用的資料交換格式,Whisper 也可以輸出結果為 JSON 格式。

使用 Whisper 進行語音轉文字

Whisper 是一個強大的語音轉文字工具,能夠將音訊檔案轉換為文字。以下是使用 Whisper 進行語音轉文字的步驟:

安裝 Whisper

首先,需要安裝 Whisper。可以使用 pip 安裝:

pip install whisper

載入模型

載入 Whisper 模型:

model = whisper.load_model('base')

轉換音訊檔案

使用 transcribe() 函式將音訊檔案轉換為文字:

result = model.transcribe('hello.wav')

輸出字幕檔案

使用 get_writer() 函式輸出字幕檔案:

write_function = whisper.utils.get_writer('srt', '.')
write_function(result, 'audio.srt')

這將輸出一個名為 audio.srt 的字幕檔案。

下載 YouTube 影片

使用 yt-dlp 下載 YouTube 影片:

import yt_dlp

with yt_dlp.YoutubeDL() as ydl:
    ydl.download([video_url])

組態 yt-dlp

可以組態 yt-dlp 來下載影片:

options = {
    'quiet': True,  # Suppress the output.
    'no_warnings': True,  # Suppress warnings.
    'outtmpl': 'downloaded_content.%(ext)s',
    'format': 'm4a/bestaudio/best',
    'postprocessors': [{
        'key': 'FFmpegExtractAudio',
        'preferredcodec': 'm4a',
    }],
}

下載影片並提取音訊

使用 yt-dlp 下載影片並提取音訊:

with yt_dlp.YoutubeDL(options) as ydl:
    ydl.download([video_url])

這將下載影片並提取音訊到一個名為 downloaded_content.m4a 的檔案中。

Plantuml 圖表

圖表翻譯:

此圖表展示了使用 Whisper 進行語音轉文字和下載 YouTube 影片的流程。首先,載入 Whisper 模型,然後轉換音訊檔案,輸出字幕檔案。接下來,下載 YouTube 影片,組態 yt-dlp,最後下載影片並提取音訊。

內容解密:

Whisper 是一個強大的語音轉文字工具,能夠將音訊檔案轉換為文字。使用 transcribe() 函式可以將音訊檔案轉換為文字,並輸出字幕檔案。 yt-dlp 是一個下載 YouTube 影片的工具,可以組態來下載影片並提取音訊。

使用 yt-dlp 下載 YouTube 影片及取得影片資訊

yt-dlp 是一個強大的命令列工具,能夠用於下載 YouTube 影片及取得影片資訊。以下是使用 yt-dlp 的範例。

下載 YouTube 影片

要下載 YouTube 影片,可以使用以下程式碼:

import yt_dlp

video_url = 'https://www.youtube.com/watch?v=video_id'
options = {
    'outtmpl': 'downloaded_content.%(ext)s',
    'quiet': True,
    'no_warnings': True
}

with yt_dlp.YoutubeDL(options) as ydl:
    ydl.download([video_url])

這個程式碼會下載指定的 YouTube 影片,並將其儲存為 downloaded_content 檔案,檔案的副檔名會根據影片的格式自動設定。

取得影片資訊

如果只想要取得影片的資訊,而不下載影片,可以使用以下程式碼:

import yt_dlp
import json

video_url = 'https://www.youtube.com/watch?v=video_id'
options = {
    'quiet': True,
    'no_warnings': True,
    'skip_download': True
}

with yt_dlp.YoutubeDL(options) as ydl:
    info = ydl.extract_info(video_url)
    json_info = ydl.sanitize_info(info)

這個程式碼會取得指定影片的資訊,並將其儲存為 info 變數。然後,使用 sanitize_info() 方法將資訊轉換為 JSON 格式,並儲存為 json_info 變數。

取得下載檔案名稱

如果沒有設定 outtmpl 選項,下載檔案名稱會根據影片的標題自動設定。要取得下載檔案名稱,可以使用以下程式碼:

import pathlib

matching_filenames = list(pathlib.Path().glob('downloaded_content.*'))
downloaded_filename = str(matching_filenames[0])

這個程式碼會使用 glob 函式查詢以 downloaded_content 開頭的檔案,並取得第一個匹配的檔案名稱。

文字轉語音和語音辨識技術

Python 的一個主要優勢是其豐富的第三方套件生態系統,為各種任務提供了強大的支援,包括文字轉語音和語音辨識。這些套件將一些電腦科學中最困難的問題簡化為僅需幾行程式碼的任務,使其易於整合到您的程式中。

Pyttsx3 套件

Pyttsx3 是一款使用電腦語音引擎進行文字轉語音的套件,能夠建立可從喇叭播放或儲存為.wav 檔案的音訊。這使得您可以輕鬆地在程式中新增語音功能,例如有聲書或語音助手。

Whisper 語音辨識系統

Whisper 是一款強大的語音辨識系統,使用多個底層模型來轉錄音訊檔案中的文字。這些模型具有不同的大小,較小的模型轉錄速度更快但準確度較低,而較大的模型則更準確但速度較慢。Whisper 支援多種人類語言,不僅限於英語,並且在首次使用時會下載模型,但之後不需要連線到線上伺服器。

Python 的優勢

Python 是一種優秀的「膠水」語言,允許您的指令碼連線到這些軟體,因此您可以使用僅僅幾行程式碼將這些語音功能新增到自己的程式中。如果您想了解更多關於文字轉語音和語音辨識的知識,可以參考《Make Python Talk》一書(玄貓著,No Starch Press,2021)。

練習題

  1. 如何使 Pyttsx3 的語音說話速度更快?

  2. Pyttsx3 儲存音訊的格式是什麼?

  3. Pyttsx3 和 Whisper 是否依賴於線上服務?

  4. Pyttsx3 和 Whisper 是否支援除了英語以外的其他語言?

  5. Whisper 的預設機器學習模型名稱為什麼?

  6. 兩種常見的字幕文字檔案格式是什麼?

  7. yt-dlp 是否可以從 YouTube 以外的網站下載影片?

練習程式

為了練習,請撰寫程式完成以下任務:

為猜數字遊戲新增語音

重新存取第 3 章中的猜數字遊戲,並新增語音功能。將所有 print() 函式呼叫替換為對 speak() 函式的呼叫,然後定義 speak() 函式以接受字串引數(就像 print() 一樣),但既列印字串到螢幕,又大聲說出來。

唱「99 Bottles of Beer」

寫一個程式來「唱」「99 Bottles of Beer」的歌詞:

99 bottles of beer on the wall,
99 bottles of beer,
Take one down, pass it around,
98 bottles of beer on the wall.

這些歌詞會重複, 每次減少一瓶。歌曲直到達到零瓶為止,此時最後一行變為「No more bottles of beer on the wall.」

圖表翻譯:

此圖表展示了程式的流程,從初始化變數開始,然後進入迴圈迴圈。在迴圈中,判斷瓶數並列印相應的歌詞,然後減少瓶數。當瓶數為零時,結束迴圈並終止程式。

安裝第三方套件

許多開發人員已經撰寫了自己的模組,以擴充套件Python的功能。安裝第三方套件的主要方式是使用Python的pip工具,該工具可以從Python套件索引(PyPI)網站安全地下載和安裝模組。

安裝pip

pip工具的可執行檔名為Windows上的pip,macOS和Linux上的pip3。pip工具自Python 3.4起便已包含在內。然而,某些Linux發行版可能沒有預先安裝。

要在Ubuntu或Debian Linux上安裝pip3,請在新的終端視窗中輸入sudo apt install python3-pip。要在Fedora Linux上安裝pip3,請輸入sudo yum install python3-pip。這些命令會要求您輸入電腦的管理員密碼。

找到pip

如果pip的目錄未包含在PATH環境變數中,您可能需要在終端視窗中使用cd命令更改目錄,然後才能執行pip。首先,找到您的使用者名稱:在Windows上輸入 %USERNAME%,在macOS和Linux上輸入 whoami

然後,在Windows上執行以下命令,指定您的使用者名稱並根據您安裝的Python版本調整目錄名稱:

cd C:\Users\your_username\AppData\Local\Programs\Python\Python3x\Scripts

在macOS上,執行以下命令(確保指定正確的目錄名稱):

cd /Library/Frameworks/Python.framework/Versions/3.x/bin

在Linux上,執行以下命令,指定您的使用者名稱:

cd ~/.local/bin

您現在應該處於正確的目錄中,可以執行pip工具。或者,您可以將這些目錄新增到PATH環境變數中,方法是參考第12章中的“PATH環境變數”一節。

從虛擬環境執行pip

虛擬環境是隔離Python環境的好方法,可以讓您為不同的專案使用不同的套件版本。要從虛擬環境執行pip,請啟動虛擬環境並執行pip命令。

例如,在Windows上,您可以使用以下命令啟動虛擬環境:

your_env\Scripts\activate

在macOS和Linux上,您可以使用以下命令啟動虛擬環境:

source your_env/bin/activate

啟動虛擬環境後,您可以執行pip命令安裝套件。

安裝套件

要安裝套件,您可以使用以下命令:

pip install package_name

package_name替換為您要安裝的套件名稱。

例如,要安裝yt-dlp套件,您可以執行以下命令:

pip install yt-dlp

您也可以使用-r選項從要求檔案安裝套件:

pip install -r requirements.txt

這將安裝要求檔案中指定的所有套件。

更新套件

要更新套件,您可以使用以下命令:

pip install --upgrade package_name

package_name替換為您要更新的套件名稱。

例如,要更新yt-dlp套件,您可以執行以下命令:

pip install --upgrade yt-dlp

您也可以使用-r選項從要求檔案更新套件:

pip install -r requirements.txt --upgrade

這將更新要求檔案中指定的所有套件。

列出套件

要列出已安裝的套件,您可以使用以下命令:

pip list

這將顯示已安裝的所有套件及其版本。

移除套件

要移除套件,您可以使用以下命令:

pip uninstall package_name

package_name替換為您要移除的套件名稱。

例如,要移除yt-dlp套件,您可以執行以下命令:

pip uninstall yt-dlp

確認後,套件將被移除。

內容解密:

以上內容介紹瞭如何安裝、更新、列出和移除Python套件。瞭解如何使用pip工具是Python開發中的重要技能。透過使用虛擬環境和要求檔案,您可以輕鬆地管理套件並確保您的專案具有可重複性。

安裝 Python 套件

在開始使用 Python 進行自動化工作之前,您需要安裝一些必要的套件。有些作業系統可能需要您先建立並啟用一個虛擬環境,才能使用 pip 進行套件安裝。

建立虛擬環境

使用 Python 內建的 venv 模組,您可以輕鬆地建立一個虛擬環境。這對於學習 Python 和實驗程式碼非常有用。您可以為所有程式建立一個虛擬環境。如需更多詳細資訊,請參考第 12 章的「虛擬環境」部分。

安裝本文使用的套件

由於第三方套件的未來變更可能與本文的程式碼範例不相容,因此建議您安裝本文中使用的套件的確切版本。您可以使用 pip 來安裝這些套件,並在套件名稱後面加上 ==version 來指定版本。例如,pip install send2trash==1.8.3 會安裝 send2trash 套件的 1.8.3 版本。

安裝 automateboringstuff3 套件

最簡單的安裝所有相容套件的方法是安裝 automateboringstuff3 套件。我將在新的第三方套件版本可用時更新此套件,以確保它們與本文的程式碼範例相容。如果您想要安裝最新版本的套件,請參考它們的線上檔案以取得更新的使用資訊。

Windows

在 Windows 上,請執行以下命令:

python -m pip install automateboringstuff3

macOS 和 Linux

在 macOS 和 Linux 上,請執行以下命令:

python3 -m pip install automateboringstuff3

###額外步驟 在 Linux 上,您可能需要進行額外步驟來安裝某些套件。例如,要安裝 PyAutoGUI 套件,您需要執行 sudo apt install python3-tksudo apt install python3-dev。要讓 pyperclip 模組在 Linux 上工作,您需要執行 sudo apt install xclip

已安裝的套件版本

截至發布時,以下命令會安裝以下版本的套件:

  • beautifulsoup4 == 4.12.3
  • matplotlib == 3.92
  • openpyxl == 3.1.5
  • pdfminer.six == 20240706
  • pillow == 10.4.0
  • playsound3 == 2.4.0
  • playwright == 1.47.0
  • PyPDF2 == 5.0.1
  • python-docx == 1.1.2

內容解密:

以上命令和套件版本是為了確保本文的程式碼範例能夠正常運作而安裝的。每個套件都有其特定的用途和版本需求,安裝正確的版本對於成功執行程式碼範例至關重要。

圖表翻譯:

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Python文字轉語音與語音辨識技術應用

package "Python 應用架構" {
    package "應用層" {
        component [主程式] as main
        component [模組/套件] as modules
        component [設定檔] as config
    }

    package "框架層" {
        component [Web 框架] as web
        component [ORM] as orm
        component [非同步處理] as async
    }

    package "資料層" {
        database [資料庫] as db
        component [快取] as cache
        component [檔案系統] as fs
    }
}

main --> modules : 匯入模組
main --> config : 載入設定
modules --> web : HTTP 處理
web --> orm : 資料操作
orm --> db : 持久化
web --> cache : 快取查詢
web --> async : 背景任務
async --> fs : 檔案處理

note right of web
  Flask / FastAPI / Django
end note

@enduml

此圖表展示了安裝套件和建立虛擬環境的過程,以及如何安裝額外的套件和確認套件版本。

文字轉語音(TTS)和語音辨識(ASR)技術正蓬勃發展,廣泛應用於人機互動、輔助科技、娛樂等領域。本章介紹的pyttsx3Whisper套件,分別提供了便捷的TTS和ASR解決方案。pyttsx3利用作業系統內建引擎,實作跨平臺語音合成;Whisper則憑藉其離線執行和多語言支援,展現出高度的易用性和靈活性。

分析pyttsx3的實作方式,可以發現其巧妙地整合了不同作業系統的TTS引擎,簡化了開發流程。然而,其語音品質和自然度仍受限於底層引擎的能力。Whisper 則採用了先進的機器學習模型,展現出更高的準確性和效率。但模型大小和運算資源的平衡仍需考量,尤其在資源受限的裝置上。

展望未來,TTS 和 ASR 技術將持續朝著更自然、更智慧的方向發展。預期出現更精細的情緒模擬、更強大的語義理解能力,以及更低資源消耗的模型。同時,TTS 和 ASR 的結合將催生更多創新應用,例如實時翻譯、語音助手等。

玄貓認為,掌握pyttsx3Whisper等工具,將有助於開發者快速構建語音互動應用,並在未來的技術浪潮中搶佔先機。對於追求高效開發和使用者經驗的團隊,建議優先探索這些技術的應用場景,並積極投入資源進行研發和實踐。