Cara mengenali ucapan

Dokumentasi referensi | Paket (NuGet) | Sampel Tambahan pada GitHub

Dalam panduan cara ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan ke teks secara real time.

Membuat konfigurasi ucapan

Untuk memanggil layanan Azure Cognitive Service untuk Ucapan dengan menggunakan Speech SDK, Anda perlu membuat instans SpeechConfig. Kelas ini mencakup informasi tentang langganan Anda, seperti kunci dan lokasi/wilayah, titik akhir, host, atau token otorisasi terkait milik Anda.

  1. Buat instans SpeechConfig menggunakan kunci dan lokasi/wilayah Anda.
  2. Buat sumber daya Ucapan di portal Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya multi-layanan.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
    }
}

Anda dapat menginisialisasi SpeechConfig dengan beberapa cara lain:

  • Gunakan titik akhir, dan teruskan titik akhir layanan Ucapan. Token kunci atau otorisasi bersifat opsional.
  • Gunakan host, dan teruskan alamat host. Token kunci atau otorisasi bersifat opsional.
  • Gunakan token otorisasi dengan wilayah/lokasi terkait.

Catatan

Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda selalu membuat konfigurasi.

Mengenali ucapan dari mikrofon

Untuk mengenali ucapan dengan menggunakan mikrofon perangkat Anda, buat AudioConfig instans dengan menggunakan metode .FromDefaultMicrophoneInput() Kemudian inisialisasi SpeechRecognizer objek dengan melewati speechConfig dan audioConfig.

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromMic(SpeechConfig speechConfig)
    {
        using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        Console.WriteLine("Speak into your microphone.");
        var result = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
        await FromMic(speechConfig);
    }
}

Jika ingin menggunakan perangkat input audio tertentu, Anda perlu menentukan ID perangkat di AudioConfig. Pelajari cara mendapatkan ID perangkat untuk perangkat input audio Anda.

Mengenali ucapan dari file

Jika Anda ingin mengenali ucapan dari file audio alih-alih mikrofon, Anda masih perlu membuat AudioConfig. Tetapi untuk kasus ini Anda tidak memanggil FromDefaultMicrophoneInput(). Anda memanggil FromWavFileInput() dan meneruskan jalur file:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromFile(SpeechConfig speechConfig)
    {
        using var audioConfig = AudioConfig.FromWavFileInput("PathToFile.wav");
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        var result = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
        await FromFile(speechConfig);
    }
}

Mengenali ucapan dari stream dalam memori

Untuk banyak kasus penggunaan, kemungkinan data audio Anda berasal dari Azure Blob Storage, atau sudah dalam memori sebagai byte[] instans atau struktur data mentah yang serupa. Contoh berikut menggunakan sebuah PushAudioInputStream untuk mengenali ucapan, yang pada dasarnya merupakan aliran memori abstrak. Kode sampel melakukan tindakan berikut:

  • Menulis data audio mentah (PCM) ke PushAudioInputStream menggunakan fungsi Write(), yang menerima instans byte[].
  • Membaca file .wav dengan menggunakan FileReader untuk tujuan demonstrasi. Jika Anda telah mempunyai data audio di instans byte[], Anda dapat langsung menulis konten ke aliran input.
  • Format defaultnya adalah data modulasi kode pulse mono (PCM) 16-bit, 16-KHz. Untuk mengustomisasi format, Anda dapat meneruskan objek AudioStreamFormat ke CreatePushStream() menggunakan fungsi statis AudioStreamFormat.GetWaveFormatPCM(sampleRate, (byte)bitRate, (byte)channels).
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromStream(SpeechConfig speechConfig)
    {
        var reader = new BinaryReader(File.OpenRead("PathToFile.wav"));
        using var audioConfigStream = AudioInputStream.CreatePushStream();
        using var audioConfig = AudioConfig.FromStreamInput(audioConfigStream);
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        byte[] readBytes;
        do
        {
            readBytes = reader.ReadBytes(1024);
            audioConfigStream.Write(readBytes, readBytes.Length);
        } while (readBytes.Length > 0);

        var result = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
        await FromStream(speechConfig);
    }
}

Menggunakan aliran pendorongan sebagai input mengasumsikan bahwa data audio adalah PCM mentah dan melewatkan header apa pun. API masih berfungsi dalam kasus tertentu jika header belum dilewati. Untuk hasil terbaik, pertimbangkan untuk menerapkan logika untuk membaca header sehingga byte[] dimulai pada awal data audio.

Menangani kesalahan

Contoh sebelumnya hanya mendapatkan teks yang dikenali dari result.Text properti . Untuk menghandel kesalahan dan respons lainnya, Anda perlu menulis beberapa kode untuk menghandel hasilnya. Kode berikut mengevaluasi properti result.Reason dan:

  • Menampilkan hasil pengenalan: ResultReason.RecognizedSpeech.
  • Jika tidak ada kecocokan pengenalan, itu memberi tahu pengguna: ResultReason.NoMatch.
  • Jika terjadi kesalahan, kesalahan akan mencetak pesan kesalahan: ResultReason.Canceled.
switch (result.Reason)
{
    case ResultReason.RecognizedSpeech:
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
        break;
    case ResultReason.NoMatch:
        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
        break;
    case ResultReason.Canceled:
        var cancellation = CancellationDetails.FromResult(result);
        Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

        if (cancellation.Reason == CancellationReason.Error)
        {
            Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
            Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
            Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
        }
        break;
}

Gunakan pengenalan berkelanjutan

Contoh sebelumnya menggunakan pengenalan satu bidikan, yang mengenali satu ucapan. Akhir dari ujaran tunggal ditentukan dengan mendengarkan keheningan di akhir atau sampai maksimal 15 detik audio diproses.

Sebaliknya, Anda menggunakan pengenalan berkelanjutan saat Anda ingin mengontrol kapan ingin berhenti mengenali. Pengenalan berkelanjutan mengharuskan Anda berlangganan peristiwa Recognizing, Recognized, dan Canceled untuk mendapatkan hasil pengenalan. Untuk menghentikan pengenalan, Anda harus memanggil StopContinuousRecognitionAsync. Berikut adalah contoh bagaimana pengenalan berkelanjutan dilakukan pada file input audio.

Mulailah dengan mendefinisikan input dan menginisialisasi SpeechRecognizer:

using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

Kemudian buat TaskCompletionSource<int> instans untuk mengelola status pengenalan ucapan:

var stopRecognition = new TaskCompletionSource<int>();

Selanjutnya, berlangganan acara yang SpeechRecognizer mengirimkan:

  • Recognizing: Sinyal untuk peristiwa yang berisi hasil pengenalan menengah.
  • Recognized: Sinyal untuk peristiwa yang berisi hasil pengenalan akhir, yang menunjukkan upaya pengenalan yang berhasil.
  • SessionStopped: Sinyal untuk peristiwa yang menunjukkan akhir sesi pengenalan (operasi).
  • Canceled: Sinyal untuk peristiwa yang berisi hasil pengenalan yang dibatalkan. Hasil ini menunjukkan upaya pengenalan yang dibatalkan sebagai akibat dari permintaan pembatalan langsung. Atau, mereka menunjukkan kegagalan transportasi atau protokol.
speechRecognizer.Recognizing += (s, e) =>
{
    Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
};

speechRecognizer.Recognized += (s, e) =>
{
    if (e.Result.Reason == ResultReason.RecognizedSpeech)
    {
        Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
    }
    else if (e.Result.Reason == ResultReason.NoMatch)
    {
        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
    }
};

speechRecognizer.Canceled += (s, e) =>
{
    Console.WriteLine($"CANCELED: Reason={e.Reason}");

    if (e.Reason == CancellationReason.Error)
    {
        Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
        Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
        Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
    }

    stopRecognition.TrySetResult(0);
};

speechRecognizer.SessionStopped += (s, e) =>
{
    Console.WriteLine("\n    Session stopped event.");
    stopRecognition.TrySetResult(0);
};

Setelah semuanya disiapkan, panggil StartContinuousRecognitionAsync untuk memulai pengenalan:

