什麼是嵌入式語音?

嵌入式語音設計用於裝置上的 語音轉文字 及 文字轉語音 的場景,當雲端連線間歇性或無法使用時。 例如,你可以在工業設備、支援語音控制的空調機組或可能行駛至無訊號範圍外的車輛中使用嵌入式語音技術。 你也可以開發混合雲與離線解決方案。 若裝置必須置於銀行或政府等安全環境中,應先考慮 斷開容器。

重要

Microsoft 限制了對嵌入式語音的存取。 你可以透過 Foundry 工具中的 Azure 語音 嵌入語音有限存取審查 申請存取。 欲了解更多資訊,請參閱 嵌入語音的有限存取。

平台要求

內嵌語音隨附於適用於 C#、C++ 和 Java 的 Speech SDK(1.24.1 版及更新版本),以及適用於 Python 的 Speech SDK(1.51.0 版及更新版本)。 請參閱一般語音 SDK 程式 語言安裝要求及目標平台特定細節。

Python 的 Speech SDK 支援嵌入式語音,支援 Windows(x64、Arm64)、Linux(x64、Arm64)及 macOS(x64、Arm64)。 Python 在 Android 上不支援嵌入式語音。

在 Linux(x64、Arm64、Arm32)上支援 Speech SDK for Go(版本 1.51.0 及以上)的嵌入式語音功能。 Go 在 Android 上不支援嵌入式語音。

以下是嵌入語音時記憶體消耗的一般估計值。 最終數字取決於功能配置。

  • 語音辨識或翻譯:模型檔案總大小 + 200 MB。
  • 語音合成:視地區而定,100-200 MB。

選擇你的目標環境

需在 Arm64(arm64-v8a) 或 Arm32armeabi-v7a() 硬體上安裝 Android 8.0(API 等級 26)或以上。

限制

  • 只有 C#、C++、Java、Python 和 Go SDK 支援嵌入式語音。 其他語音 SDK、語音 CLI 和 REST API 不支援嵌入式語音。
  • Python 的 Speech SDK 和 Go 的 Speech SDK 不支援混合語音(HybridSpeechConfig)。 混合情境可以使用 C#、C++ 或 Java SDK。
  • 嵌入式語音辨識僅支援單聲道 16 位元、8 kHz 或 16 kHz PCM 編碼的 WAV 音訊格式。
  • 嵌入式神經語音支援 16 kHz 或 24 kHz 的 RIFF/RAW。

嵌入式語音 SDK 套件

對於 C# 嵌入式應用程式,請安裝以下 Speech SDK for C# 套件:

包裝 描述
Microsoft。Cognitive Services.Speech 必須使用 Speech SDK
Microsoft.CognitiveServices.Speech.Extension.Embedded.SR 嵌入式語音辨識所需的必要條件
Microsoft.CognitiveServices.Speech.Extension.Embedded.TTS 嵌入式語音合成的必要條件
Microsoft.CognitiveServices.Speech.Extension.ONNX.Runtime 嵌入式語音辨識與合成所需
Microsoft。認知服務。語音.延伸.遙測 嵌入式語音辨識與合成所需

對於 C++ 嵌入式應用程式,請安裝以下 Speech SDK for C++ 套件:

包裝 描述
Microsoft。Cognitive Services.Speech 必須使用 Speech SDK
Microsoft.CognitiveServices.Speech.Extension.Embedded.SR 嵌入式語音辨識所需的必要條件
Microsoft.CognitiveServices.Speech.Extension.Embedded.TTS 嵌入式語音合成的必要條件
Microsoft.CognitiveServices.Speech.Extension.ONNX.Runtime 嵌入式語音辨識與合成所需
Microsoft。認知服務。語音.延伸.遙測 嵌入式語音辨識與合成所需

選擇你的目標環境

對於Java嵌入式應用程式,請新增 client-sdk-embedded (.jar) 作為相依關係。 此套件支援雲端、嵌入式及混合語音。

重要

不要在同一專案中加入 client-sdk ,因為它只支援雲端語音服務。

