Cara mengenali ucapan
Dokumentasi referensi | Paket (NuGet) | Sampel Tambahan pada GitHub
Dalam panduan ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan manusia (sering disebut ucapan ke teks).
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.
Buat instans SpeechConfig menggunakan kunci dan lokasi/wilayah Anda. Buat sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya Azure Cognitive Services baru.
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("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
}
}
Anda dapat menginisialisasi SpeechConfig dengan beberapa cara lain:
- Dengan titik akhir: teruskan ke titik akhir layanan Ucapan. Token kunci atau otorisasi bersifat opsional.
- Dengan host: teruskan di alamat host. Token kunci atau otorisasi bersifat opsional.
- Dengan token otorisasi: teruskan token otorisasi dan lokasi/wilayah 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 menggunakan mikrofon perangkat Anda, buat instans AudioConfig menggunakan FromDefaultMicrophoneInput(). Lalu menginisialisasi SpeechRecognizer dengan meneruskan audioConfig dan speechConfig.
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 recognizer = new SpeechRecognizer(speechConfig, audioConfig);
Console.WriteLine("Speak into your microphone.");
var result = await recognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={result.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
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 alih-alih menelepon FromDefaultMicrophoneInput(), Anda menelepon 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 recognizer = new SpeechRecognizer(speechConfig, audioConfig);
var result = await recognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={result.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
await FromFile(speechConfig);
}
}
Mengenali ucapan dari stream dalam memori
Untuk banyak kasus penggunaan, kemungkinan data audio Anda akan berasal dari penyimpanan blob atau akan berada dalam memori sebagai byte[] contoh atau struktur data mentah yang serupa. Contoh berikut menggunakan sebuah PushAudioInputStream untuk mengenali ucapan, yang pada dasarnya merupakan aliran memori abstrak. Contoh kode melakukan hal berikut:
- Menulis data audio mentah (PCM) ke
PushAudioInputStreammenggunakan fungsiWrite(), yang menerima instansbyte[]. - Membaca file dengan
.wavmenggunakanFileReaderuntuk tujuan demonstrasi. Jika Anda telah mempunyai data audio di instansbyte[], Anda dapat langsung menulis konten ke aliran input. - Format defaultnya adalah 16-bit, 16-KHz mono PCM. Untuk mengustomisasi format, Anda dapat meneruskan objek
AudioStreamFormatkeCreatePushStream()menggunakan fungsi statisAudioStreamFormat.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 audioInputStream = AudioInputStream.CreatePushStream();
using var audioConfig = AudioConfig.FromStreamInput(audioInputStream);
using var recognizer = new SpeechRecognizer(speechConfig, audioConfig);
byte[] readBytes;
do
{
readBytes = reader.ReadBytes(1024);
audioInputStream.Write(readBytes, readBytes.Length);
} while (readBytes.Length > 0);
var result = await recognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={result.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
await FromStream(speechConfig);
}
}
Menggunakan aliran pendorongan sebagai input mengasumsikan bahwa data audio adalah PCM mentah dan melewatkan header apa pun. API akan tetap berfungsi dalam kasus-kasus tertentu jika header belum dilewati. Namun, untuk hasil terbaik, pertimbangkan menerapkan logic untuk mengejakan header sehingga byte[] dimulai di permulaan data audio.
Menangani kesalahan
Contoh sebelumnya hanya mendapatkan teks yang dikenali dari result.text. 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, beri tahu pengguna:
ResultReason.NoMatch. - Jika ditemukan kesalahan, cetak 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 satu ucapan ditentukan dengan mendengarkan keheningan di akhir atau hingga maksimum 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 recognizer = 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 berikut ini mengindikasikan percobaan yang dibatalkan sebagai tataan hasil atau permintaan pembatalan langsung. Atau, mereka menunjukkan kegagalan transportasi atau protokol.
recognizer.Recognizing += (s, e) =>
{
Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
};
recognizer.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.");
}
};
recognizer.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);
};
recognizer.SessionStopped += (s, e) =>
{
Console.WriteLine("\n Session stopped event.");
stopRecognition.TrySetResult(0);
};
Setelah semuanya disiapkan, panggil StartContinuousRecognitionAsync untuk memulai pengenalan:
await recognizer.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 recognizer.StopContinuousRecognitionAsync();
Mode dikte
Saat menggunakan pengenalan berkelanjutan, Anda dapat mengaktifkan pemrosesan dikte menggunakan fungsi "aktifkan dikte" yang sesuai. Mode ini akan membuat instans konfigurasi ucapan menafsirkan deskripsi kata dari struktur kalimat seperti tanda baca. Misalnya, ujaran "Apakah Anda tinggal di kota tanda tanya" akan ditafsirkan sebagai teks "Apakah Anda tinggal di kota?".
Untuk mengaktifkan mode dikte, gunakan metode EnableDictation pada SpeechConfig:
speechConfig.EnableDictation();
Mengubah bahasa sumber
Tugas umum pengenalan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan 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. Anda dapat menyediakan nilai apa pun di kolom Lokal di daftar lokal/bahasa yang didukung.
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);
Dokumentasi referensi | Paket (NuGet) | Sampel Tambahan pada GitHub
Dalam panduan ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan manusia (sering disebut ucapan ke teks).
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.
Buat instans SpeechConfig dengan menggunakan kunci dan wilayah Anda. Buat sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya Azure Cognitive Services baru.
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
auto config = SpeechConfig::FromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
Anda dapat menginisialisasi SpeechConfig dengan beberapa cara lain:
- Dengan titik akhir: teruskan ke titik akhir layanan Ucapan. Token kunci atau otorisasi bersifat opsional.
- Dengan host: teruskan di alamat host. Token kunci atau otorisasi bersifat opsional.
- Dengan token otorisasi: teruskan token otorisasi dan wilayah 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 menggunakan mikrofon perangkat Anda, buat instans AudioConfig menggunakan FromDefaultMicrophoneInput(). Lalu menginisialisasi SpeechRecognizer dengan meneruskan audioConfig dan config.
using namespace Microsoft::CognitiveServices::Speech::Audio;
auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
auto recognizer = SpeechRecognizer::FromConfig(config, audioConfig);
cout << "Speak into your microphone." << std::endl;
auto result = recognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;
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 menggunakan mikrofon, Anda masih perlu membuat AudioConfig instans. Tetapi alih-alih menelepon FromDefaultMicrophoneInput(), Anda menelepon FromWavFileInput() dan meneruskan jalur file:
using namespace Microsoft::CognitiveServices::Speech::Audio;
auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto recognizer = SpeechRecognizer::FromConfig(config, audioInput);
auto result = recognizer->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 = recognizer->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, beri tahu pengguna:
ResultReason::NoMatch. - Jika ditemukan kesalahan, cetak 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 audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto recognizer = SpeechRecognizer::FromConfig(config, audioInput);
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 berikut ini mengindikasikan percobaan yang dibatalkan sebagai tataan hasil atau permintaan pembatalan langsung. Atau, mereka menunjukkan kegagalan transportasi atau protokol.
recognizer->Recognizing.Connect([](const SpeechRecognitionEventArgs& e)
{
cout << "Recognizing:" << e.Result->Text << std::endl;
});
recognizer->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;
}
});
recognizer->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.
}
});
recognizer->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.
recognizer->StartContinuousRecognitionAsync().get();
// Waits for recognition end.
recognitionEnd.get_future().get();
// Stops recognition.
recognizer->StopContinuousRecognitionAsync().get();
Mode dikte
Saat menggunakan pengenalan berkelanjutan, Anda dapat mengaktifkan pemrosesan dikte menggunakan fungsi "aktifkan dikte" yang sesuai. Mode ini akan membuat instans konfigurasi ucapan menafsirkan deskripsi kata dari struktur kalimat seperti tanda baca. Misalnya, ujaran "Apakah Anda tinggal di kota tanda tanya" akan ditafsirkan sebagai teks "Apakah Anda tinggal di kota?".
Untuk mengaktifkan mode dikte, gunakan metode EnableDictation pada SpeechConfig:
config->EnableDictation();
Mengubah bahasa sumber
Tugas umum pengenalan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan mengubah bahasa input menjadi bahasa Jerman. Di kode Anda, cari instans SpeechConfig Anda dan tambahkan baris ini tepat di bawahnya:
config->SetSpeechRecognitionLanguage("de-DE");
SetSpeechRecognitionLanguage adalah parameter yang mengambil untai (karakter) sebagai argumen. Anda dapat memberikan nilai apa pun di daftar lokal/bahasa yang didukung.
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);
Dokumentasi referensi | Paket (Go) | Sampel Tambahan pada GitHub
Dalam panduan ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan manusia (sering disebut ucapan ke teks).
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 Azure Cognitive Service untuk Ucapan di portal Microsoft Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya Azure Cognitive Services baru. Menjalankan skrip akan 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 := "<paste-your-speech-key-here>"
region := "<paste-your-speech-location/region-here>"
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 Azure Cognitive Service untuk Ucapan di portal Microsoft Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya Azure Cognitive Services baru. Selain itu, ganti variabel file dengan jalur ke file a .wav. Menjalankan skrip akan 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 := "<paste-your-speech-key-here>"
region := "<paste-your-speech-location/region-here>"
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.
Dokumentasi referensi | Sampel Tambahan pada GitHub
Dalam panduan ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan manusia (sering disebut ucapan ke teks).
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.
Buat instans SpeechConfig menggunakan kunci dan lokasi/wilayah Anda. Buat sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya Azure Cognitive Services baru.
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:
- Dengan titik akhir: teruskan ke titik akhir layanan Ucapan. Token kunci atau otorisasi bersifat opsional.
- Dengan host: teruskan di alamat host. Token kunci atau otorisasi bersifat opsional.
- Dengan token otorisasi: teruskan token otorisasi dan wilayah 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 menggunakan mikrofon perangkat Anda, buat instans AudioConfig menggunakan fromDefaultMicrophoneInput(). Lalu menginisialisasi SpeechRecognizer dengan meneruskan 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 recognizer = new SpeechRecognizer(speechConfig, audioConfig);
System.out.println("Speak into your microphone.");
Future<SpeechRecognitionResult> task = recognizer.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. Pelajari cara mendapatkan ID perangkat untuk perangkat input audio Anda.
Mengenali ucapan dari file
Jika Anda ingin mengenali ucapan dari file audio alih-alih menggunakan mikrofon, Anda masih perlu membuat AudioConfig instans. Tetapi alih-alih menelepon fromDefaultMicrophoneInput(), Anda menelepon 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 recognizer = new SpeechRecognizer(speechConfig, audioConfig);
Future<SpeechRecognitionResult> task = recognizer.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, beri tahu pengguna:
ResultReason.NoMatch. - Jika ditemukan kesalahan, cetak 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 satu ucapan ditentukan dengan mendengarkan keheningan di akhir atau hingga maksimum 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:
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer recognizer = 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 berikut ini mengindikasikan percobaan yang dibatalkan sebagai tataan hasil atau permintaan pembatalan langsung. Atau, mereka menunjukkan kegagalan transportasi atau protokol.
// First initialize the semaphore.
stopTranslationWithFileSemaphore = new Semaphore(0);
recognizer.recognizing.addEventListener((s, e) -> {
System.out.println("RECOGNIZING: Text=" + e.getResult().getText());
});
recognizer.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.");
}
});
recognizer.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();
});
recognizer.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.
recognizer.startContinuousRecognitionAsync().get();
// Waits for completion.
stopTranslationWithFileSemaphore.acquire();
// Stops recognition.
recognizer.stopContinuousRecognitionAsync().get();
Mode dikte
Saat menggunakan pengenalan berkelanjutan, Anda dapat mengaktifkan pemrosesan dikte menggunakan fungsi "aktifkan dikte" yang sesuai. Mode ini akan membuat instans konfigurasi ucapan menafsirkan deskripsi kata dari struktur kalimat seperti tanda baca. Misalnya, ujaran "Apakah Anda tinggal di kota tanda tanya" akan ditafsirkan sebagai teks "Apakah Anda tinggal di kota?".
Untuk mengaktifkan mode dikte, gunakan metode enableDictation pada SpeechConfig:
config.enableDictation();
Mengubah bahasa sumber
Tugas umum pengenalan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan mengubah bahasa input menjadi bahasa Prancis. Di kode Anda, cari instans SpeechConfig Anda dan tambahkan baris ini tepat di bawahnya:
config.setSpeechRecognitionLanguage("fr-FR");
setSpeechRecognitionLanguage adalah parameter yang mengambil untai (karakter) sebagai argumen. Anda dapat memberikan nilai apa pun di daftar lokal/bahasa yang didukung.
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);
Dokumentasi referensi | Paket (npm) | Sampel Tambahan pada kode sumber GitHub | Library
Dalam panduan ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan manusia (sering disebut ucapan ke teks).
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.
Buat instans SpeechConfig menggunakan kunci dan lokasi/wilayah Anda. Buat sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya Azure Cognitive Services baru.
const speechConfig = sdk.SpeechConfig.fromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
Anda dapat menginisialisasi SpeechConfig dengan beberapa cara lain:
- Dengan titik akhir: teruskan ke titik akhir layanan Ucapan. Token kunci atau otorisasi bersifat opsional.
- Dengan host: teruskan di alamat host. Token kunci atau otorisasi bersifat opsional.
- Dengan token otorisasi: teruskan token otorisasi dan lokasi/wilayah terkait.
Catatan
Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda akan selalu membuat konfigurasi.
Mengenali ucapan dari mikrofon
Mengenali ucapan dari mikrofon tidak didukung di Node.js. Ini hanya didukung di lingkungan JavaScript berbasis browser. Untuk informasi selengkapnya, lihat sampel React dan penerapan 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 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
Untuk mengenali ucapan dari file audio, buat instans AudioConfig menggunakan fromWavFileInput(), yang menerima objek Buffer. Lalu menginisialisasi SpeechRecognizer dengan meneruskan audioConfig dan speechConfig.
const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
function fromFile() {
let audioConfig = sdk.AudioConfig.fromWavFileInput(fs.readFileSync("YourAudioFile.wav"));
let recognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
recognizer.recognizeOnceAsync(result => {
console.log(`RECOGNIZED: Text=${result.text}`);
recognizer.close();
});
}
fromFile();
Mengenali ucapan dari stream dalam memori
Untuk banyak kasus penggunaan, data audio Anda kemungkinan akan berasal dari penyimpanan blob. Atau sudah akan ada dalam memori sebagai ArrayBuffer atau struktur data mentah serupa. Kode berikut:
- Membuat aliran pendorongan menggunakan
createPushStream(). - Membaca file .wav dengan menggunakan
fs.createReadStreamuntuk tujuan demonstrasi. Jika Anda telah mempunyai data audio diArrayBuffer, Anda dapat langsung 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("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
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 recognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
recognizer.recognizeOnceAsync(result => {
console.log(`RECOGNIZED: Text=${result.text}`);
recognizer.close();
});
}
fromStream();
Menggunakan aliran pendorongan sebagai input mengasumsikan bahwa data audio adalah PCM mentah, mis. melewatkan header apa pun. API akan tetap berfungsi dalam kasus-kasus tertentu jika header belum dilewati. Namun, untuk hasil terbaik, pertimbangkan menerapkan logic untuk mengejakan header sehingga fs dimulai di permulaan data audio.
Menangani kesalahan
Contoh sebelumnya hanya mendapatkan teks yang dikenali dari result.text. 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, beri tahu pengguna:
ResultReason.NoMatch. - Jika ditemukan kesalahan, cetak 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 satu ucapan ditentukan dengan mendengarkan keheningan di akhir atau hingga maksimum 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 recognizer = 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 berikut ini mengindikasikan percobaan yang dibatalkan sebagai tataan hasil atau permintaan pembatalan langsung. Atau, mereka menunjukkan kegagalan transportasi atau protokol.
recognizer.recognizing = (s, e) => {
console.log(`RECOGNIZING: Text=${e.result.text}`);
};
recognizer.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.");
}
};
recognizer.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?");
}
recognizer.stopContinuousRecognitionAsync();
};
recognizer.sessionStopped = (s, e) => {
console.log("\n Session stopped event.");
recognizer.stopContinuousRecognitionAsync();
};
Setelah semuanya disiapkan, panggil startContinuousRecognitionAsync untuk memulai pengenalan:
recognizer.startContinuousRecognitionAsync();
// Make the following call at some point to stop recognition:
// recognizer.stopContinuousRecognitionAsync();
Mode dikte
Saat menggunakan pengenalan berkelanjutan, Anda dapat mengaktifkan pemrosesan dikte menggunakan fungsi "aktifkan dikte" yang sesuai. Mode ini akan membuat instans konfigurasi ucapan menafsirkan deskripsi kata dari struktur kalimat seperti tanda baca. Misalnya, ujaran "Apakah Anda tinggal di kota tanda tanya" akan ditafsirkan sebagai teks "Apakah Anda tinggal di kota?".
Untuk mengaktifkan mode dikte, gunakan metode enableDictation pada SpeechConfig:
speechConfig.enableDictation();
Mengubah bahasa sumber
Tugas umum pengenalan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan 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. Anda dapat menyediakan nilai apa pun di kolom Lokal di daftar lokal/bahasa yang didukung.
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);
Dokumentasi referensi | Paket (Unduh) | Sampel Tambahan pada GitHub
Dalam panduan ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan manusia (sering disebut ucapan ke teks).
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:
- Mengenali ucapan dari mikrofon di Objective-C di macOS
- Mengenali ucapan di Objective-C pada iOS
- Sampel tambahan untuk Objective-C di iOS
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];
Dokumentasi referensi | Paket (Unduh) | Sampel Tambahan pada GitHub
Dalam panduan ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan manusia (sering disebut ucapan ke teks).
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);
Dokumentasi referensi | Paket (PyPi) | Sampel Tambahan pada GitHub
Dalam panduan ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan manusia (sering disebut ucapan ke teks).
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.
Buat instans SpeechConfig dengan menggunakan kunci ucapan dan lokasi/wilayah Anda. Buat sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya Azure Cognitive Services baru.
speech_config = speechsdk.SpeechConfig(subscription="<paste-your-speech-key-here>", region="<paste-your-speech-location/region-here>")
Anda dapat menginisialisasi SpeechConfig dengan beberapa cara lain:
- Dengan titik akhir: teruskan ke titik akhir layanan Ucapan. Kunci ucapatan atau token otorisasi bersifat opsional.
- Dengan host: teruskan di alamat host. Kunci ucapatan atau token otorisasi bersifat opsional.
- Dengan token otorisasi: teruskan token otorisasi dan wilayah 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 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="<paste-your-speech-key-here>", region="<paste-your-speech-location/region-here>")
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. Pelajari cara mendapatkan ID perangkat untuk perangkat input audio Anda.
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="<paste-your-speech-key-here>", region="<paste-your-speech-location/region-here>")
audio_input = speechsdk.AudioConfig(filename="your_file_name.wav")
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_input)
result = speech_recognizer.recognize_once_async().get()
print(result.text)
from_file()
Menangani kesalahan
Contoh sebelumnya hanya mendapatkan teks yang dikenali dari result.text. 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, beri tahu pengguna:
speechsdk.ResultReason.NoMatch. - Jika ditemukan kesalahan, cetak 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 satu ucapan ditentukan dengan mendengarkan keheningan di akhir atau hingga maksimum 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 karena False pada awal pengenalan, Anda dapat dengan aman berasumsi bahwa itu belum selesai.
done = False
Sekarang, kita akan membuat panggilan balik untuk menghentikan pengenalan berkelanjutan ketika evt diterima. Ingat poin-poin ini:
- Ketika
evtditerima, pesanevtakan dicetak. - Setelah
evtditerima, 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 berikut ini mengindikasikan percobaan yang dibatalkan sebagai tataan hasil atau 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)
Mode dikte
Saat menggunakan pengenalan berkelanjutan, Anda dapat mengaktifkan pemrosesan dikte menggunakan fungsi "aktifkan dikte" yang sesuai. Mode ini akan membuat instans konfigurasi ucapan menafsirkan deskripsi kata dari struktur kalimat seperti tanda baca. Misalnya, ujaran "Apakah Anda tinggal di kota tanda tanya" akan ditafsirkan sebagai teks "Apakah Anda tinggal di kota?".
Untuk mengaktifkan mode dikte, gunakan metode enable_dictation() pada SpeechConfig:
SpeechConfig.enable_dictation()
Mengubah bahasa sumber
Tugas umum pengenalan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan 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. Anda dapat memberikan nilai apa pun di daftar lokal/bahasa yang didukung.
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)
Referensi REST API ucapan ke teks v3.0 | REST API ucapan ke teks untuk referensi audio singkat | Contoh Tambahan di GitHub
Dalam panduan ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan manusia (sering disebut ucapan ke teks).
Mengonversi ucapan menjadi teks
Pada perintah, jalankan perintah berikut ini. Anda harus menyisipkan nilai berikut ke dalam perintah:
- Kunci langganan Anda untuk layanan Azure Cognitive Service untuk Ucapan.
- Wilayah layanan Speech Anda.
- Jalur untuk memasukkan file audio. Anda dapat membuat file audio 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 akan menerima respons dengan badan JSON seperti 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 ini, Anda mempelajari cara mengenali dan mentranskripsikan ucapan manusia (sering disebut ucapan ke teks).
Ucapan ke teks 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 lain dari tabel ucapan ke teks. Misalnya, tambahkan --source de-DE untuk mengenali pidato Bahasa Jerman.
Bicaralah ke mikrofon, dan Anda melihat transkripsi kata-kata Anda ke dalam teks secara real time. Speech CLI akan berhenti setelah periode keheningan, atau saat Anda menekan ctrl-C.
Ucapan ke teks dari file audio
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 ingin 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 lain dari tabel ucapan ke teks. Misalnya, tambahkan --source de-DE untuk mengenali pidato Bahasa Jerman.
Speech CLI akan menampilkan transkripsi teks ucapan di layar.