await speechRecognizer.StartContinuousRecognitionAsync();

// Waits for completion. Use Task.WaitAny to keep the task rooted.
Task.WaitAny(new[] { stopRecognition.Task });

// Make the following call at some point to stop recognition:
// await speechRecognizer.StopContinuousRecognitionAsync();

Mengubah bahasa sumber

Tugas umum pengenalan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan cara mengubah bahasa input menjadi bahasa Italia. Di kode Anda, cari instans SpeechConfig Anda dan tambahkan baris ini tepat di bawahnya:

speechConfig.SpeechRecognitionLanguage = "it-IT";

Properti SpeechRecognitionLanguage memperkirakan string format bahasa lokal. Untuk informasi selengkapnya, lihat daftar lokal ucapan ke teks yang didukung.

Identifikasi bahasa

Anda dapat menggunakan identifikasi bahasa dengan pengenalan ucapan ke teks saat Anda perlu mengidentifikasi bahasa dalam sumber audio lalu mentranskripsikan ke teks.

Untuk sampel kode lengkap, lihat Identifikasi bahasa.

Menggunakan titik akhir kustom

Dengan ucapan kustom, Anda dapat mengunggah data Anda sendiri, menguji dan melatih model kustom, membandingkan akurasi antar model, dan menyebarkan model ke titik akhir kustom. Contoh berikut menunjukkan cara mengatur titik akhir kustom.

var speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.EndpointId = "YourEndpointId";
var speechRecognizer = new SpeechRecognizer(speechConfig);

Menjalankan dan menggunakan kontainer

Kontainer ucapan menyediakan API titik akhir kueri berbasis websocket yang diakses melalui Speech SDK dan Speech CLI. Secara default, Speech SDK dan Speech CLI menggunakan layanan Ucapan publik. Untuk menggunakan kontainer, Anda perlu mengubah metode inisialisasi. Gunakan URL host kontainer alih-alih kunci dan wilayah.

Untuk informasi selengkapnya tentang kontainer, lihat URL Host di Menginstal dan menjalankan kontainer Ucapan dengan Docker.

Mengubah cara penanganan keheningan

Jika pengguna diharapkan berbicara lebih cepat atau lebih lambat dari biasanya, perilaku default untuk keheningan nonspeech dalam audio input mungkin tidak menghasilkan apa yang Anda harapkan. Masalah umum dengan penanganan keheningan meliputi:

  • Ucapan cepat menautkan banyak kalimat menjadi satu hasil pengenalan, alih-alih memecah kalimat menjadi hasil individu.
  • Ucapan lambat memisahkan bagian dari satu kalimat menjadi beberapa hasil.
  • Pengenalan satu bidikan berakhir terlalu cepat sambil menunggu ucapan dimulai.

Masalah ini dapat diatasi dengan mengatur salah satu dari dua properti batas waktu pada instans yang SpeechConfig digunakan untuk membuat SpeechRecognizer:

  • Batas waktu keheningan segmentasi menyesuaikan berapa banyak audio nonspeech yang diizinkan dalam frasa yang saat ini sedang diucapkan sebelum frasa tersebut dianggap "selesai."
    • Nilai yang lebih tinggi umumnya membuat hasil lebih lama dan memungkinkan jeda yang lebih lama dari pembicara dalam frasa tetapi membuat hasil membutuhkan waktu lebih lama untuk tiba. Mereka juga dapat membuat frasa terpisah digabungkan menjadi satu hasil ketika diatur terlalu tinggi.
    • Nilai yang lebih rendah umumnya membuat hasil lebih pendek dan memastikan lebih banyak perintah dan sering berhenti di antara frasa, tetapi juga dapat menyebabkan frasa tunggal dipisahkan menjadi beberapa hasil saat diatur terlalu rendah.
    • Batas waktu ini dapat diatur ke nilai bilangan bulat antara 100 dan 5000, dalam milidetik, dengan 500 default umum.
  • Batas waktu keheningan awal menyesuaikan berapa banyak audio nonspeech yang diizinkan sebelum frasa sebelum upaya pengenalan berakhir dalam hasil "tidak ada kecocokan".
    • Nilai yang lebih tinggi memberi pembicara lebih banyak waktu untuk bereaksi dan mulai berbicara, tetapi juga dapat mengakibatkan responsivitas lambat ketika tidak ada yang diucapkan.
    • Nilai yang lebih rendah memastikan perintah "tidak ada kecocokan" untuk pengalaman pengguna yang lebih cepat dan penanganan audio yang lebih terkontrol, tetapi mungkin memotong speaker terlalu cepat saat diatur terlalu rendah.
    • Karena pengenalan berkelanjutan menghasilkan banyak hasil, nilai ini menentukan seberapa sering hasil "tidak ada kecocokan" tiba tetapi tidak memengaruhi konten hasil pengenalan.
    • Batas waktu ini dapat diatur ke nilai bilangan bulat non-negatif, dalam milidetik, atau diatur ke 0 untuk menonaktifkannya sepenuhnya. 5000 adalah default umum untuk pengenalan satu bidikan sementara 15000 adalah default umum untuk pengenalan berkelanjutan.

Karena ada tradeoff saat memodifikasi batas waktu ini, Anda hanya boleh mengubah pengaturan ketika Anda memiliki masalah yang terkait dengan penanganan keheningan. Nilai default secara optimal menangani sebagian besar audio lisan dan hanya skenario yang jarang terjadi yang akan mengalami masalah.

Contoh: Pengguna yang berbicara nomor seri seperti "ABC-123-4567" mungkin menjeda antara grup karakter cukup lama agar nomor seri dipecah menjadi beberapa hasil. Dalam hal ini, coba nilai yang lebih tinggi seperti 2000 md untuk batas waktu keheningan segmentasi:

speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "2000");

Contoh: Ucapan penyaji yang direkam mungkin cukup cepat sehingga beberapa kalimat berturut-turut digabungkan, dengan hasil pengenalan besar hanya tiba sekali atau dua kali per menit. Dalam hal ini, atur batas waktu keheningan segmentasi ke nilai yang lebih rendah seperti 300 ms:

speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "300");

Contoh: Pengenalan satu bidikan yang meminta pembicara untuk menemukan dan membaca nomor seri berakhir terlalu cepat saat angka ditemukan. Dalam hal ini, coba batas waktu keheningan awal yang lebih lama seperti 10.000 ms:

speechConfig.SetProperty(PropertyId.SpeechServiceConnection_InitialSilenceTimeoutMs, "10000");

Dokumentasi referensi | Paket (NuGet) | Sampel Tambahan pada GitHub

Dalam panduan cara ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan ke teks secara real time.

Membuat konfigurasi ucapan

Untuk memanggil layanan Azure Cognitive Service untuk Ucapan menggunakan Speech SDK, Anda perlu membuat SpeechConfig instans. Kelas ini mencakup informasi tentang langganan Anda, seperti kunci dan lokasi/wilayah, titik akhir, host, atau token otorisasi terkait milik Anda.

  1. Buat instans SpeechConfig dengan menggunakan kunci dan wilayah Anda.
  2. Buat sumber daya Ucapan di portal Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya multi-layanan.
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;

auto speechConfig = SpeechConfig::FromSubscription("YourSpeechKey", "YourSpeechRegion");

Anda dapat menginisialisasi SpeechConfig dengan beberapa cara lain:

  • Gunakan titik akhir, dan teruskan titik akhir layanan Ucapan. Token kunci atau otorisasi bersifat opsional.
  • Gunakan host, dan teruskan alamat host. Token kunci atau otorisasi bersifat opsional.
  • Gunakan token otorisasi dengan wilayah/lokasi terkait.

Catatan

Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda selalu membuat konfigurasi.

Mengenali ucapan dari mikrofon

Untuk mengenali ucapan dengan menggunakan mikrofon perangkat Anda, buat AudioConfig instans dengan menggunakan FromDefaultMicrophoneInput() fungsi anggota. Kemudian inisialisasiSpeechRecognizer objek dengan melewati audioConfig dan config.