請依照以下步驟使用 Apache Maven 安裝 Java 語音 SDK:

  1. 安裝 Apache Maven。
  2. 打開你想要新專案的命令提示字元,建立一個新 pom.xml 檔案。
  3. 將以下 XML 內容複製為 pom.xml:
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.microsoft.cognitiveservices.speech.samples</groupId>
        <artifactId>quickstart-eclipse</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <build>
            <sourceDirectory>src</sourceDirectory>
            <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                <source>1.8</source>
                <target>1.8</target>
                </configuration>
            </plugin>
            </plugins>
        </build>
        <dependencies>
            <dependency>
            <groupId>com.microsoft.cognitiveservices.speech</groupId>
            <artifactId>client-sdk-embedded</artifactId>
            <version>1.43.0</version>
            </dependency>
        </dependencies>
    </project>
    
  4. 執行以下 Maven 指令來安裝 Speech SDK 及其相依關係。
    mvn clean dependency:copy-dependencies
    

對於以 Python 開發的嵌入式應用程式,請安裝適用於 Python 的 Speech SDK 嵌入式版本,其中包含裝置端推論執行階段:

pip install azure-cognitiveservices-speech-embedded

重要

嵌入式套件(azure-cognitiveservices-speech-embedded)是僅限雲端套件(azure-cognitiveservices-speech)的超集。 它會顯示相同的 azure.cognitiveservices.speech 匯入命名空間,並支援所有雲端場景以及嵌入式的。 只安裝兩個套件中的一個。

Go 版 Speech SDK 是 cgo 的繫結,因此內嵌語音在建置時和執行階段都需要原生 Speech SDK 程式庫。 下載原生 Linux 語音 SDK 套件的內嵌版本,其中包含裝置上的執行時擴充功能:

  1. 選擇一個目錄來放置 Speech SDK 檔案,並設定 SPEECHSDK_ROOT 環境變數指向該目錄:

    export SPEECHSDK_ROOT="$HOME/speechsdk-embedded"
    mkdir -p "$SPEECHSDK_ROOT"
    
  2. 下載並解壓嵌入的語音 SDK 二進位檔:

    wget -O SpeechSDK-Embedded-Linux.tar.gz https://aka.ms/csspeech/linuxembeddedbinary
    tar --strip 1 -xzf SpeechSDK-Embedded-Linux.tar.gz -C "$SPEECHSDK_ROOT"
    

    嵌入式套件是標準(僅限雲端)套件的超集。 它包含核心函式庫(Microsoft.CognitiveServices.Speech.core)、嵌入式識別與合成執行時擴充,以及它們對 ONNX 執行時的依賴性。 只安裝嵌入式套件,不要同時安裝兩個。

  3. 將 cgo 指向原生標頭檔和函式庫,並將函式庫資料夾加入載入路徑。 將 <architecture> 取代為您的 CPU 的處理器架構:x64、arm64 或 arm32。

    export CGO_CFLAGS="-I$SPEECHSDK_ROOT/include/c_api"
    export CGO_LDFLAGS="-L$SPEECHSDK_ROOT/lib/<architecture> -lMicrosoft.CognitiveServices.Speech.core"
    export LD_LIBRARY_PATH="$SPEECHSDK_ROOT/lib/<architecture>:$LD_LIBRARY_PATH"
    
  4. 將 Speech SDK for Go 模組加入你的專案:

    go get github.com/Microsoft/cognitive-services-speech-sdk-go
    

模型與語音

對於嵌入式語音,你需要下載語音辨識模型來支援 語音轉文字 ,以及 文字轉語音 的語音。 成功完成 有限存取審查 程序後,會提供相關指示。

以下語音 轉文字 模型可供選擇:da-DK、de-DE、en-AU、en-CA、en-GB、en-IE、en-IN、en-NZ、en-US、es-ES、es-MX、fr-CA、fr-FR、it-IT、ja-JP、ko-KR、pt-BR、pt-PT、zh-CN、zh-HK和 zh-TW。

所有文字轉換語音地區這裡皆可直接使用,並提供 1 種女性或男性語音 (或各 1 種),但 fa-IR (波斯文/伊朗) 除外。 我們歡迎您的意見,幫助我們評估對更多語言與聲音的需求。

嵌入語音配置

對於雲端連接的應用程式,如大多數 Speech SDK 範例所示,你會使用帶有 API 金鑰和端點的 SpeechConfig 物件。 對於嵌入式語音,你不會用 Foundry 的資源來處理語音。 你不是用雲端資源,而是使用下載到本地裝置的 模型和聲音 。

用這個 EmbeddedSpeechConfig 物件來設定模型或語音的位置。 如果你的應用程式同時用於語音轉文字和文字轉語音,你可以用同一個 EmbeddedSpeechConfig 物件來設定模型和語音的位置。