using namespace Microsoft::CognitiveServices::Speech::Audio;

auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);

cout << "Speak into your microphone." << std::endl;
auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;

Jika ingin menggunakan perangkat input audio tertentu, Anda perlu menentukan ID perangkat di AudioConfig. Untuk informasi selengkapnya tentang cara mendapatkan ID perangkat untuk perangkat input audio Anda, lihat Memilih perangkat input audio dengan Speech SDK

Mengenali ucapan dari file

Jika Anda ingin mengenali ucapan dari file audio alih-alih menggunakan mikrofon, Anda masih perlu membuat AudioConfig instans. Tetapi untuk kasus ini Anda tidak memanggil FromDefaultMicrophoneInput(). Anda memanggil FromWavFileInput() dan meneruskan jalur file:

using namespace Microsoft::CognitiveServices::Speech::Audio;

auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);

auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;

Mengenali ucapan dengan menggunakan kelas Recognizer

Kelas pengenal untuk SDK Ucapan terhadap C++ memaparkan beberapa metode yang dapat Anda gunakan untuk pengenalan ucapan.

Pengenalan pengucapan tunggal

Pengenalan pengucapan tunggal mengenali ujaran tunggal secara asinkron. Akhir dari ujaran tunggal ditentukan dengan mendengarkan keheningan di akhir atau sampai maksimal 15 detik audio diproses. Berikut adalah contoh pengenalan pengucapan tunggal asinkron menggunakan RecognizeOnceAsync:

auto result = speechRecognizer->RecognizeOnceAsync().get();

Anda harus menulis beberapa kode untuk menghandel hasilnya. Sampel ini mengevaluasi result->Reason dan:

  • Menampilkan hasil pengenalan: ResultReason::RecognizedSpeech.
  • Jika tidak ada kecocokan pengenalan, itu memberi tahu pengguna: ResultReason::NoMatch.
  • Jika terjadi kesalahan, kesalahan akan mencetak pesan kesalahan: ResultReason::Canceled.
switch (result->Reason)
{
    case ResultReason::RecognizedSpeech:
        cout << "We recognized: " << result->Text << std::endl;
        break;
    case ResultReason::NoMatch:
        cout << "NOMATCH: Speech could not be recognized." << std::endl;
        break;
    case ResultReason::Canceled:
        {
            auto cancellation = CancellationDetails::FromResult(result);
            cout << "CANCELED: Reason=" << (int)cancellation->Reason << std::endl;
    
            if (cancellation->Reason == CancellationReason::Error) {
                cout << "CANCELED: ErrorCode= " << (int)cancellation->ErrorCode << std::endl;
                cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails << std::endl;
                cout << "CANCELED: Did you set the speech resource key and region values?" << std::endl;
            }
        }
        break;
    default:
        break;
}

Pengenalan berkelanjutan

Pengenalan berkelanjutan sedikit lebih terlibat daripada pengenalan pengucapan tunggal. Pengenalan berkelanjutan mengharuskan Anda berlangganan peristiwa Recognizing, Recognized, dan Canceled untuk mendapatkan hasil pengenalan. Untuk menghentikan pengenalan, Anda harus menyerukan StopContinuousRecognitionAsync. Berikut adalah contoh bagaimana pengenalan berkelanjutan dilakukan pada file input audio.

Mulailah dengan mendefinisikan input dan menginisialisasi SpeechRecognizer:

auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);

Selanjutnya, mari buat variabel untuk mengelola status pengenalan ucapan. Deklarasikan promise<void> karena di awal pengenalan, Anda dapat aman berasumsi bahwa itu belum selesai:

promise<void> recognitionEnd;

Selanjutnya, berlangganan acara yang SpeechRecognizer mengirimkan:

  • Recognizing: Sinyal untuk peristiwa yang berisi hasil pengenalan menengah.
  • Recognized: Sinyal untuk peristiwa yang berisi hasil pengenalan akhir, yang menunjukkan upaya pengenalan yang berhasil.
  • SessionStopped: Sinyal untuk peristiwa yang menunjukkan akhir sesi pengenalan (operasi).
  • Canceled: Sinyal untuk peristiwa yang berisi hasil pengenalan yang dibatalkan. Hasil ini menunjukkan upaya pengenalan yang dibatalkan sebagai akibat dari permintaan pembatalan langsung. Atau, mereka menunjukkan kegagalan transportasi atau protokol.
speechRecognizer->Recognizing.Connect([](const SpeechRecognitionEventArgs& e)
    {
        cout << "Recognizing:" << e.Result->Text << std::endl;
    });

speechRecognizer->Recognized.Connect([](const SpeechRecognitionEventArgs& e)
    {
        if (e.Result->Reason == ResultReason::RecognizedSpeech)
        {
            cout << "RECOGNIZED: Text=" << e.Result->Text 
                 << " (text could not be translated)" << std::endl;
        }
        else if (e.Result->Reason == ResultReason::NoMatch)
        {
            cout << "NOMATCH: Speech could not be recognized." << std::endl;
        }
    });

speechRecognizer->Canceled.Connect([&recognitionEnd](const SpeechRecognitionCanceledEventArgs& e)
    {
        cout << "CANCELED: Reason=" << (int)e.Reason << std::endl;
        if (e.Reason == CancellationReason::Error)
        {
            cout << "CANCELED: ErrorCode=" << (int)e.ErrorCode << "\n"
                 << "CANCELED: ErrorDetails=" << e.ErrorDetails << "\n"
                 << "CANCELED: Did you set the speech resource key and region values?" << std::endl;

            recognitionEnd.set_value(); // Notify to stop recognition.
        }
    });

speechRecognizer->SessionStopped.Connect([&recognitionEnd](const SessionEventArgs& e)
    {
        cout << "Session stopped.";
        recognitionEnd.set_value(); // Notify to stop recognition.
    });

Setelah semuanya disiapkan, panggil StopContinuousRecognitionAsync untuk memulai pengenalan:

// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer->StartContinuousRecognitionAsync().get();

// Waits for recognition end.
recognitionEnd.get_future().get();

// Stops recognition.
speechRecognizer->StopContinuousRecognitionAsync().get();

Mengubah bahasa sumber

Tugas umum pengenalan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan cara mengubah bahasa input menjadi bahasa Jerman. Di kode Anda, cari instans SpeechConfig Anda dan tambahkan baris ini tepat di bawahnya:

speechConfig->SetSpeechRecognitionLanguage("de-DE");

SetSpeechRecognitionLanguage adalah parameter yang mengambil untai (karakter) sebagai argumen. Untuk informasi selengkapnya, lihat daftar lokal ucapan ke teks yang didukung.

Identifikasi bahasa

Anda dapat menggunakan identifikasi bahasa dengan pengenalan ucapan ke teks saat Anda perlu mengidentifikasi bahasa dalam sumber audio lalu mentranskripsikan ke teks.

Untuk sampel kode lengkap, lihat Identifikasi bahasa.

Menggunakan titik akhir kustom

Dengan ucapan kustom, Anda dapat mengunggah data Anda sendiri, menguji dan melatih model kustom, membandingkan akurasi antar model, dan menyebarkan model ke titik akhir kustom. Contoh berikut menunjukkan cara mengatur titik akhir kustom.

auto speechConfig = SpeechConfig::FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig->SetEndpointId("YourEndpointId");
auto speechRecognizer = SpeechRecognizer::FromConfig(speechConfig);

Menjalankan dan menggunakan kontainer

Kontainer ucapan menyediakan API titik akhir kueri berbasis websocket yang diakses melalui Speech SDK dan Speech CLI. Secara default, Speech SDK dan Speech CLI menggunakan layanan Ucapan publik. Untuk menggunakan kontainer, Anda perlu mengubah metode inisialisasi. Gunakan URL host kontainer alih-alih kunci dan wilayah.

Untuk informasi selengkapnya tentang kontainer, lihat URL Host di Menginstal dan menjalankan kontainer Ucapan dengan Docker.

Dokumentasi referensi | Paket (Go) | Sampel Tambahan pada GitHub

Dalam panduan cara ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan ke teks secara real time.

Mengenali ucapan ke teks dari mikrofon

Gunakan sampel kode berikut untuk menjalankan pengenalan ucapan dari mikrofon perangkat default Anda. Ganti variabel subscription dan region dengan kunci ucapan dan lokasi/wilayah Anda. Buat sumber daya Ucapan di portal Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya multi-layanan. Menjalankan skrip memulai sesi pengenalan pada mikrofon default dan teks output Anda:

package main

import (
	"bufio"
	"fmt"
	"os"

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

func sessionStartedHandler(event speech.SessionEventArgs) {
	defer event.Close()
	fmt.Println("Session Started (ID=", event.SessionID, ")")
}

func sessionStoppedHandler(event speech.SessionEventArgs) {
	defer event.Close()
	fmt.Println("Session Stopped (ID=", event.SessionID, ")")
}

func recognizingHandler(event speech.SpeechRecognitionEventArgs) {
	defer event.Close()
	fmt.Println("Recognizing:", event.Result.Text)
}

func recognizedHandler(event speech.SpeechRecognitionEventArgs) {
	defer event.Close()
	fmt.Println("Recognized:", event.Result.Text)
}

func cancelledHandler(event speech.SpeechRecognitionCanceledEventArgs) {
	defer event.Close()
	fmt.Println("Received a cancellation: ", event.ErrorDetails)
	fmt.Println("Did you set the speech resource key and region values?")
}

func main() {
    subscription :=  "YourSpeechKey"
    region := "YourSpeechRegion"

	audioConfig, err := audio.NewAudioConfigFromDefaultMicrophoneInput()
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer audioConfig.Close()
	config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer config.Close()
	speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer speechRecognizer.Close()
	speechRecognizer.SessionStarted(sessionStartedHandler)
	speechRecognizer.SessionStopped(sessionStoppedHandler)
	speechRecognizer.Recognizing(recognizingHandler)
	speechRecognizer.Recognized(recognizedHandler)
	speechRecognizer.Canceled(cancelledHandler)
	speechRecognizer.StartContinuousRecognitionAsync()
	defer speechRecognizer.StopContinuousRecognitionAsync()
	bufio.NewReader(os.Stdin).ReadBytes('\n')
}

Jalankan perintah berikut untuk membuat file go.mod yang menautkan ke komponen yang dihosting di GitHub:

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

Sekarang, bangun dan jalankan kode:

go build
go run quickstart

Untuk informasi terperinci, lihat konten referensi untuk SpeechConfig kelas dan konten referensi untuk SpeechRecognizer kelas.

Mengenali ucapan ke teks dari file audio

Gunakan contoh berikut untuk menjalankan pengenalan ucapan dari file audio. Ganti variabel subscription dan region dengan kunci ucapan dan lokasi/wilayah Anda. Buat sumber daya Ucapan di portal Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya multi-layanan. Selain itu, ganti variabel file dengan jalur ke file .wav . Saat Anda menjalankan skrip, skrip mengenali ucapan dari file dan menghasilkan hasil teks:

package main

import (
	"fmt"
	"time"

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

func main() {
    subscription :=  "YourSpeechKey"
    region := "YourSpeechRegion"
    file := "path/to/file.wav"

	audioConfig, err := audio.NewAudioConfigFromWavFileInput(file)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer audioConfig.Close()
	config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer config.Close()
	speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer speechRecognizer.Close()
	speechRecognizer.SessionStarted(func(event speech.SessionEventArgs) {
		defer event.Close()
		fmt.Println("Session Started (ID=", event.SessionID, ")")
	})
	speechRecognizer.SessionStopped(func(event speech.SessionEventArgs) {
		defer event.Close()
		fmt.Println("Session Stopped (ID=", event.SessionID, ")")
	})

	task := speechRecognizer.RecognizeOnceAsync()
	var outcome speech.SpeechRecognitionOutcome
	select {
	case outcome = <-task:
	case <-time.After(5 * time.Second):
		fmt.Println("Timed out")
		return
	}
	defer outcome.Close()
	if outcome.Error != nil {
		fmt.Println("Got an error: ", outcome.Error)
	}
	fmt.Println("Got a recognition!")
	fmt.Println(outcome.Result.Text)
}

Jalankan perintah berikut untuk membuat file go.mod yang menautkan ke komponen yang dihosting di GitHub:

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

Sekarang, bangun dan jalankan kode:

go build
go run quickstart

Untuk informasi terperinci, lihat konten referensi untuk SpeechConfig kelas dan konten referensi untuk SpeechRecognizer kelas.

Menjalankan dan menggunakan kontainer

Kontainer ucapan menyediakan API titik akhir kueri berbasis websocket yang diakses melalui Speech SDK dan Speech CLI. Secara default, Speech SDK dan Speech CLI menggunakan layanan Ucapan publik. Untuk menggunakan kontainer, Anda perlu mengubah metode inisialisasi. Gunakan URL host kontainer alih-alih kunci dan wilayah.

Untuk informasi selengkapnya tentang kontainer, lihat URL Host di Menginstal dan menjalankan kontainer Ucapan dengan Docker.

Dokumentasi referensi | Sampel Tambahan pada GitHub

Dalam panduan cara ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan ke teks secara real time.

Membuat konfigurasi ucapan

Untuk memanggil layanan Ucapan dengan menggunakan Speech SDK, Anda perlu membuat instans SpeechConfig . Kelas ini mencakup informasi tentang langganan Anda, seperti kunci dan lokasi/wilayah, titik akhir, host, atau token otorisasi terkait milik Anda.

  1. Buat instans SpeechConfig menggunakan kunci dan lokasi/wilayah Anda.
  2. Buat sumber daya Ucapan di portal Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya multi-layanan.
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
    }
}

Anda dapat menginisialisasi SpeechConfig dengan beberapa cara lain:

  • Gunakan titik akhir, dan teruskan titik akhir layanan Ucapan. Token kunci atau otorisasi bersifat opsional.
  • Gunakan host, dan teruskan alamat host. Token kunci atau otorisasi bersifat opsional.
  • Gunakan token otorisasi dengan wilayah/lokasi terkait.

Catatan

Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda akan selalu membuat konfigurasi.

Mengenali ucapan dari mikrofon

Untuk mengenali ucapan dengan menggunakan mikrofon perangkat Anda, buat AudioConfig instans dengan menggunakan metode .fromDefaultMicrophoneInput() Kemudian inisialisasi SpeechRecognizer objek dengan melewati audioConfig dan config.

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
        fromMic(speechConfig);
    }

    public static void fromMic(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
        AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
        SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        System.out.println("Speak into your microphone.");
        Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
        SpeechRecognitionResult result = task.get();
        System.out.println("RECOGNIZED: Text=" + result.getText());
    }
}

Jika ingin menggunakan perangkat input audio tertentu, Anda perlu menentukan ID perangkat di AudioConfig. Untuk informasi selengkapnya tentang cara mendapatkan ID perangkat untuk perangkat input audio Anda, lihat Memilih perangkat input audio dengan Speech SDK.

Mengenali ucapan dari file

Jika Anda ingin mengenali ucapan dari file audio alih-alih menggunakan mikrofon, Anda masih perlu membuat AudioConfig instans. Tetapi untuk kasus ini Anda tidak memanggil FromDefaultMicrophoneInput(). Anda memanggil fromWavFileInput() dan meneruskan jalur file:

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
        fromFile(speechConfig);
    }

    public static void fromFile(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
        AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
        SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
        
        Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
        SpeechRecognitionResult result = task.get();
        System.out.println("RECOGNIZED: Text=" + result.getText());
    }
}

Menangani kesalahan