// Provide the location of the models and voices.
List<string> paths = new List<string>();
paths.Add("C:\\dev\\embedded-speech\\stt-models");
paths.Add("C:\\dev\\embedded-speech\\tts-voices");
var embeddedSpeechConfig = EmbeddedSpeechConfig.FromPaths(paths.ToArray());

// For speech to text
embeddedSpeechConfig.SetSpeechRecognitionModel(
    "Microsoft Speech Recognizer en-US FP Model V8",
    Environment.GetEnvironmentVariable("EMBEDDED_SPEECH_MODEL_LICENSE"));

// For text to speech
embeddedSpeechConfig.SetSpeechSynthesisVoice(
    "Microsoft Server Speech Text to Speech Voice (en-US, JennyNeural)",
    Environment.GetEnvironmentVariable("EMBEDDED_SPEECH_MODEL_LICENSE"));
embeddedSpeechConfig.SetSpeechSynthesisOutputFormat(SpeechSynthesisOutputFormat.Riff24Khz16BitMonoPcm);

提示

這個 GetEnvironmentVariable 功能是在 語音轉文字快速啟動 和 文字轉語音快速啟動中定義的。

// Provide the location of the models and voices.
vector<string> paths;
paths.push_back("C:\\dev\\embedded-speech\\stt-models");
paths.push_back("C:\\dev\\embedded-speech\\tts-voices");
auto embeddedSpeechConfig = EmbeddedSpeechConfig::FromPaths(paths);