Contoh sebelumnya hanya mendapatkan teks yang dikenali dengan menggunakan result.getText(). Untuk menghandel kesalahan dan respons lainnya, Anda perlu menulis beberapa kode untuk menghandel hasilnya. Contoh berikut mengevaluasi result.getReason() dan:

  • Menampilkan hasil pengenalan: ResultReason.RecognizedSpeech.
  • Jika tidak ada kecocokan pengenalan, itu memberi tahu pengguna: ResultReason.NoMatch.
  • Jika terjadi kesalahan, kesalahan akan mencetak pesan kesalahan: ResultReason.Canceled.
switch (result.getReason()) {
    case ResultReason.RecognizedSpeech:
        System.out.println("We recognized: " + result.getText());
        exitCode = 0;
        break;
    case ResultReason.NoMatch:
        System.out.println("NOMATCH: Speech could not be recognized.");
        break;
    case ResultReason.Canceled: {
            CancellationDetails cancellation = CancellationDetails.fromResult(result);
            System.out.println("CANCELED: Reason=" + cancellation.getReason());

            if (cancellation.getReason() == CancellationReason.Error) {
                System.out.println("CANCELED: ErrorCode=" + cancellation.getErrorCode());
                System.out.println("CANCELED: ErrorDetails=" + cancellation.getErrorDetails());
                System.out.println("CANCELED: Did you set the speech resource key and region values?");
            }
        }
        break;
}

Gunakan pengenalan berkelanjutan

Contoh sebelumnya menggunakan pengenalan satu bidikan, yang mengenali satu ucapan. Akhir dari ujaran tunggal ditentukan dengan mendengarkan keheningan di akhir atau sampai maksimal 15 detik audio diproses.

Sebaliknya, Anda menggunakan pengenalan berkelanjutan saat Anda ingin mengontrol kapan ingin berhenti mengenali. Pengenalan berkelanjutan mengharuskan Anda berlangganan peristiwa recognizing, recognized, dan canceled untuk mendapatkan hasil pengenalan. Untuk menghentikan pengenalan, Anda harus memanggil stopContinuousRecognitionAsync. Berikut adalah contoh bagaimana Anda dapat melakukan pengenalan berkelanjutan pada file input audio.

Mulailah dengan mendefinisikan input dan menginisialisasi SpeechRecognizer:

AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(config, audioConfig);

Selanjutnya, mari buat variabel untuk mengelola status pengenalan ucapan. Mendeklarasikan instans Semaphore di cakupan kelas:

private static Semaphore stopTranslationWithFileSemaphore;

Selanjutnya, berlangganan acara yang SpeechRecognizer mengirimkan:

  • recognizing: Sinyal untuk peristiwa yang berisi hasil pengenalan menengah.
  • recognized: Sinyal untuk peristiwa yang berisi hasil pengenalan akhir, yang menunjukkan upaya pengenalan yang berhasil.
  • sessionStopped: Sinyal untuk peristiwa yang menunjukkan akhir sesi pengenalan (operasi).
  • canceled: Sinyal untuk peristiwa yang berisi hasil pengenalan yang dibatalkan. Hasil ini menunjukkan upaya pengenalan yang dibatalkan sebagai akibat dari permintaan pembatalan langsung. Atau, mereka menunjukkan kegagalan transportasi atau protokol.
// First initialize the semaphore.
stopTranslationWithFileSemaphore = new Semaphore(0);

speechRecognizer.recognizing.addEventListener((s, e) -> {
    System.out.println("RECOGNIZING: Text=" + e.getResult().getText());
});

speechRecognizer.recognized.addEventListener((s, e) -> {
    if (e.getResult().getReason() == ResultReason.RecognizedSpeech) {
        System.out.println("RECOGNIZED: Text=" + e.getResult().getText());
    }
    else if (e.getResult().getReason() == ResultReason.NoMatch) {
        System.out.println("NOMATCH: Speech could not be recognized.");
    }
});

speechRecognizer.canceled.addEventListener((s, e) -> {
    System.out.println("CANCELED: Reason=" + e.getReason());

    if (e.getReason() == CancellationReason.Error) {
        System.out.println("CANCELED: ErrorCode=" + e.getErrorCode());
        System.out.println("CANCELED: ErrorDetails=" + e.getErrorDetails());
        System.out.println("CANCELED: Did you set the speech resource key and region values?");
    }

    stopTranslationWithFileSemaphore.release();
});

speechRecognizer.sessionStopped.addEventListener((s, e) -> {
    System.out.println("\n    Session stopped event.");
    stopTranslationWithFileSemaphore.release();
});

Setelah semuanya disiapkan, panggil startContinuousRecognitionAsync untuk memulai pengenalan:

// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer.startContinuousRecognitionAsync().get();

// Waits for completion.
stopTranslationWithFileSemaphore.acquire();

// Stops recognition.
speechRecognizer.stopContinuousRecognitionAsync().get();

Mengubah bahasa sumber

Tugas umum pengenalan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan cara mengubah bahasa input menjadi bahasa Prancis. Dalam kode Anda, temukan instans Anda SpeechConfig , dan tambahkan baris ini tepat di bawahnya:

config.setSpeechRecognitionLanguage("fr-FR");

setSpeechRecognitionLanguage adalah parameter yang mengambil untai (karakter) sebagai argumen. Lihat daftar ucapan yang didukung ke lokal teks.

Identifikasi bahasa

Anda dapat menggunakan identifikasi bahasa dengan pengenalan ucapan ke teks saat Anda perlu mengidentifikasi bahasa dalam sumber audio lalu mentranskripsikan ke teks.

Untuk sampel kode lengkap, lihat Identifikasi bahasa.

Menggunakan titik akhir kustom

Dengan ucapan kustom, Anda dapat mengunggah data Anda sendiri, menguji dan melatih model kustom, membandingkan akurasi antar model, dan menyebarkan model ke titik akhir kustom. Contoh berikut menunjukkan cara mengatur titik akhir kustom:

SpeechConfig speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.setEndpointId("YourEndpointId");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig);

Menjalankan dan menggunakan kontainer

Kontainer ucapan menyediakan API titik akhir kueri berbasis websocket yang diakses melalui Speech SDK dan Speech CLI. Secara default, Speech SDK dan Speech CLI menggunakan layanan Ucapan publik. Untuk menggunakan kontainer, Anda perlu mengubah metode inisialisasi. Gunakan URL host kontainer alih-alih kunci dan wilayah.

Untuk informasi selengkapnya tentang kontainer, lihat URL Host di Menginstal dan menjalankan kontainer Ucapan dengan Docker.

Dokumentasi referensi | Paket (npm) | Sampel Tambahan pada kode sumber GitHub | Library

Dalam panduan cara ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan ke teks secara real time.

Membuat konfigurasi ucapan

Untuk memanggil layanan Azure Cognitive Service untuk Ucapan dengan menggunakan Speech SDK, Anda perlu membuat instans SpeechConfig. Kelas ini mencakup informasi tentang langganan Anda, seperti kunci dan lokasi/wilayah, titik akhir, host, atau token otorisasi terkait milik Anda.

  1. Buat instans SpeechConfig menggunakan kunci dan lokasi/wilayah Anda.
  2. Buat sumber daya Ucapan di portal Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya multi-layanan.
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");

Anda dapat menginisialisasi SpeechConfig dengan beberapa cara lain:

  • Gunakan titik akhir, dan teruskan titik akhir layanan Ucapan. Token kunci atau otorisasi bersifat opsional.
  • Gunakan host, dan teruskan alamat host. Token kunci atau otorisasi bersifat opsional.
  • Gunakan token otorisasi dengan wilayah/lokasi terkait.

Catatan

Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda selalu membuat konfigurasi.

Mengenali ucapan dari mikrofon

Mengenali ucapan dari mikrofon tidak didukung dalam Node.js. Ini hanya didukung di lingkungan JavaScript berbasis browser. Untuk informasi selengkapnya, lihat sampel React dan implementasi ucapan ke teks dari mikrofon di GitHub. Sampel React menunjukkan pola desain untuk pertukaran dan pengelolaan token autentikasi. Ini juga menunjukkan pengambilan audio dari mikrofon atau file untuk konversi ucapan ke teks.

Catatan

Jika Anda ingin menggunakan perangkat input audio tertentu, Anda perlu menentukan ID perangkat dalam AudioConfig objek. Untuk informasi selengkapnya, lihat Memilih perangkat input audio dengan Speech SDK.

Mengenali ucapan dari file

Untuk mengenali ucapan dari file audio, buat AudioConfig instans dengan menggunakan fromWavFileInput() metode , yang menerima Buffer objek. Lalu menginisialisasi SpeechRecognizer dengan meneruskan audioConfig dan speechConfig.

const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");

function fromFile() {
    let audioConfig = sdk.AudioConfig.fromWavFileInput(fs.readFileSync("YourAudioFile.wav"));
    let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);

    speechRecognizer.recognizeOnceAsync(result => {
        console.log(`RECOGNIZED: Text=${result.text}`);
        speechRecognizer.close();
    });
}
fromFile();

Mengenali ucapan dari stream dalam memori

Untuk banyak kasus penggunaan, data audio Anda kemungkinan berasal dari Azure Blob Storage. Atau sudah dalam memori sebagai ArrayBuffer struktur data mentah atau serupa. Kode berikut:

  • Membuat aliran pendorongan menggunakan createPushStream().
  • Membaca file .wav dengan menggunakan fs.createReadStream untuk tujuan demonstrasi. Jika Anda sudah memiliki data audio di ArrayBuffer, Anda dapat langsung melompat untuk menulis konten ke aliran input.
  • Membuat konfigurasi audio menggunakan aliran pendorongan.
const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");

function fromStream() {
    let pushStream = sdk.AudioInputStream.createPushStream();

    fs.createReadStream("YourAudioFile.wav").on('data', function(arrayBuffer) {
        pushStream.write(arrayBuffer.slice());
    }).on('end', function() {
        pushStream.close();
    });
 
    let audioConfig = sdk.AudioConfig.fromStreamInput(pushStream);
    let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
    speechRecognizer.recognizeOnceAsync(result => {
        console.log(`RECOGNIZED: Text=${result.text}`);
        speechRecognizer.close();
    });
}
fromStream();

Menggunakan aliran push sebagai input mengasumsikan bahwa data audio adalah data modulasi kode pulsa mentah (PCM) yang melewati header apa pun. API masih berfungsi dalam kasus tertentu jika header tidak dilewati. Untuk hasil terbaik, pertimbangkan untuk menerapkan logika untuk membaca header sehingga fs dimulai pada awal data audio.

Menangani kesalahan

Contoh sebelumnya hanya mendapatkan teks yang dikenali dari result.text properti . Untuk menghandel kesalahan dan respons lainnya, Anda perlu menulis beberapa kode untuk menghandel hasilnya. Kode berikut mengevaluasi properti result.reason dan:

  • Menampilkan hasil pengenalan: ResultReason.RecognizedSpeech.
  • Jika tidak ada kecocokan pengenalan, itu memberi tahu pengguna: ResultReason.NoMatch.
  • Jika terjadi kesalahan, kesalahan akan mencetak pesan kesalahan: ResultReason.Canceled.
switch (result.reason) {
    case sdk.ResultReason.RecognizedSpeech:
        console.log(`RECOGNIZED: Text=${result.text}`);
        break;
    case sdk.ResultReason.NoMatch:
        console.log("NOMATCH: Speech could not be recognized.");
        break;
    case sdk.ResultReason.Canceled:
        const cancellation = sdk.CancellationDetails.fromResult(result);
        console.log(`CANCELED: Reason=${cancellation.reason}`);

        if (cancellation.reason == sdk.CancellationReason.Error) {
            console.log(`CANCELED: ErrorCode=${cancellation.ErrorCode}`);
            console.log(`CANCELED: ErrorDetails=${cancellation.errorDetails}`);
            console.log("CANCELED: Did you set the speech resource key and region values?");
        }
        break;
    }

Gunakan pengenalan berkelanjutan

Contoh sebelumnya menggunakan pengenalan satu bidikan, yang mengenali satu ucapan. Akhir dari ujaran tunggal ditentukan dengan mendengarkan keheningan di akhir atau sampai maksimal 15 detik audio diproses.

Sebaliknya, pengenalan berkelanjutan digunakan saat Anda ingin mengontrol kapan harus berhenti mengenali. Pengenalan berkelanjutan mengharuskan Anda berlangganan peristiwa Recognizing, Recognized, dan Canceled untuk mendapatkan hasil pengenalan. Untuk menghentikan pengenalan, Anda harus memanggil stopContinuousRecognitionAsync. Berikut adalah contoh bagaimana pengenalan berkelanjutan dilakukan pada file input audio.

Mulailah dengan mendefinisikan input dan menginisialisasi SpeechRecognizer:

const speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);

Selanjutnya, berlangganan peristiwa yang dikirim dari SpeechRecognizer:

  • recognizing: Sinyal untuk peristiwa yang berisi hasil pengenalan menengah.
  • recognized: Sinyal untuk peristiwa yang berisi hasil pengenalan akhir, yang menunjukkan upaya pengenalan yang berhasil.
  • sessionStopped: Sinyal untuk peristiwa yang menunjukkan akhir sesi pengenalan (operasi).
  • canceled: Sinyal untuk peristiwa yang berisi hasil pengenalan yang dibatalkan. Hasil ini menunjukkan upaya pengenalan yang dibatalkan sebagai akibat dari permintaan pembatalan langsung. Atau, mereka menunjukkan kegagalan transportasi atau protokol.
speechRecognizer.recognizing = (s, e) => {
    console.log(`RECOGNIZING: Text=${e.result.text}`);
};

speechRecognizer.recognized = (s, e) => {
    if (e.result.reason == sdk.ResultReason.RecognizedSpeech) {
        console.log(`RECOGNIZED: Text=${e.result.text}`);
    }
    else if (e.result.reason == sdk.ResultReason.NoMatch) {
        console.log("NOMATCH: Speech could not be recognized.");
    }
};

speechRecognizer.canceled = (s, e) => {
    console.log(`CANCELED: Reason=${e.reason}`);

    if (e.reason == sdk.CancellationReason.Error) {
        console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
        console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
        console.log("CANCELED: Did you set the speech resource key and region values?");
    }

    speechRecognizer.stopContinuousRecognitionAsync();
};

speechRecognizer.sessionStopped = (s, e) => {
    console.log("\n    Session stopped event.");
    speechRecognizer.stopContinuousRecognitionAsync();
};

Setelah semuanya disiapkan, panggil startContinuousRecognitionAsync untuk memulai pengenalan:

speechRecognizer.startContinuousRecognitionAsync();

// Make the following call at some point to stop recognition:
// speechRecognizer.stopContinuousRecognitionAsync();

Mengubah bahasa sumber

Tugas umum pengenalan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan cara mengubah bahasa input menjadi bahasa Italia. Di kode Anda, cari instans SpeechConfig Anda dan tambahkan baris ini tepat di bawahnya:

speechConfig.speechRecognitionLanguage = "it-IT";

Properti speechRecognitionLanguage memperkirakan string format bahasa lokal. Untuk informasi selengkapnya, lihat daftar lokal ucapan ke teks yang didukung.

Identifikasi bahasa

Anda dapat menggunakan identifikasi bahasa dengan pengenalan ucapan ke teks saat Anda perlu mengidentifikasi bahasa dalam sumber audio lalu mentranskripsikan ke teks.

Untuk sampel kode lengkap, lihat Identifikasi bahasa.

Menggunakan titik akhir kustom

Dengan ucapan kustom, Anda dapat mengunggah data Anda sendiri, menguji dan melatih model kustom, membandingkan akurasi antar model, dan menyebarkan model ke titik akhir kustom. Contoh berikut menunjukkan cara mengatur titik akhir kustom.

var speechConfig = SpeechSDK.SpeechConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
var speechRecognizer = new SpeechSDK.SpeechRecognizer(speechConfig);

Menjalankan dan menggunakan kontainer