// For speech to text
embeddedSpeechConfig->SetSpeechRecognitionModel((
    "Microsoft Speech Recognizer en-US FP Model V8",
    GetEnvironmentVariable("EMBEDDED_SPEECH_MODEL_LICENSE"));

// For text to speech
embeddedSpeechConfig->SetSpeechSynthesisVoice(
    "Microsoft Server Speech Text to Speech Voice (en-US, JennyNeural)",
    GetEnvironmentVariable("EMBEDDED_SPEECH_MODEL_LICENSE"));
embeddedSpeechConfig->SetSpeechSynthesisOutputFormat(SpeechSynthesisOutputFormat::Riff24Khz16BitMonoPcm);
// Provide the location of the models and voices.
List<String> paths = new ArrayList<>();
paths.add("C:\\dev\\embedded-speech\\stt-models");
paths.add("C:\\dev\\embedded-speech\\tts-voices");
var embeddedSpeechConfig = EmbeddedSpeechConfig.fromPaths(paths);

// For speech to text
embeddedSpeechConfig.setSpeechRecognitionModel(
    "Microsoft Speech Recognizer en-US FP Model V8",
    System.getenv("EMBEDDED_SPEECH_MODEL_LICENSE"));

// For text to speech
embeddedSpeechConfig.setSpeechSynthesisVoice(
    "Microsoft Server Speech Text to Speech Voice (en-US, JennyNeural)",
    System.getenv("EMBEDDED_SPEECH_MODEL_LICENSE"));
embeddedSpeechConfig.setSpeechSynthesisOutputFormat(SpeechSynthesisOutputFormat.Riff24Khz16BitMonoPcm);
import os
import azure.cognitiveservices.speech as speechsdk

# Provide the location of the models and voices.
paths = [
    "C:\\dev\\embedded-speech\\stt-models",
    "C:\\dev\\embedded-speech\\tts-voices",
]
embedded_speech_config = speechsdk.EmbeddedSpeechConfig.from_paths(paths)

# For speech to text
embedded_speech_config.set_speech_recognition_model(
    "Microsoft Speech Recognizer en-US FP Model V8",
    os.environ.get("EMBEDDED_SPEECH_MODEL_LICENSE"))

# For text to speech
embedded_speech_config.set_speech_synthesis_voice(
    "Microsoft Server Speech Text to Speech Voice (en-US, JennyNeural)",
    os.environ.get("EMBEDDED_SPEECH_MODEL_LICENSE"))
embedded_speech_config.set_speech_synthesis_output_format(
    speechsdk.SpeechSynthesisOutputFormat.Riff24Khz16BitMonoPcm)

提示

如果只有一個模型或語音路徑,你也可以使用 speechsdk.EmbeddedSpeechConfig.from_path(path)。

import (
    "os"

    "github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)

// Provide the location of the models and voices.
paths := []string{
    "/dev/embedded-speech/stt-models",
    "/dev/embedded-speech/tts-voices",
}
embeddedSpeechConfig, err := speech.NewEmbeddedSpeechConfigFromPaths(paths)
if err != nil {
    // Handle the error.
}
defer embeddedSpeechConfig.Close()

// For speech to text
embeddedSpeechConfig.SetSpeechRecognitionModel(
    "Microsoft Speech Recognizer en-US FP Model V8",
    os.Getenv("EMBEDDED_SPEECH_MODEL_LICENSE"))

// For text to speech
embeddedSpeechConfig.SetSpeechSynthesisVoice(
    "Microsoft Server Speech Text to Speech Voice (en-US, JennyNeural)",
    os.Getenv("EMBEDDED_SPEECH_MODEL_LICENSE"))

提示

如果只有一個模型或語音路徑,你也可以使用 speech.NewEmbeddedSpeechConfigFromPath(path)。 內嵌設定會包裝一般的 SpeechConfig,因此請將 embeddedSpeechConfig.GetSpeechConfig() 傳遞至現有的辨識器和合成器 Factory 函式,例如 NewSpeechRecognizerFromConfig。

嵌入語音代碼範例

你可以在 GitHub 找到可用的嵌入式語音樣本。 關於從零開始的專案評論,請參閱具體文件範例:

你可以在 GitHub 找到可用的嵌入式語音樣本。 關於從零開始的專案評論,請參閱具體文件範例:

你可以在 GitHub 找到可用的嵌入式語音樣本。 關於從零開始的專案評論,請參閱具體文件範例:

你可以在 GitHub 找到現成可用的嵌入式語音範例。 關於從零開始的專案評論,請參閱範例的具體文件:

你可以在 GitHub 找到可用於語音辨識、合成和翻譯的嵌入式語音範例。 關於前置條件、原生函式庫設定、模型與語音安裝,以及建置旗標,請參閱 嵌入式範例指南。

混合語音

與 HybridSpeechConfig 物件的混合語音預設使用雲端語音服務,嵌入語音則作為雲端連線受限或緩慢時的備用。

在語音 轉文字 的混合語音配置(識別模型)中,當多次嘗試後連接雲端服務失敗時,會使用嵌入語音。 如果連線恢復,識別可能會再次使用雲端服務。

在文字 轉語音 (語音)的混合語音配置中,嵌入式與雲端合成並行執行,最終結果則根據回應速度選擇。 每次新的合成請求都會再次評估最佳結果。

Note

Python 的語音 SDK 和 Go 的語音 SDK 不支援混合語音。 混合情境可以使用 C#、C++ 或 Java SDK。

雲端語音

對於雲端語音,您會使用SpeechConfig物件,如語音轉文字快速入門和文字轉語音快速入門。 若要執行內嵌語音的快速入門範例,可以將 SpeechConfig 替換為 EmbeddedSpeechConfig 或 HybridSpeechConfig。 大多數其他語音辨識與合成程式碼相同,無論是使用雲端、嵌入式或混合配置。

嵌入式語音功能

對於嵌入式語音,必須注意某些 語音合成標記語言(SSML) 標籤目前可能因模型結構差異而未被支援。 關於不支援的 SSML 標籤詳細資訊,請參閱下表。

第一關 第二層 子值 嵌入式 NTTS 支援
音效 src (來源) 不
書籤 是的
中斷 力量 是的
時間 是的
寂靜 型別 Leading、Tailing、Comma-exact (前置、尾隨、逗號精確匹配) 等 不
價值 不
emphasis (強調) 水平儀 不
lang (語言) 不
語彙 URI 是的
數學 不
mstts音頻時長 價值 不
MSTTS背景音頻 src (來源) 不
音量 不
fadein (淡入) 不
fadeout (淡出) 不
MSTTS快車-AS 樣式 是的 1
styledegree (風格強度) 不
角色 不
msttssilence 不
MSTTSVISEME 型別 redlips_front,臉部表情 不
p (段落) 是的
音素 字母表 IPA、SAPI、UPS 等等。 是的
pH 是的
prosody (韻律) 輪廓 支援句子層級;僅 en-US 與 zh-CN 支援字詞層級。 是的
音高 是的
範圍 是的
rate (速率) 是的
音量 是的
s 是的
say-as (表現形式) interpret-as (解釋為) 字元、拼寫、數字、日期等等。 是的
格式 是的
細節 是的
sub (替換文字) 別名 是的
說話 是的
語音 不

1msttsexpress-as 此風格僅支援 en-US-JennyNeural 聲音。