Kontainer ucapan menyediakan API titik akhir kueri berbasis websocket yang diakses melalui Speech SDK dan Speech CLI. Secara default, Speech SDK dan Speech CLI menggunakan layanan Ucapan publik. Untuk menggunakan kontainer, Anda perlu mengubah metode inisialisasi. Gunakan URL host kontainer alih-alih kunci dan wilayah.

Untuk informasi selengkapnya tentang kontainer, lihat URL Host di Menginstal dan menjalankan kontainer Ucapan dengan Docker.

Dokumentasi referensi | Paket (Unduh) | Sampel Tambahan pada GitHub

Dalam panduan cara ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan ke teks secara real time.

Memasang sampel dan SDK Speech

Repository Azure-Samples/cognitive-services-speech-sdk mengandung sampel tertulis dalam Objective-C untuk iOS dan Mac. Klik link untuk melihat instruksi penginstalan untuk setiap sampel:

Untuk informasi selengkapnya, lihat referensi Speech SDK untuk Objective-C.

Menggunakan titik akhir kustom

Dengan ucapan kustom, Anda dapat mengunggah data Anda sendiri, menguji dan melatih model kustom, membandingkan akurasi antar model, dan menyebarkan model ke titik akhir kustom. Contoh berikut menunjukkan cara mengatur titik akhir kustom:

SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithSubscription:"YourSubscriptionKey" region:"YourServiceRegion"];
speechConfig.endpointId = "YourEndpointId";
SPXSpeechRecognizer* speechRecognizer = [[SPXSpeechRecognizer alloc] init:speechConfig];

Menjalankan dan menggunakan kontainer

Kontainer ucapan menyediakan API titik akhir kueri berbasis websocket yang diakses melalui Speech SDK dan Speech CLI. Secara default, Speech SDK dan Speech CLI menggunakan layanan Ucapan publik. Untuk menggunakan kontainer, Anda perlu mengubah metode inisialisasi. Gunakan URL host kontainer alih-alih kunci dan wilayah.

Untuk informasi selengkapnya tentang kontainer, lihat URL Host di Menginstal dan menjalankan kontainer Ucapan dengan Docker.

Dokumentasi referensi | Paket (Unduh) | Sampel Tambahan pada GitHub

Dalam panduan cara ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan ke teks secara real time.

Memasang sampel dan SDK Speech

Repositori Azure-Samples/cognitive-services-speech-sdk mengandung sampel yang tertulis dalam Swift untuk iOS dan Mac. Klik link untuk melihat instruksi penginstalan untuk setiap sampel:

Untuk informasi selengkapnya, lihat referensi Speech SDK untuk Swift.

Menggunakan titik akhir kustom

Dengan ucapan kustom, Anda dapat mengunggah data Anda sendiri, menguji dan melatih model kustom, membandingkan akurasi antar model, dan menyebarkan model ke titik akhir kustom. Contoh berikut menunjukkan cara mengatur titik akhir kustom:

let speechConfig = SPXSpeechConfiguration(subscription: "YourSubscriptionKey", region: "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
let speechRecognizer = SPXSpeechRecognizer(speechConfiguration: speechConfig);

Menjalankan dan menggunakan kontainer

Kontainer ucapan menyediakan API titik akhir kueri berbasis websocket yang diakses melalui Speech SDK dan Speech CLI. Secara default, Speech SDK dan Speech CLI menggunakan layanan Ucapan publik. Untuk menggunakan kontainer, Anda perlu mengubah metode inisialisasi. Gunakan URL host kontainer alih-alih kunci dan wilayah.

Untuk informasi selengkapnya tentang kontainer, lihat URL Host di Menginstal dan menjalankan kontainer Ucapan dengan Docker.

Dokumentasi referensi | Paket (PyPi) | Sampel Tambahan pada GitHub

Dalam panduan cara ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan ke teks secara real time.

Membuat konfigurasi ucapan

Untuk memanggil layanan Azure Cognitive Service untuk Ucapan dengan menggunakan Speech SDK, Anda perlu membuat instans SpeechConfig. Kelas ini mencakup informasi tentang langganan Anda, seperti kunci ucapan dan lokasi/wilayah, titik akhir, host, atau token otorisasi terkait.

  1. Buat instans SpeechConfig dengan menggunakan kunci ucapan dan lokasi/wilayah Anda.
  2. Buat sumber daya Ucapan di portal Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya multi-layanan.
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")

Anda dapat menginisialisasi SpeechConfig dengan beberapa cara lain:

  • Gunakan titik akhir, dan teruskan titik akhir layanan Ucapan. Kunci ucapan atau token otorisasi bersifat opsional.
  • Gunakan host, dan teruskan alamat host. Kunci ucapan atau token otorisasi bersifat opsional.
  • Gunakan token otorisasi dengan wilayah/lokasi terkait.

Catatan

Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda selalu membuat konfigurasi.

Mengenali ucapan dari mikrofon

Untuk mengenali ucapan menggunakan mikrofon perangkat Anda, cukup buat SpeechRecognizer tanpa meneruskan AudioConfig, dan teruskan speech_config:

import azure.cognitiveservices.speech as speechsdk

def from_mic():
    speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)

    print("Speak into your microphone.")
    result = speech_recognizer.recognize_once_async().get()
    print(result.text)

from_mic()

Jika Anda ingin menggunakan perangkat input audio tertentu, Anda perlu menentukan ID perangkat dalam AudioConfig, dan meneruskannya ke parameter audio_config konstruktor SpeechRecognizer. Untuk informasi selengkapnya tentang cara mendapatkan ID perangkat untuk perangkat input audio Anda, lihat Memilih perangkat input audio dengan Speech SDK

Mengenali ucapan dari file

Jika Anda ingin mengenali ucapan dari file audio sebagai ganti menggunakan mikrofon, buat instans AudioConfig dan gunakan parameter filename:

import azure.cognitiveservices.speech as speechsdk

def from_file():
    speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
    audio_config = speechsdk.AudioConfig(filename="your_file_name.wav")
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

    result = speech_recognizer.recognize_once_async().get()
    print(result.text)

from_file()

Menangani kesalahan

Contoh sebelumnya hanya mendapatkan teks yang dikenali dari result.text properti . Untuk menghandel kesalahan dan respons lainnya, Anda perlu menulis beberapa kode untuk menghandel hasilnya. Kode berikut mengevaluasi properti result.reason dan:

  • Menampilkan hasil pengenalan: speechsdk.ResultReason.RecognizedSpeech.
  • Jika tidak ada kecocokan pengenalan, itu memberi tahu pengguna: speechsdk.ResultReason.NoMatch.
  • Jika terjadi kesalahan, kesalahan akan mencetak pesan kesalahan: speechsdk.ResultReason.Canceled.
if result.reason == speechsdk.ResultReason.RecognizedSpeech:
    print("Recognized: {}".format(result.text))
elif result.reason == speechsdk.ResultReason.NoMatch:
    print("No speech could be recognized: {}".format(result.no_match_details))
elif result.reason == speechsdk.ResultReason.Canceled:
    cancellation_details = result.cancellation_details
    print("Speech Recognition canceled: {}".format(cancellation_details.reason))
    if cancellation_details.reason == speechsdk.CancellationReason.Error:
        print("Error details: {}".format(cancellation_details.error_details))
        print("Did you set the speech resource key and region values?")

Gunakan pengenalan berkelanjutan

Contoh sebelumnya menggunakan pengenalan satu bidikan, yang mengenali satu ucapan. Akhir dari ujaran tunggal ditentukan dengan mendengarkan keheningan di akhir atau sampai maksimal 15 detik audio diproses.

Sebaliknya, Anda menggunakan pengenalan berkelanjutan saat Anda ingin mengontrol kapan ingin berhenti mengenali. Hal ini membutuhkan Anda untuk menyambungkan ke EventSignal untuk mendapatkan hasil pengenalan. Untuk menghentikan pengenalan, Anda harus menghubungi stop_continuous_recognition() atau stop_continuous_recognition(). Berikut adalah contoh bagaimana pengenalan berkelanjutan dilakukan pada file input audio.

Mulailah dengan mendefinisikan input dan menginisialisasi SpeechRecognizer:

audio_config = speechsdk.audio.AudioConfig(filename=weatherfilename)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

Selanjutnya, mari buat variabel untuk mengelola status pengenalan ucapan. Atur variabel ke False karena pada awal pengenalan, Anda dapat dengan aman mengasumsikan bahwa variabel belum selesai:

done = False

Sekarang, kita akan membuat panggilan balik untuk menghentikan pengenalan berkelanjutan ketika evt diterima. Ingat poin-poin ini:

  • Ketika evt diterima, pesan evt akan dicetak.
  • Setelah evt diterima, stop_continuous_recognition() dipanggil untuk menghentikan pengenalan.
  • Status pengenalan diubah menjadi True.
def stop_cb(evt):
    print('CLOSING on {}'.format(evt))
    speech_recognizer.stop_continuous_recognition()
    nonlocal done
    done = True

Sampel kode ini menunjukkan cara menyambungkan panggilan balik ke peristiwa yang dikirim dari SpeechRecognizer. Peristiwa tersebut adalah:

  • recognizing: Sinyal untuk peristiwa yang berisi hasil pengenalan menengah.
  • recognized: Sinyal untuk peristiwa yang berisi hasil pengenalan akhir, yang menunjukkan upaya pengenalan yang berhasil.
  • session_started: Sinyal untuk peristiwa yang menunjukkan dimulainya sesi pengenalan (operasi).
  • session_stopped: Sinyal untuk peristiwa yang menunjukkan akhir sesi pengenalan (operasi).
  • canceled: Sinyal untuk peristiwa yang berisi hasil pengenalan yang dibatalkan. Hasil ini menunjukkan upaya pengenalan yang dibatalkan sebagai akibat dari permintaan pembatalan langsung. Atau, mereka menunjukkan kegagalan transportasi atau protokol.
speech_recognizer.recognizing.connect(lambda evt: print('RECOGNIZING: {}'.format(evt)))
speech_recognizer.recognized.connect(lambda evt: print('RECOGNIZED: {}'.format(evt)))
speech_recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
speech_recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
speech_recognizer.canceled.connect(lambda evt: print('CANCELED {}'.format(evt)))

speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)

Dengan semuanya disiapkan, kita bisa memanggil start_continuous_recognition():

speech_recognizer.start_continuous_recognition()
while not done:
    time.sleep(.5)

Mengubah bahasa sumber

Tugas umum pengenalan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan cara mengubah bahasa input menjadi bahasa Jerman. Di kode Anda, cari instans SpeechConfig Anda dan tambahkan baris ini tepat di bawahnya:

speech_config.speech_recognition_language="de-DE"

speech_recognition_language adalah parameter yang mengambil untai (karakter) sebagai argumen. Untuk informasi selengkapnya, lihat daftar lokal ucapan ke teks yang didukung.

Identifikasi bahasa

Anda dapat menggunakan identifikasi bahasa dengan pengenalan Ucapan ke teks saat Anda perlu mengidentifikasi bahasa dalam sumber audio lalu mentranskripsikan ke teks.

Untuk sampel kode lengkap, lihat Identifikasi bahasa.

Menggunakan titik akhir kustom

Dengan ucapan kustom, Anda dapat mengunggah data Anda sendiri, menguji dan melatih model kustom, membandingkan akurasi antar model, dan menyebarkan model ke titik akhir kustom. Contoh berikut menunjukkan cara mengatur titik akhir kustom.

speech_config = speechsdk.SpeechConfig(subscription="YourSubscriptionKey", region="YourServiceRegion")
speech_config.endpoint_id = "YourEndpointId"
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)

Menjalankan dan menggunakan kontainer

Kontainer ucapan menyediakan API titik akhir kueri berbasis websocket yang diakses melalui Speech SDK dan Speech CLI. Secara default, Speech SDK dan Speech CLI menggunakan layanan Ucapan publik. Untuk menggunakan kontainer, Anda perlu mengubah metode inisialisasi. Gunakan URL host kontainer alih-alih kunci dan wilayah.

Untuk informasi selengkapnya tentang kontainer, lihat URL Host di Menginstal dan menjalankan kontainer Ucapan dengan Docker.

Ucapan ke teks REST API referensi | Ucapan ke teks REST API untuk referensi | audio singkat Sampel Tambahan di GitHub

Dalam panduan cara ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan ke teks secara real time.

Mengonversi ucapan menjadi teks

Pada perintah, jalankan perintah berikut ini. Anda harus menyisipkan nilai berikut ke dalam perintah:

  • Kunci langganan Anda untuk layanan Ucapan.
  • Wilayah layanan Ucapan Anda.
  • Jalur untuk memasukkan file audio. Anda dapat membuat file audio dengan menggunakan teks ke ucapan.
curl --location --request POST 'https://INSERT_REGION_HERE.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US' \
--header 'Ocp-Apim-Subscription-Key: INSERT_SUBSCRIPTION_KEY_HERE' \
--header 'Content-Type: audio/wav' \
--data-binary @'INSERT_AUDIO_FILE_PATH_HERE'

Anda harus menerima respons dengan isi JSON seperti contoh berikut:

{
    "RecognitionStatus": "Success",
    "DisplayText": "My voice is my passport, verify me.",
    "Offset": 6600000,
    "Duration": 32100000
}

Untuk informasi selengkapnya, lihat referensi REST API Ucapan ke teks.

Dalam panduan cara ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan ke teks secara real time.

Mengenali ucapan dari mikrofon

Colokkan dan nyalakan mikrofon PC Anda. Matikan aplikasi apa pun yang mungkin juga menggunakan mikrofon. Beberapa komputer memiliki mikrofon internal, sementara yang lain memerlukan konfigurasi perangkat Bluetooth.

Sekarang, Anda siap untuk menjalankan Speech CLI untuk mengenali ucapan dari mikrofon Anda. Dari baris perintah, ubah ke direktori yang berisi file biner Speech CLI. Kemudian, jalankan perintah berikut:

spx recognize --microphone

Catatan

Speech CLI default ke bahasa Inggris. Anda dapat memilih bahasa yang berbeda dari tabel ucapan ke teks. Misalnya, tambahkan --source de-DE untuk mengenali pidato Bahasa Jerman.

Bicaralah ke mikrofon, dan Anda dapat melihat transkripsi kata-kata Anda ke dalam teks secara real-time. Speech CLI berhenti setelah periode keheningan, atau saat Anda memilih Ctrl+C.

Mengenali ucapan dari file

Speech CLI dapat mengenali ucapan dalam banyak format file dan bahasa alami. Dalam contoh ini, Anda dapat menggunakan file .wav apa pun (16 KHz atau 8 KHz, 16-bit, dan mono PCM) yang berisi ucapan bahasa Inggris. Atau jika Anda menginginkan sampel cepat, unduh file whatstheweatherlike.wav , dan salin ke direktori yang sama dengan file biner Speech CLI.

Gunakan perintah berikut untuk menjalankan Speech CLI untuk mengenali ucapan yang ditemukan dalam file audio:

spx recognize --file whatstheweatherlike.wav

Catatan

Speech CLI default ke bahasa Inggris. Anda dapat memilih bahasa yang berbeda dari tabel ucapan ke teks. Misalnya, tambahkan --source de-DE untuk mengenali pidato Bahasa Jerman.

Speech CLI akan menampilkan transkripsi teks ucapan di layar.

Menjalankan dan menggunakan kontainer

Kontainer ucapan menyediakan API titik akhir kueri berbasis websocket yang diakses melalui Speech SDK dan Speech CLI. Secara default, Speech SDK dan Speech CLI menggunakan layanan Ucapan publik. Untuk menggunakan kontainer, Anda perlu mengubah metode inisialisasi. Gunakan URL host kontainer alih-alih kunci dan wilayah.

Untuk informasi selengkapnya tentang kontainer, lihat URL Host di Menginstal dan menjalankan kontainer Ucapan dengan Docker.

Langkah berikutnya