Konuşmayı algılama
Başvuru belgeleri | Paketi (NuGet) | GitHub'da ek örnekler
Bu nasıl yapılır kılavuzunda, gerçek zamanlı konuşmayı metne dönüştürme için Azure AI Konuşma'yı kullanmayı öğreneceksiniz. Gerçek zamanlı konuşma tanıma, dikte, çağrı merkezi yardımı ve canlı toplantılar için açıklamalı alt yazı gibi anında transkripsiyon gerektiren uygulamalar için idealdir.
Örnek bir uygulama için ortamı ayarlamayı öğrenmek için bkz . Hızlı Başlangıç: Konuşmayı tanıma ve metne dönüştürme.
Konuşma yapılandırma örneği oluşturma
Konuşma SDK'sını kullanarak Konuşma hizmetini çağırmak için bir SpeechConfig
örnek oluşturmanız gerekir. Bu sınıf, anahtarınız ve ilişkili bölgeniz, uç noktanız, konağınız veya yetkilendirme belirteciniz gibi aboneliğinizle ilgili bilgileri içerir.
- Azure portalında konuşma kaynağı oluşturun. Konuşma kaynak anahtarını ve bölgesini alın.
- Aşağıdaki kodu kullanarak bir
SpeechConfig
örnek oluşturun. veYourSpeechRegion
değerini Konuşma kaynak anahtarınız ve bölgenizle değiştirinYourSpeechKey
.
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");
}
}
Birkaç farklı yolla başlatabilirsiniz SpeechConfig
:
- Uç nokta kullanın ve Konuşma hizmeti uç noktasını geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Bir konak kullanın ve bir konak adresi geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- İlişkili bölge/konum ile yetkilendirme belirteci kullanın.
Not
Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.
Mikrofondan konuşmayı tanıma
Cihaz mikrofonunuzu kullanarak konuşmayı tanımak için yöntemini kullanarak FromDefaultMicrophoneInput()
bir AudioConfig
örnek oluşturun. Ardından ve audioConfig
geçirerek speechConfig
nesnesini başlatınSpeechRecognizer
.
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 speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromMic(speechConfig);
}
}
Belirli bir ses giriş cihazı kullanmak istiyorsanız, içinde cihaz kimliğini AudioConfig
belirtmeniz gerekir. Cihaz kimliğini nasıl alacağınızı öğrenmek için bkz . Konuşma SDK'sı ile ses giriş cihazı seçme.
Dosyadan konuşma tanıma
Konuşmayı mikrofon yerine ses dosyasından tanımak istiyorsanız yine de bir AudioConfig
örnek oluşturmanız gerekir. Ancak, aramazsınız FromDefaultMicrophoneInput()
. Çağırıp FromWavFileInput()
dosya yolunu geçirirsiniz:
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 speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromFile(speechConfig);
}
}
Bellek içi akıştan konuşma tanıma
Çoğu kullanım örneğinde, ses verilerinizin Azure Blob Depolama veya başka bir şekilde örnek veya benzer bir byte[]
ham veri yapısı olarak bellekte olması olasıdır. Aşağıdaki örnek, temelde soyut bir bellek akışı olan konuşmayı tanımak için kullanır PushAudioInputStream
. Örnek kod aşağıdaki eylemleri gerçekleştirir:
- Bir örneği kabul
byte[]
eden işlevini kullanarakWrite()
ham ses verilerini 'aPushAudioInputStream
yazar. - Tanıtım amacıyla kullanarak
FileReader
bir .wav dosyasını okur. Bir örnektebyte[]
zaten ses verileriniz varsa, içeriği doğrudan giriş akışına yazmaya atlayabilirsiniz. - Varsayılan biçim 16 bit, 16 kHz mono pulse-code modülasyonu (PCM) verileridir. Biçimi özelleştirmek için, statik işlevini
AudioStreamFormat.GetWaveFormatPCM(sampleRate, (byte)bitRate, (byte)channels)
kullanarak birAudioStreamFormat
nesneyi 'yeCreatePushStream()
geçirebilirsiniz.
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 speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromStream(speechConfig);
}
}
Giriş olarak bir anında iletme akışının kullanılması, ses verilerinin ham PCM olduğunu varsayar ve üst bilgileri atlar. Üst bilgi atlanmadıysa API bazı durumlarda çalışmaya devam ediyor. En iyi sonuçları elde etmek için, ses verilerinin başlangıcında başlayacak şekilde byte[]
üst bilgileri okumak için mantık uygulamayı göz önünde bulundurun.
Hataları işleme
Önceki örnekler yalnızca özelliğinden speechRecognitionResult.Text
tanınan metni alır. Hataları ve diğer yanıtları işlemek için, sonucu işlemek için bazı kodlar yazmanız gerekir. Aşağıdaki kod özelliğini değerlendirir speechRecognitionResult.Reason
ve:
- Tanıma sonucunu yazdırır:
ResultReason.RecognizedSpeech
. - Tanıma eşleşmesi yoksa kullanıcıyı bilgilendirir:
ResultReason.NoMatch
. - Bir hatayla karşılaşırsanız, şu hata iletisini yazdırır:
ResultReason.Canceled
.
switch (speechRecognitionResult.Reason)
{
case ResultReason.RecognizedSpeech:
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
break;
case ResultReason.NoMatch:
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
break;
case ResultReason.Canceled:
var cancellation = CancellationDetails.FromResult(speechRecognitionResult);
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;
}
Sürekli tanımayı kullanma
Önceki örneklerde tek bir ifadeyi tanıyan tek çekimli tanıma kullanılır. Tek bir konuşmanın sonu, sonunda veya en fazla 15 saniyelik ses işlenene kadar sessizliği dinleyerek belirlenir.
Buna karşılık, tanımanın ne zaman durdurulacağını denetlemek istediğinizde sürekli tanıma kullanırsınız. Tanıma sonuçlarını almak için Recognizing
, Recognized
ve Canceled
olaylarına abone olmanız gerekir. Tanımayı durdurmak için öğesini çağırmalısınız StopContinuousRecognitionAsync
. Aşağıda, bir ses giriş dosyasında sürekli tanımanın nasıl gerçekleştirildiğini gösteren bir örnek verilmiştir.
Girişi tanımlayıp başlatarak SpeechRecognizer
başlayın:
using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Ardından konuşma tanıma durumunu yönetmek için bir TaskCompletionSource<int>
örnek oluşturun:
var stopRecognition = new TaskCompletionSource<int>();
Ardından, gönderen SpeechRecognizer
olaylara abone olun:
Recognizing
: Ara tanıma sonuçları içeren olaylar için sinyal.Recognized
: Başarılı bir tanıma girişimini gösteren son tanıma sonuçlarını içeren olaylar için sinyal.SessionStopped
: Tanıma oturumunun (işlem) sonunu gösteren olaylar için sinyal.Canceled
: İptal edilen tanıma sonuçlarını içeren olaylar için sinyal. Bu sonuçlar, doğrudan iptal isteğinin sonucu olarak iptal edilen bir tanıma girişimini gösterir. Alternatif olarak, bir aktarım veya protokol hatası olduğunu gösterirler.
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);
};
Her şey ayarlandıktan sonra şunları tanımaya başlamak için arayın StartContinuousRecognitionAsync
:
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();
Kaynak dili değiştirme
Konuşma tanıma için sık kullanılan bir görev, giriş (veya kaynak) dilini belirtmektir. Aşağıdaki örnekte giriş dilinin İtalyanca olarak nasıl değiştireceği gösterilmektedir. Kodunuzda örneğinizi SpeechConfig
bulun ve bu satırı doğrudan altına ekleyin:
speechConfig.SpeechRecognitionLanguage = "it-IT";
SpeechRecognitionLanguage
özelliği bir dil-yerel ayar biçim dizesi bekler. Desteklenen yerel ayarların listesi için bkz . Konuşma hizmeti için dil ve ses desteği.
Dil belirleme
Bir ses kaynağında dili tanımlamanız ve ardından metne dönüştürmeniz gerektiğinde, konuşmadan metin tanımaya dil tanımlama özelliğini kullanabilirsiniz.
Eksiksiz bir kod örneği için bkz . Dil belirleme.
Özel uç nokta kullanma
Özel konuşma ile kendi verilerinizi karşıya yükleyebilir, özel bir modeli test edebilir ve eğitebilir, modeller arasındaki doğruluğu karşılaştırabilir ve modeli özel uç noktaya dağıtabilirsiniz. Aşağıdaki örnekte özel uç noktanın nasıl ayarlanacağı gösterilmektedir.
var speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.EndpointId = "YourEndpointId";
var speechRecognizer = new SpeechRecognizer(speechConfig);
Kapsayıcı çalıştırma ve kullanma
Konuşma kapsayıcıları, Konuşma SDK'sı ve Konuşma CLI'sı aracılığıyla erişilen websocket tabanlı sorgu uç noktası API'leri sağlar. Varsayılan olarak, Konuşma SDK'sı ve Konuşma CLI'sı genel Konuşma hizmetini kullanır. Kapsayıcıyı kullanmak için başlatma yöntemini değiştirmeniz gerekir. Anahtar ve bölge yerine kapsayıcı ana bilgisayar URL'si kullanın.
Kapsayıcılar hakkında daha fazla bilgi için bkz. Docker ile Konuşma kapsayıcılarını yükleme ve çalıştırma makalesindeki Konak URL'leri.
Sessizliğin nasıl işleneceğini değiştirme
Bir kullanıcı normalden daha hızlı veya yavaş konuşuyorsa, giriş sesindeki sessiz sessizliğe yönelik varsayılan davranışlar beklediğiniz sonuçla sonuçlanamayabilir. Sessizlik işlemeyle ilgili yaygın sorunlar şunlardır:
- Birçok cümleyi tek bir tanıma sonucuna zincirleyen hızlı konuşma, cümleleri tek tek sonuçlara bölmek yerine.
- Tek bir cümlenin parçalarını birden çok sonuce ayıran yavaş konuşma.
- Konuşmanın başlamasını beklerken çok hızlı biten tek seferlik bir tanıma.
Bu sorunlar, oluşturmak SpeechRecognizer
için kullanılan örnekteki iki zaman aşımı özelliğinden SpeechConfig
biri ayarlanarak giderilebilir:
- Segmentasyon sessizliği zaman aşımı , söz konusu tümcecik "bitti" olarak kabul edilmeden önce şu anda konuşulan bir tümcecik içinde ne kadar kesintisiz sese izin verildiğini ayarlar.
- Daha yüksek değerler genellikle sonuçları daha uzun hale getirir ve bir tümcecik içinde konuşmacıdan daha uzun duraklamalar sağlar, ancak sonuçların gelmesi daha uzun sürer. Ayrıca, çok yüksek ayarlandığında ayrı tümcecikleri tek bir sonuçta birleştirebilirler.
- Düşük değerler genellikle sonuçları kısaltır ve tümcecikler arasında daha fazla istem ve sık kesme olmasını sağlar, ancak çok düşük ayarlandığında tek tümceciklerin birden çok sonuca ayrılmasına da neden olabilir.
- Bu zaman aşımı milisaniye cinsinden 100 ile 5000 arasında tamsayı değerlerine ayarlanabilir ve 500 tipik bir varsayılan değerdir.
- İlk sessizlik zaman aşımı, tanıma girişimi "eşleşme yok" sonucuyla bitmeden önce bir tümcecik öncesinde ne kadar sese izin verilmeyen sese izin verildiğinden emin olur.
- Daha yüksek değerler, konuşmacılara tepki vermek ve konuşmaya başlamak için daha fazla zaman verir, ancak hiçbir şey konuşulmadığında yavaş yanıt vermesine de neden olabilir.
- Düşük değerler, daha hızlı kullanıcı deneyimi ve daha kontrollü ses işleme için "eşleşme yok" istemi sağlar, ancak çok düşük ayarlandığında hoparlörü çok hızlı kesebilir.
- Sürekli tanıma birçok sonuç oluşturduğundan, bu değer "eşleşme yok" sonuçlarının ne sıklıkta geldiğini belirler, ancak tanıma sonuçlarının içeriğini başka türlü etkilemez.
- Bu zaman aşımı milisaniye cinsinden negatif olmayan herhangi bir tamsayı değerine veya tamamen devre dışı bırakmak için 0 olarak ayarlanabilir. 5000, tek çekimli tanıma için tipik bir varsayılan değerdir, 15000 ise sürekli tanıma için tipik bir varsayılandır.
Bu zaman aşımlarını değiştirirken dengeler olduğundan, yalnızca sessiz işlemeyle ilgili bir sorun olduğunda ayarları değiştirmeniz gerekir. Varsayılan değerler en iyi şekilde konuşulan sesi işler ve yalnızca yaygın olmayan senaryolarda sorunlarla karşılaşılmalıdır.
Örnek: "ABC-123-4567" gibi bir seri numarası konuşan kullanıcılar, seri numarasının birden çok sonucta bölünmesi için karakter grupları arasında yeterince duraklatılabilir. Bu durumda, segmentasyon sessizliği zaman aşımı için 2000 milisaniye gibi daha yüksek bir değer deneyin:
speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "2000");
Örnek: Kaydedilen bir sunucunun konuşması, bir satırdaki birkaç cümlenin birleştirileceği kadar hızlı olabilir ve büyük tanıma sonuçları dakikada yalnızca bir veya iki kez gelir. Bu durumda segmentasyon sessizliği zaman aşımını 300 ms gibi daha düşük bir değere ayarlayın:
speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "300");
Örnek: Konuşmacıdan seri numarasını bulmasını ve okumasını isteyen tek çekimli tanıma, sayı bulunurken çok hızlı sona erer. Bu durumda, 10.000 ms gibi daha uzun bir ilk sessizlik zaman aşımı deneyin:
speechConfig.SetProperty(PropertyId.SpeechServiceConnection_InitialSilenceTimeoutMs, "10000");
Anlam segmentasyonu
Anlamsal segmentasyon, sessizliğe dayalı segmentlere ayırmayla ilişkili sorunları azaltmak için tasarlanmış bir konuşma tanıma segmentasyonu stratejisidir:
- Alt segmentlere ayırma: Kullanıcılar duraksama olmadan uzun süre konuştuğunda, kesme olmadan uzun bir metin dizisi ("metin duvarı") görebilir ve bu da okunabilirlik deneyimlerini ciddi ölçüde düşürür.
- Fazla segmentlere ayırma: Kullanıcı kısa bir süre durakladığında, sessizlik algılama mekanizması yanlış segmentlere ayırabilir.
Sessiz kalma zaman aşımlarına güvenmek yerine, anlamsal segmentlere ayırma segmentleri ve cümle sonu noktalama işaretlerini ('.' veya '?' gibi) algıladığında nihai sonuçları döndürür. Bu, daha yüksek kaliteli, sembolik olarak tamamlanmış segmentlerle kullanıcı deneyimini geliştirir ve uzun ara sonuçları önler.
Anlamsal segmentasyon kullanmak için, oluşturmak SpeechRecognizer
için kullanılan örnekte aşağıdaki özelliği SpeechConfig
ayarlamanız gerekir:
speechConfig.SetProperty(PropertyId.Speech_SegmentationStrategy, "Semantic");
Anlamsal segmentasyon sınırlamalarından bazıları şunlardır:
- Anlamsal segmentasyonu kullanmak için Konuşma SDK'sı sürüm 1.41 veya üzeri gerekir.
- Anlamsal segmentasyon yalnızca sürekli tanımada kullanılmak üzere tasarlanmıştır. Buna transkripsiyon ve açıklamalı alt yazı gibi senaryolar dahildir. Tek tanıma ve dikte modunda kullanılmamalıdır.
- Anlamsal segmentlere ayırma tüm diller ve yerel ayarlar için kullanılamaz. Semantik segmentasyon şu anda yalnızca en-US, en-GB, en-IN ve en-AU gibi İngilizce (en) yerel ayarlar için kullanılabilir.
- Anlamsal segmentasyon henüz güvenilirlik puanlarını ve NBest listelerini desteklemez. Bu nedenle, güvenilirlik puanlarını veya NBest listelerini kullanıyorsanız anlamsal segmentlere ayırmayı önermeyiz.
Başvuru belgeleri | Paketi (NuGet) | GitHub'da ek örnekler
Bu nasıl yapılır kılavuzunda, gerçek zamanlı konuşmayı metne dönüştürme için Azure AI Konuşma'yı kullanmayı öğreneceksiniz. Gerçek zamanlı konuşma tanıma, dikte, çağrı merkezi yardımı ve canlı toplantılar için açıklamalı alt yazı gibi anında transkripsiyon gerektiren uygulamalar için idealdir.
Örnek bir uygulama için ortamı ayarlamayı öğrenmek için bkz . Hızlı Başlangıç: Konuşmayı tanıma ve metne dönüştürme.
Konuşma yapılandırma örneği oluşturma
Konuşma SDK'sını kullanarak Konuşma hizmetini çağırmak için bir SpeechConfig
örnek oluşturmanız gerekir. Bu sınıf, anahtarınız ve ilişkili bölgeniz, uç noktanız, konağınız veya yetkilendirme belirteciniz gibi aboneliğinizle ilgili bilgileri içerir.
- Azure portalında konuşma kaynağı oluşturun. Konuşma kaynak anahtarını ve bölgesini alın.
- Aşağıdaki kodu kullanarak bir
SpeechConfig
örnek oluşturun. veYourSpeechRegion
değerini Konuşma kaynak anahtarınız ve bölgenizle değiştirinYourSpeechKey
.
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
auto speechConfig = SpeechConfig::FromSubscription("YourSpeechKey", "YourSpeechRegion");
Birkaç farklı yolla başlatabilirsiniz SpeechConfig
:
- Uç nokta kullanın ve Konuşma hizmeti uç noktasını geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Bir konak kullanın ve bir konak adresi geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- İlişkili bölge/konum ile yetkilendirme belirteci kullanın.
Not
Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.
Mikrofondan konuşmayı tanıma
Cihaz mikrofonunuzu kullanarak konuşmayı tanımak için üye işlevini kullanarak FromDefaultMicrophoneInput()
bir AudioConfig
örnek oluşturun. Ardından ve config
geçirerek audioConfig
nesnesini başlatınSpeechRecognizer
.
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;
Belirli bir ses giriş cihazı kullanmak istiyorsanız, içinde cihaz kimliğini AudioConfig
belirtmeniz gerekir. Cihaz kimliğini nasıl alacağınızı öğrenmek için bkz . Konuşma SDK'sı ile ses giriş cihazı seçme.
Dosyadan konuşma tanıma
Mikrofon kullanmak yerine ses dosyasından konuşmayı tanımak istiyorsanız yine de bir AudioConfig
örnek oluşturmanız gerekir. Ancak, aramazsınız FromDefaultMicrophoneInput()
. Çağırıp FromWavFileInput()
dosya yolunu geçirirsiniz:
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;
Tanıma sınıfını kullanarak konuşmayı tanıma
C++ için Konuşma SDK'sının Tanıma sınıfı , konuşma tanıma için kullanabileceğiniz birkaç yöntemi kullanıma sunar.
Tek seferlik tanıma
Tek seferlik tanıma, tek bir ifadeyi zaman uyumsuz olarak tanır. Tek bir konuşmanın sonu, sonunda veya en fazla 15 saniyelik ses işlenene kadar sessizliği dinleyerek belirlenir. Aşağıda aracılığıyla zaman uyumsuz tek seferlik tanıma örneği verilmiştir RecognizeOnceAsync
:
auto result = speechRecognizer->RecognizeOnceAsync().get();
Sonucu işlemek için kod yazmanız gerekir. Bu örnek ve değerlerini değerlendirir result->Reason
:
- Tanıma sonucunu yazdırır:
ResultReason::RecognizedSpeech
. - Tanıma eşleşmesi yoksa kullanıcıyı bilgilendirir:
ResultReason::NoMatch
. - Bir hatayla karşılaşırsanız, şu hata iletisini yazdırır:
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;
}
Sürekli tanıma
Sürekli tanıma, tek seferlik tanımaya kıyasla biraz daha fazla söz konusudur. Tanıma sonuçlarını almak için Recognizing
, Recognized
ve Canceled
olaylarına abone olmanız gerekir. Tanımayı durdurmak için StopContinuousRecognitionAsync'i çağırmanız gerekir. Aşağıda, bir ses giriş dosyasında gerçekleştirilen sürekli tanıma örneği verilmiştır.
Girişi tanımlayıp başlatarak SpeechRecognizer
başlayın:
auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);
Ardından, konuşma tanıma durumunu yönetmek için bir değişken oluşturun. Bildirimin promise<void>
nedeni, tanımanın başlangıcında tamamlanmadığını güvenle varsayabilirsiniz:
promise<void> recognitionEnd;
Ardından, gönderen SpeechRecognizer
olaylara abone olun:
Recognizing
: Ara tanıma sonuçları içeren olaylar için sinyal.Recognized
: Başarılı bir tanıma girişimini gösteren son tanıma sonuçlarını içeren olaylar için sinyal.SessionStopped
: Tanıma oturumunun (işlem) sonunu gösteren olaylar için sinyal.Canceled
: İptal edilen tanıma sonuçlarını içeren olaylar için sinyal. Bu sonuçlar, doğrudan iptal isteği sonucu iptal edilen bir tanıma girişimini gösterir. Alternatif olarak, bir aktarım veya protokol hatası olduğunu gösterirler.
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.
});
Her şey ayarlandıktan sonra şunları tanımaya başlamak için arayın StartContinuousRecognitionAsync
:
// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer->StartContinuousRecognitionAsync().get();
// Waits for recognition end.
recognitionEnd.get_future().get();
// Stops recognition.
speechRecognizer->StopContinuousRecognitionAsync().get();
Kaynak dili değiştirme
Konuşma tanıma için sık kullanılan bir görev, giriş (veya kaynak) dilini belirtmektir. Aşağıdaki örnekte giriş dilinin Almanca olarak nasıl değiştireceği gösterilmektedir. Kodunuzda örneğinizi SpeechConfig
bulun ve bu satırı doğrudan altına ekleyin:
speechConfig->SetSpeechRecognitionLanguage("de-DE");
SetSpeechRecognitionLanguage
bir dizeyi bağımsız değişken olarak alan bir parametredir. Desteklenen yerel ayarların listesi için bkz . Konuşma hizmeti için dil ve ses desteği.
Dil belirleme
Bir ses kaynağında dili tanımlamanız ve ardından metne dönüştürmeniz gerektiğinde, konuşmadan metin tanımaya dil tanımlama özelliğini kullanabilirsiniz.
Eksiksiz bir kod örneği için bkz . Dil belirleme.
Özel uç nokta kullanma
Özel konuşma ile kendi verilerinizi karşıya yükleyebilir, özel bir modeli test edebilir ve eğitebilir, modeller arasındaki doğruluğu karşılaştırabilir ve modeli özel uç noktaya dağıtabilirsiniz. Aşağıdaki örnekte özel uç noktanın nasıl ayarlanacağı gösterilmektedir.
auto speechConfig = SpeechConfig::FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig->SetEndpointId("YourEndpointId");
auto speechRecognizer = SpeechRecognizer::FromConfig(speechConfig);
Kapsayıcı çalıştırma ve kullanma
Konuşma kapsayıcıları, Konuşma SDK'sı ve Konuşma CLI'sı aracılığıyla erişilen websocket tabanlı sorgu uç noktası API'leri sağlar. Varsayılan olarak, Konuşma SDK'sı ve Konuşma CLI'sı genel Konuşma hizmetini kullanır. Kapsayıcıyı kullanmak için başlatma yöntemini değiştirmeniz gerekir. Anahtar ve bölge yerine kapsayıcı ana bilgisayar URL'si kullanın.
Kapsayıcılar hakkında daha fazla bilgi için bkz. Docker ile Konuşma kapsayıcılarını yükleme ve çalıştırma makalesindeki Konak URL'leri.
Anlam segmentasyonu
Anlamsal segmentasyon, sessizliğe dayalı segmentlere ayırmayla ilişkili sorunları azaltmak için tasarlanmış bir konuşma tanıma segmentasyonu stratejisidir:
- Alt segmentlere ayırma: Kullanıcılar duraksama olmadan uzun süre konuştuğunda, kesme olmadan uzun bir metin dizisi ("metin duvarı") görebilir ve bu da okunabilirlik deneyimlerini ciddi ölçüde düşürür.
- Fazla segmentlere ayırma: Kullanıcı kısa bir süre durakladığında, sessizlik algılama mekanizması yanlış segmentlere ayırabilir.
Sessiz kalma zaman aşımlarına güvenmek yerine, anlamsal segmentlere ayırma segmentleri ve cümle sonu noktalama işaretlerini ('.' veya '?' gibi) algıladığında nihai sonuçları döndürür. Bu, daha yüksek kaliteli, sembolik olarak tamamlanmış segmentlerle kullanıcı deneyimini geliştirir ve uzun ara sonuçları önler.
Anlamsal segmentasyon kullanmak için, oluşturmak SpeechRecognizer
için kullanılan örnekte aşağıdaki özelliği SpeechConfig
ayarlamanız gerekir:
speechConfig->SetProperty(PropertyId::Speech_SegmentationStrategy, "Semantic");
Anlamsal segmentasyon sınırlamalarından bazıları şunlardır:
- Anlamsal segmentasyonu kullanmak için Konuşma SDK'sı sürüm 1.41 veya üzeri gerekir.
- Anlamsal segmentasyon yalnızca sürekli tanımada kullanılmak üzere tasarlanmıştır. Buna transkripsiyon ve açıklamalı alt yazı gibi senaryolar dahildir. Tek tanıma ve dikte modunda kullanılmamalıdır.
- Anlamsal segmentlere ayırma tüm diller ve yerel ayarlar için kullanılamaz. Semantik segmentasyon şu anda yalnızca en-US, en-GB, en-IN ve en-AU gibi İngilizce (en) yerel ayarlar için kullanılabilir.
- Anlamsal segmentasyon henüz güvenilirlik puanlarını ve NBest listelerini desteklemez. Bu nedenle, güvenilirlik puanlarını veya NBest listelerini kullanıyorsanız anlamsal segmentlere ayırmayı önermeyiz.
Başvuru belgeleri | Paketi (Go) | GitHub'da ek örnekler
Bu nasıl yapılır kılavuzunda, gerçek zamanlı konuşmayı metne dönüştürme için Azure AI Konuşma'yı kullanmayı öğreneceksiniz. Gerçek zamanlı konuşma tanıma, dikte, çağrı merkezi yardımı ve canlı toplantılar için açıklamalı alt yazı gibi anında transkripsiyon gerektiren uygulamalar için idealdir.
Örnek bir uygulama için ortamı ayarlamayı öğrenmek için bkz . Hızlı Başlangıç: Konuşmayı tanıma ve metne dönüştürme.
Mikrofondan metne konuşmayı tanıma
- Azure portalında konuşma kaynağı oluşturun. Konuşma kaynak anahtarını ve bölgesini alın.
- Varsayılan cihaz mikrofonunuzdan konuşma tanımayı çalıştırmak için aşağıdaki kod örneğini kullanın. ve
YourSpeechRegion
değerini Konuşma kaynak anahtarınız ve bölgenizle değiştirinYourSpeechKey
. Betiği çalıştırmak, varsayılan mikrofonunuzda ve çıkış metninizde bir tanıma oturumu başlatır:
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')
}
GitHub'da barındırılan bileşenlere bağlanan bir go.mod dosyası oluşturmak için aşağıdaki komutları çalıştırın:
go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go
Şimdi kodu derleyin ve çalıştırın:
go build
go run quickstart
Ayrıntılı bilgi için sınıfın ve sınıfın SpeechConfig
başvuru içeriğine SpeechRecognizer
bakın.
Ses dosyasından konuşmayı metne dönüştürmeyi tanıma
Ses dosyasından konuşma tanımayı çalıştırmak için aşağıdaki örneği kullanın. ve YourSpeechRegion
değerini Konuşma kaynak anahtarınız ve bölgenizle değiştirinYourSpeechKey
. Ayrıca, değişkeni file
bir .wav dosyasının yoluyla değiştirin. Betiği çalıştırdığınızda, dosyadan konuşmayı tanır ve metin sonucunu verir:
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)
}
GitHub'da barındırılan bileşenlere bağlanan bir go.mod dosyası oluşturmak için aşağıdaki komutları çalıştırın:
go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go
Şimdi kodu derleyin ve çalıştırın:
go build
go run quickstart
Ayrıntılı bilgi için sınıfın ve sınıfın SpeechConfig
başvuru içeriğine SpeechRecognizer
bakın.
Kapsayıcı çalıştırma ve kullanma
Konuşma kapsayıcıları, Konuşma SDK'sı ve Konuşma CLI'sı aracılığıyla erişilen websocket tabanlı sorgu uç noktası API'leri sağlar. Varsayılan olarak, Konuşma SDK'sı ve Konuşma CLI'sı genel Konuşma hizmetini kullanır. Kapsayıcıyı kullanmak için başlatma yöntemini değiştirmeniz gerekir. Anahtar ve bölge yerine kapsayıcı ana bilgisayar URL'si kullanın.
Kapsayıcılar hakkında daha fazla bilgi için bkz. Docker ile Konuşma kapsayıcılarını yükleme ve çalıştırma makalesindeki Konak URL'leri.
Başvuru belgeleri | GitHub'da ek örnekler
Bu nasıl yapılır kılavuzunda, gerçek zamanlı konuşmayı metne dönüştürme için Azure AI Konuşma'yı kullanmayı öğreneceksiniz. Gerçek zamanlı konuşma tanıma, dikte, çağrı merkezi yardımı ve canlı toplantılar için açıklamalı alt yazı gibi anında transkripsiyon gerektiren uygulamalar için idealdir.
Örnek bir uygulama için ortamı ayarlamayı öğrenmek için bkz . Hızlı Başlangıç: Konuşmayı tanıma ve metne dönüştürme.
Konuşma yapılandırma örneği oluşturma
Konuşma SDK'sını kullanarak Konuşma hizmetini çağırmak için bir SpeechConfig örneği oluşturmanız gerekir. Bu sınıf, anahtarınız ve ilişkili bölgeniz, uç noktanız, konağınız veya yetkilendirme belirteciniz gibi aboneliğinizle ilgili bilgileri içerir.
- Azure portalında konuşma kaynağı oluşturun. Konuşma kaynak anahtarını ve bölgesini alın.
- Konuşma anahtarınızı ve bölgenizi kullanarak bir
SpeechConfig
örnek oluşturun.
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-speech-key>", "<paste-your-region>");
}
}
Birkaç farklı yolla başlatabilirsiniz SpeechConfig
:
- Uç nokta kullanın ve Konuşma hizmeti uç noktasını geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Bir konak kullanın ve bir konak adresi geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- İlişkili bölge/konum ile yetkilendirme belirteci kullanın.
Not
Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.
Mikrofondan konuşmayı tanıma
Cihaz mikrofonunuzu kullanarak konuşmayı tanımak için yöntemini kullanarak fromDefaultMicrophoneInput()
bir AudioConfig
örnek oluşturun. Ardından ve config
geçirerek audioConfig
nesnesini başlatınSpeechRecognizer
.
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-speech-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 speechRecognitionResult = task.get();
System.out.println("RECOGNIZED: Text=" + speechRecognitionResult.getText());
}
}
Belirli bir ses giriş cihazı kullanmak istiyorsanız, içinde cihaz kimliğini AudioConfig
belirtmeniz gerekir. Cihaz kimliğini nasıl alacağınızı öğrenmek için bkz . Konuşma SDK'sı ile ses giriş cihazı seçme.
Dosyadan konuşma tanıma
Mikrofon kullanmak yerine ses dosyasından konuşmayı tanımak istiyorsanız yine de bir AudioConfig
örnek oluşturmanız gerekir. Ancak, aramazsınız FromDefaultMicrophoneInput()
. Çağırıp fromWavFileInput()
dosya yolunu geçirirsiniz:
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-speech-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 speechRecognitionResult = task.get();
System.out.println("RECOGNIZED: Text=" + speechRecognitionResult.getText());
}
}
Hataları işleme
Önceki örnekler yalnızca kullanarak speechRecognitionResult.getText()
tanınan metni alır. Hataları ve diğer yanıtları işlemek için, sonucu işlemek için bazı kodlar yazmanız gerekir. Aşağıdaki örnek ve değerlerini değerlendirir speechRecognitionResult.getReason()
:
- Tanıma sonucunu yazdırır:
ResultReason.RecognizedSpeech
. - Tanıma eşleşmesi yoksa kullanıcıyı bilgilendirir:
ResultReason.NoMatch
. - Bir hatayla karşılaşırsanız, şu hata iletisini yazdırır:
ResultReason.Canceled
.
switch (speechRecognitionResult.getReason()) {
case ResultReason.RecognizedSpeech:
System.out.println("We recognized: " + speechRecognitionResult.getText());
exitCode = 0;
break;
case ResultReason.NoMatch:
System.out.println("NOMATCH: Speech could not be recognized.");
break;
case ResultReason.Canceled: {
CancellationDetails cancellation = CancellationDetails.fromResult(speechRecognitionResult);
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;
}
Sürekli tanımayı kullanma
Önceki örneklerde tek bir ifadeyi tanıyan tek çekimli tanıma kullanılır. Tek bir konuşmanın sonu, sonunda veya en fazla 15 saniyelik ses işlenene kadar sessizliği dinleyerek belirlenir.
Buna karşılık, tanımanın ne zaman durdurulacağını denetlemek istediğinizde sürekli tanıma kullanırsınız. Tanıma sonuçlarını almak için recognizing
, recognized
ve canceled
olaylarına abone olmanız gerekir. Tanımayı durdurmak için öğesini çağırmalısınız stopContinuousRecognitionAsync
. Bir ses giriş dosyasında sürekli tanımayı nasıl gerçekleştirebileceğinize ilişkin bir örnek aşağıda verilmiştır.
Girişi tanımlayıp başlatarak SpeechRecognizer
başlayın:
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(config, audioConfig);
Ardından, konuşma tanıma durumunu yönetmek için bir değişken oluşturun. Sınıf kapsamında bir Semaphore
örnek bildirin:
private static Semaphore stopTranslationWithFileSemaphore;
Ardından, gönderen SpeechRecognizer
olaylara abone olun:
recognizing
: Ara tanıma sonuçları içeren olaylar için sinyal.recognized
: Başarılı bir tanıma girişimini gösteren son tanıma sonuçlarını içeren olaylar için sinyal.sessionStopped
: Tanıma oturumunun (işlem) sonunu gösteren olaylar için sinyal.canceled
: İptal edilen tanıma sonuçlarını içeren olaylar için sinyal. Bu sonuçlar, doğrudan iptal isteğinin sonucu olarak iptal edilen bir tanıma girişimini gösterir. Alternatif olarak, bir aktarım veya protokol hatası olduğunu gösterirler.
// 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();
});
Her şey ayarlandıktan sonra şunları tanımaya başlamak için arayın startContinuousRecognitionAsync
:
// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer.startContinuousRecognitionAsync().get();
// Waits for completion.
stopTranslationWithFileSemaphore.acquire();
// Stops recognition.
speechRecognizer.stopContinuousRecognitionAsync().get();
Kaynak dili değiştirme
Konuşma tanıma için sık kullanılan bir görev, giriş (veya kaynak) dilini belirtmektir. Aşağıdaki örnekte giriş dilinin Fransızca olarak nasıl değiştireceği gösterilmektedir. Kodunuzda örneğinizi SpeechConfig
bulun ve bu satırı doğrudan altına ekleyin:
config.setSpeechRecognitionLanguage("fr-FR");
setSpeechRecognitionLanguage
bir dizeyi bağımsız değişken olarak alan bir parametredir. Desteklenen konuşma metin yerel ayarları listesine bakın.
Dil belirleme
Bir ses kaynağında dili tanımlamanız ve ardından metne dönüştürmeniz gerektiğinde, konuşmadan metin tanımaya dil tanımlama özelliğini kullanabilirsiniz.
Eksiksiz bir kod örneği için bkz . Dil belirleme.
Özel uç nokta kullanma
Özel konuşma ile kendi verilerinizi karşıya yükleyebilir, özel bir modeli test edebilir ve eğitebilir, modeller arasındaki doğruluğu karşılaştırabilir ve modeli özel uç noktaya dağıtabilirsiniz. Aşağıdaki örnekte özel uç noktanın nasıl ayarlanacağı gösterilmektedir:
SpeechConfig speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourServiceRegion");
speechConfig.setEndpointId("YourEndpointId");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig);
Kapsayıcı çalıştırma ve kullanma
Konuşma kapsayıcıları, Konuşma SDK'sı ve Konuşma CLI'sı aracılığıyla erişilen websocket tabanlı sorgu uç noktası API'leri sağlar. Varsayılan olarak, Konuşma SDK'sı ve Konuşma CLI'sı genel Konuşma hizmetini kullanır. Kapsayıcıyı kullanmak için başlatma yöntemini değiştirmeniz gerekir. Anahtar ve bölge yerine kapsayıcı ana bilgisayar URL'si kullanın.
Kapsayıcılar hakkında daha fazla bilgi için bkz. Docker ile Konuşma kapsayıcılarını yükleme ve çalıştırma makalesindeki Konak URL'leri.
Anlam segmentasyonu
Anlamsal segmentasyon, sessizliğe dayalı segmentlere ayırmayla ilişkili sorunları azaltmak için tasarlanmış bir konuşma tanıma segmentasyonu stratejisidir:
- Alt segmentlere ayırma: Kullanıcılar duraksama olmadan uzun süre konuştuğunda, kesme olmadan uzun bir metin dizisi ("metin duvarı") görebilir ve bu da okunabilirlik deneyimlerini ciddi ölçüde düşürür.
- Fazla segmentlere ayırma: Kullanıcı kısa bir süre durakladığında, sessizlik algılama mekanizması yanlış segmentlere ayırabilir.
Sessiz kalma zaman aşımlarına güvenmek yerine, anlamsal segmentlere ayırma segmentleri ve cümle sonu noktalama işaretlerini ('.' veya '?' gibi) algıladığında nihai sonuçları döndürür. Bu, daha yüksek kaliteli, sembolik olarak tamamlanmış segmentlerle kullanıcı deneyimini geliştirir ve uzun ara sonuçları önler.
Anlamsal segmentasyon kullanmak için, oluşturmak SpeechRecognizer
için kullanılan örnekte aşağıdaki özelliği SpeechConfig
ayarlamanız gerekir:
speechConfig.SetProperty(PropertyId.Speech_SegmentationStrategy, "Semantic");
Anlamsal segmentasyon sınırlamalarından bazıları şunlardır:
- Anlamsal segmentasyonu kullanmak için Konuşma SDK'sı sürüm 1.41 veya üzeri gerekir.
- Anlamsal segmentasyon yalnızca sürekli tanımada kullanılmak üzere tasarlanmıştır. Buna transkripsiyon ve açıklamalı alt yazı gibi senaryolar dahildir. Tek tanıma ve dikte modunda kullanılmamalıdır.
- Anlamsal segmentlere ayırma tüm diller ve yerel ayarlar için kullanılamaz. Semantik segmentasyon şu anda yalnızca en-US, en-GB, en-IN ve en-AU gibi İngilizce (en) yerel ayarlar için kullanılabilir.
- Anlamsal segmentasyon henüz güvenilirlik puanlarını ve NBest listelerini desteklemez. Bu nedenle, güvenilirlik puanlarını veya NBest listelerini kullanıyorsanız anlamsal segmentlere ayırmayı önermeyiz.
Başvuru belgeleri | Paketi (npm) | GitHub | Kitaplığı kaynak kodundaki ek örnekler
Bu nasıl yapılır kılavuzunda, gerçek zamanlı konuşmayı metne dönüştürme için Azure AI Konuşma'yı kullanmayı öğreneceksiniz. Gerçek zamanlı konuşma tanıma, dikte, çağrı merkezi yardımı ve canlı toplantılar için açıklamalı alt yazı gibi anında transkripsiyon gerektiren uygulamalar için idealdir.
Örnek bir uygulama için ortamı ayarlamayı öğrenmek için bkz . Hızlı Başlangıç: Konuşmayı tanıma ve metne dönüştürme.
Konuşma yapılandırma örneği oluşturma
Konuşma SDK'sını kullanarak Konuşma hizmetini çağırmak için bir SpeechConfig
örnek oluşturmanız gerekir. Bu sınıf, anahtarınız ve ilişkili bölgeniz, uç noktanız, konağınız veya yetkilendirme belirteciniz gibi aboneliğinizle ilgili bilgileri içerir.
- Azure portalında konuşma kaynağı oluşturun. Konuşma kaynak anahtarını ve bölgesini alın.
- Aşağıdaki kodu kullanarak bir
SpeechConfig
örnek oluşturun. veYourSpeechRegion
değerini Konuşma kaynak anahtarınız ve bölgenizle değiştirinYourSpeechKey
.
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");
Birkaç farklı yolla başlatabilirsiniz SpeechConfig
:
- Uç nokta kullanın ve Konuşma hizmeti uç noktasını geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Bir konak kullanın ve bir konak adresi geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- İlişkili bölge/konum ile yetkilendirme belirteci kullanın.
Not
Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.
Mikrofondan konuşmayı tanıma
Mikrofondan konuşma tanıma özelliği Node.js desteklenmez. Yalnızca tarayıcı tabanlı bir JavaScript ortamında desteklenir. Daha fazla bilgi için React örneğine ve GitHub'da bir mikrofondan metne konuşma uygulama bölümüne bakın. React örneği, kimlik doğrulama belirteçlerinin değişimi ve yönetimi için tasarım desenlerini gösterir. Ayrıca, konuşmayı metne dönüştürme için bir mikrofondan veya dosyadan ses yakalamayı da gösterir.
Not
Belirli bir ses giriş cihazı kullanmak istiyorsanız, içinde cihaz kimliğini AudioConfig
belirtmeniz gerekir. Cihaz kimliğini nasıl alacağınızı öğrenmek için bkz . Konuşma SDK'sı ile ses giriş cihazı seçme.
Dosyadan konuşma tanıma
Ses dosyasından konuşmayı tanımak için nesnesini kabul eden yöntemini kullanarak fromWavFileInput()
bir Buffer
örnek oluşturunAudioConfig
. Ardından ve speechConfig
geçirerek audioConfig
başlatınSpeechRecognizer
.
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();
Bellek içi akıştan konuşma tanıma
Birçok kullanım örneğinde ses verileriniz büyük olasılıkla Azure Blob Depolama... Veya zaten bellekte bir veya benzer bir ArrayBuffer
ham veri yapısı olarak yer alır. Aşağıdaki kod:
- kullanarak
createPushStream()
bir anında iletme akışı oluşturur. - Tanıtım amacıyla kullanarak
fs.createReadStream
bir .wav dosyasını okur. içindeArrayBuffer
zaten ses verileriniz varsa, içeriği giriş akışına yazmaya doğrudan atlayabilirsiniz. - Anında iletme akışını kullanarak bir ses yapılandırması oluşturur.
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();
Giriş olarak bir anında iletme akışının kullanılması, ses verilerinin üst bilgileri atlayan ham darbe kodu modülasyonu (PCM) verileri olduğunu varsayar. Üst bilgi atlanmadıysa API bazı durumlarda çalışmaya devam ediyor. En iyi sonuçları elde etmek için, ses verilerinin başlangıcında başlayacak şekilde fs
üst bilgileri okumak için mantık uygulamayı göz önünde bulundurun.
Hataları işleme
Önceki örnekler yalnızca özelliğinden result.text
tanınan metni alır. Hataları ve diğer yanıtları işlemek için, sonucu işlemek için bazı kodlar yazmanız gerekir. Aşağıdaki kod özelliğini değerlendirir result.reason
ve:
- Tanıma sonucunu yazdırır:
ResultReason.RecognizedSpeech
. - Tanıma eşleşmesi yoksa kullanıcıyı bilgilendirir:
ResultReason.NoMatch
. - Bir hatayla karşılaşırsanız, şu hata iletisini yazdırır:
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;
}
Sürekli tanımayı kullanma
Önceki örneklerde tek bir ifadeyi tanıyan tek çekimli tanıma kullanılır. Tek bir konuşmanın sonu, sonunda veya en fazla 15 saniyelik ses işlenene kadar sessizliği dinleyerek belirlenir.
Buna karşılık, tanımanın ne zaman durdurulacağını denetlemek istediğinizde sürekli tanımayı kullanabilirsiniz. Tanıma sonuçlarını almak için Recognizing
, Recognized
ve Canceled
olaylarına abone olmanız gerekir. Tanımayı durdurmak için [stopContinuousRecognitionAsync
] (/javascript/api/microsoft-cognitiveservices-speech-sdk/speechrecognizer#microsoft-cognitiveservices-speech-sdk-speechrecognizer-stopcontinuousrecognitionasync) öğesini çağırmanız gerekir. Aşağıda, bir ses giriş dosyasında sürekli tanımanın nasıl gerçekleştirildiğini gösteren bir örnek verilmiştir.
Girişi tanımlayıp başlatarak SpeechRecognizer
başlayın:
const speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
Ardından, öğesinden SpeechRecognizer
gönderilen olaylara abone olun:
recognizing
: Ara tanıma sonuçları içeren olaylar için sinyal.recognized
: Başarılı bir tanıma girişimini gösteren son tanıma sonuçlarını içeren olaylar için sinyal.sessionStopped
: Tanıma oturumunun (işlem) sonunu gösteren olaylar için sinyal.canceled
: İptal edilen tanıma sonuçlarını içeren olaylar için sinyal. Bu sonuçlar, doğrudan iptal isteğinin sonucu olarak iptal edilen bir tanıma girişimini gösterir. Alternatif olarak, bir aktarım veya protokol hatası olduğunu gösterirler.
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();
};
Her şey ayarlandıktan sonra şunları tanımaya başlamak için [startContinuousRecognitionAsync
] (/javascript/api/microsoft-cognitiveservices-speech-sdk/speechrecognizer#microsoft-cognitiveservices-speech-sdk-speechrecognizer-startkeywordrecognitionasync) çağrısı yapın:
speechRecognizer.startContinuousRecognitionAsync();
// Make the following call at some point to stop recognition:
// speechRecognizer.stopContinuousRecognitionAsync();
Kaynak dili değiştirme
Konuşma tanıma için sık kullanılan bir görev, giriş (veya kaynak) dilini belirtmektir. Aşağıdaki örnekte giriş dilinin İtalyanca olarak nasıl değiştireceği gösterilmektedir. Kodunuzda örneğinizi SpeechConfig
bulun ve bu satırı doğrudan altına ekleyin:
speechConfig.speechRecognitionLanguage = "it-IT";
speechRecognitionLanguage
özelliği bir dil-yerel ayar biçim dizesi bekler. Desteklenen yerel ayarların listesi için bkz . Konuşma hizmeti için dil ve ses desteği.
Dil belirleme
Bir ses kaynağında dili tanımlamanız ve ardından metne dönüştürmeniz gerektiğinde, konuşmadan metin tanımaya dil tanımlama özelliğini kullanabilirsiniz.
Eksiksiz bir kod örneği için bkz . Dil belirleme.
Özel uç nokta kullanma
Özel konuşma ile kendi verilerinizi karşıya yükleyebilir, özel bir modeli test edebilir ve eğitebilir, modeller arasındaki doğruluğu karşılaştırabilir ve modeli özel uç noktaya dağıtabilirsiniz. Aşağıdaki örnekte özel uç noktanın nasıl ayarlanacağı gösterilmektedir.
var speechConfig = SpeechSDK.SpeechConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
var speechRecognizer = new SpeechSDK.SpeechRecognizer(speechConfig);
Kapsayıcı çalıştırma ve kullanma
Konuşma kapsayıcıları, Konuşma SDK'sı ve Konuşma CLI'sı aracılığıyla erişilen websocket tabanlı sorgu uç noktası API'leri sağlar. Varsayılan olarak, Konuşma SDK'sı ve Konuşma CLI'sı genel Konuşma hizmetini kullanır. Kapsayıcıyı kullanmak için başlatma yöntemini değiştirmeniz gerekir. Anahtar ve bölge yerine kapsayıcı ana bilgisayar URL'si kullanın.
Kapsayıcılar hakkında daha fazla bilgi için bkz. Docker ile Konuşma kapsayıcılarını yükleme ve çalıştırma makalesindeki Konak URL'leri.
Başvuru belgeleri | Paketi (indirme) | GitHub'da ek örnekler
Bu nasıl yapılır kılavuzunda, gerçek zamanlı konuşmayı metne dönüştürme için Azure AI Konuşma'yı kullanmayı öğreneceksiniz. Gerçek zamanlı konuşma tanıma, dikte, çağrı merkezi yardımı ve canlı toplantılar için açıklamalı alt yazı gibi anında transkripsiyon gerektiren uygulamalar için idealdir.
Örnek bir uygulama için ortamı ayarlamayı öğrenmek için bkz . Hızlı Başlangıç: Konuşmayı tanıma ve metne dönüştürme.
Konuşma SDK'sı ve örnekleri yükleme
Azure-Samples/cognitive-services-speech-sdk deposu, iOS ve Mac için Objective-C dilinde yazılmış örnekler içerir. Her örneğe ilişkin yükleme yönergelerini görmek için bir bağlantı seçin:
- macOS üzerinde Objective-C'de mikrofondan konuşma tanıma
- iOS'ta Objective-C'de konuşmayı tanıma
- iOS'ta Objective-C için daha fazla örnek
Daha fazla bilgi için bkz . Objective-C için Konuşma SDK'sı başvurusu.
Özel uç nokta kullanma
Özel konuşma ile kendi verilerinizi karşıya yükleyebilir, özel bir modeli test edebilir ve eğitebilir, modeller arasındaki doğruluğu karşılaştırabilir ve modeli özel uç noktaya dağıtabilirsiniz. Aşağıdaki örnekte özel uç noktanın nasıl ayarlanacağı gösterilmektedir:
SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithSubscription:"YourSubscriptionKey" region:"YourServiceRegion"];
speechConfig.endpointId = "YourEndpointId";
SPXSpeechRecognizer* speechRecognizer = [[SPXSpeechRecognizer alloc] init:speechConfig];
Kapsayıcı çalıştırma ve kullanma
Konuşma kapsayıcıları, Konuşma SDK'sı ve Konuşma CLI'sı aracılığıyla erişilen websocket tabanlı sorgu uç noktası API'leri sağlar. Varsayılan olarak, Konuşma SDK'sı ve Konuşma CLI'sı genel Konuşma hizmetini kullanır. Kapsayıcıyı kullanmak için başlatma yöntemini değiştirmeniz gerekir. Anahtar ve bölge yerine kapsayıcı ana bilgisayar URL'si kullanın.
Kapsayıcılar hakkında daha fazla bilgi için bkz. Docker ile Konuşma kapsayıcılarını yükleme ve çalıştırma makalesindeki Konak URL'leri.
Başvuru belgeleri | Paketi (indirme) | GitHub'da ek örnekler
Bu nasıl yapılır kılavuzunda, gerçek zamanlı konuşmayı metne dönüştürme için Azure AI Konuşma'yı kullanmayı öğreneceksiniz. Gerçek zamanlı konuşma tanıma, dikte, çağrı merkezi yardımı ve canlı toplantılar için açıklamalı alt yazı gibi anında transkripsiyon gerektiren uygulamalar için idealdir.
Örnek bir uygulama için ortamı ayarlamayı öğrenmek için bkz . Hızlı Başlangıç: Konuşmayı tanıma ve metne dönüştürme.
Konuşma SDK'sı ve örnekleri yükleme
Azure-Samples/cognitive-services-speech-sdk deposu, iOS ve Mac için Swift dilinde yazılmış örnekler içerir. Her örneğe ilişkin yükleme yönergelerini görmek için bir bağlantı seçin:
Daha fazla bilgi için bkz . Objective-C için Konuşma SDK'sı başvurusu.
Özel uç nokta kullanma
Özel konuşma ile kendi verilerinizi karşıya yükleyebilir, özel bir modeli test edebilir ve eğitebilir, modeller arasındaki doğruluğu karşılaştırabilir ve modeli özel uç noktaya dağıtabilirsiniz. Aşağıdaki örnekte özel uç noktanın nasıl ayarlanacağı gösterilmektedir:
let speechConfig = SPXSpeechConfiguration(subscription: "YourSubscriptionKey", region: "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
let speechRecognizer = SPXSpeechRecognizer(speechConfiguration: speechConfig);
Kapsayıcı çalıştırma ve kullanma
Konuşma kapsayıcıları, Konuşma SDK'sı ve Konuşma CLI'sı aracılığıyla erişilen websocket tabanlı sorgu uç noktası API'leri sağlar. Varsayılan olarak, Konuşma SDK'sı ve Konuşma CLI'sı genel Konuşma hizmetini kullanır. Kapsayıcıyı kullanmak için başlatma yöntemini değiştirmeniz gerekir. Anahtar ve bölge yerine kapsayıcı ana bilgisayar URL'si kullanın.
Kapsayıcılar hakkında daha fazla bilgi için bkz. Docker ile Konuşma kapsayıcılarını yükleme ve çalıştırma makalesindeki Konak URL'leri.
Başvuru belgeleri | Paketi (PyPi) | GitHub'da ek örnekler
Bu nasıl yapılır kılavuzunda, gerçek zamanlı konuşmayı metne dönüştürme için Azure AI Konuşma'yı kullanmayı öğreneceksiniz. Gerçek zamanlı konuşma tanıma, dikte, çağrı merkezi yardımı ve canlı toplantılar için açıklamalı alt yazı gibi anında transkripsiyon gerektiren uygulamalar için idealdir.
Örnek bir uygulama için ortamı ayarlamayı öğrenmek için bkz . Hızlı Başlangıç: Konuşmayı tanıma ve metne dönüştürme.
Konuşma yapılandırma örneği oluşturma
Konuşma SDK'sını kullanarak Konuşma hizmetini çağırmak için bir SpeechConfig
örnek oluşturmanız gerekir. Bu sınıf konuşma anahtarınız ve ilişkili bölge, uç nokta, konak veya yetkilendirme belirteci gibi aboneliğinizle ilgili bilgileri içerir.
- Azure portalında konuşma kaynağı oluşturun. Konuşma kaynak anahtarını ve bölgesini alın.
- Aşağıdaki kodu kullanarak bir
SpeechConfig
örnek oluşturun. veYourSpeechRegion
değerini Konuşma kaynak anahtarınız ve bölgenizle değiştirinYourSpeechKey
.
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
Birkaç farklı yolla başlatabilirsiniz SpeechConfig
:
- Uç nokta kullanın ve Konuşma hizmeti uç noktasını geçirin. Konuşma anahtarı veya yetkilendirme belirteci isteğe bağlıdır.
- Bir konak kullanın ve bir konak adresi geçirin. Konuşma anahtarı veya yetkilendirme belirteci isteğe bağlıdır.
- İlişkili bölge/konum ile yetkilendirme belirteci kullanın.
Not
Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.
Mikrofondan konuşmayı tanıma
Cihaz mikrofonunuzu kullanarak konuşmayı tanımak için, geçirmeden AudioConfig
bir SpeechRecognizer
örnek oluşturun ve geçirinspeech_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.")
speech_recognition_result = speech_recognizer.recognize_once_async().get()
print(speech_recognition_result.text)
from_mic()
Belirli bir ses giriş cihazı kullanmak istiyorsanız, içinde cihaz kimliğini AudioConfig
belirtmeniz ve bunu oluşturucunun SpeechRecognizer
audio_config
parametresine geçirmeniz gerekir. Cihaz kimliğini nasıl alacağınızı öğrenmek için bkz . Konuşma SDK'sı ile ses giriş cihazı seçme.
Dosyadan konuşma tanıma
Mikrofon kullanmak yerine ses dosyasından konuşmayı tanımak istiyorsanız bir AudioConfig
örnek oluşturun ve parametresini filename
kullanın:
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)
speech_recognition_result = speech_recognizer.recognize_once_async().get()
print(speech_recognition_result.text)
from_file()
Hataları işleme
Önceki örnekler yalnızca özelliğinden speech_recognition_result.text
tanınan metni alır. Hataları ve diğer yanıtları işlemek için, sonucu işlemek için bazı kodlar yazmanız gerekir. Aşağıdaki kod özelliğini değerlendirir speech_recognition_result.reason
ve:
- Tanıma sonucunu yazdırır:
speechsdk.ResultReason.RecognizedSpeech
. - Tanıma eşleşmesi yoksa kullanıcıyı bilgilendirir:
speechsdk.ResultReason.NoMatch
. - Bir hatayla karşılaşırsanız, şu hata iletisini yazdırır:
speechsdk.ResultReason.Canceled
.
if speech_recognition_result.reason == speechsdk.ResultReason.RecognizedSpeech:
print("Recognized: {}".format(speech_recognition_result.text))
elif speech_recognition_result.reason == speechsdk.ResultReason.NoMatch:
print("No speech could be recognized: {}".format(speech_recognition_result.no_match_details))
elif speech_recognition_result.reason == speechsdk.ResultReason.Canceled:
cancellation_details = speech_recognition_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?")
Sürekli tanımayı kullanma
Önceki örneklerde tek bir ifadeyi tanıyan tek çekimli tanıma kullanılır. Tek bir konuşmanın sonu, sonunda veya en fazla 15 saniyelik ses işlenene kadar sessizliği dinleyerek belirlenir.
Buna karşılık, tanımanın ne zaman durdurulacağını denetlemek istediğinizde sürekli tanıma kullanırsınız. Tanıma sonuçlarını almak için adresine EventSignal
bağlanmanız gerekir. Tanımayı durdurmak için stop_continuous_recognition() veya stop_continuous_recognition_async() çağırmanız gerekir. Aşağıda, bir ses giriş dosyasında sürekli tanımanın nasıl gerçekleştirildiğini gösteren bir örnek verilmiştir.
Girişi tanımlayıp başlatarak SpeechRecognizer
başlayın:
audio_config = speechsdk.audio.AudioConfig(filename=weatherfilename)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
Ardından, konuşma tanıma durumunu yönetmek için bir değişken oluşturun. Değişkeni olarak False
ayarlayın çünkü tanımanın başlangıcında tamamlanmadığını güvenle varsayabilirsiniz:
done = False
Şimdi, alındığında sürekli tanımayı evt
durdurmak için bir geri çağırma oluşturun. Aşağıdaki noktaları göz önünde bulundurun:
- Alındığında
evt
,evt
ileti yazdırılır. - Alındıktan sonra
evt
tanımayı durdurmak için stop_continuous_recognition() çağrılır. - Tanıma durumu olarak
True
değiştirilir.
def stop_cb(evt):
print('CLOSING on {}'.format(evt))
speech_recognizer.stop_continuous_recognition()
nonlocal done
done = True
Aşağıdaki kod örneği, geri çağırmaların öğesinden SpeechRecognizer
gönderilen olaylara nasıl bağlanacaklarını gösterir. Olaylar şunlardır:
recognizing
: Ara tanıma sonuçları içeren olaylar için sinyal.recognized
: Başarılı bir tanıma girişimini gösteren son tanıma sonuçlarını içeren olaylar için sinyal.session_started
: Tanıma oturumunun (işlem) başladığını gösteren olaylar için sinyal.session_stopped
: Tanıma oturumunun (işlem) sonunu gösteren olaylar için sinyal.canceled
: İptal edilen tanıma sonuçlarını içeren olaylar için sinyal. Bu sonuçlar, doğrudan iptal isteğinin sonucu olarak iptal edilen bir tanıma girişimini gösterir. Alternatif olarak, bir aktarım veya protokol hatası olduğunu gösterirler.
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)
Her şey ayarlandıysa start_continuous_recognition() öğesini çağırabilirsiniz:
speech_recognizer.start_continuous_recognition()
while not done:
time.sleep(.5)
Kaynak dili değiştirme
Konuşma tanıma için sık kullanılan bir görev, giriş (veya kaynak) dilini belirtmektir. Aşağıdaki örnekte giriş dilinin Almanca olarak nasıl değiştireceği gösterilmektedir. Kodunuzda örneğinizi SpeechConfig
bulun ve bu satırı doğrudan altına ekleyin:
speech_config.speech_recognition_language="de-DE"
speech_recognition_language
bir dizeyi bağımsız değişken olarak alan bir parametredir. Desteklenen yerel ayarların listesi için bkz . Konuşma hizmeti için dil ve ses desteği.
Dil belirleme
Bir ses kaynağında dili tanımlamanız ve ardından metne dönüştürmeniz gerektiğinde Konuşmadan metne tanıma ile dil tanımlamayı kullanabilirsiniz.
Eksiksiz bir kod örneği için bkz . Dil belirleme.
Özel uç nokta kullanma
Özel konuşma ile kendi verilerinizi karşıya yükleyebilir, özel bir modeli test edebilir ve eğitebilir, modeller arasındaki doğruluğu karşılaştırabilir ve modeli özel uç noktaya dağıtabilirsiniz. Aşağıdaki örnekte özel uç noktanın nasıl ayarlanacağı gösterilmektedir.
speech_config = speechsdk.SpeechConfig(subscription="YourSubscriptionKey", region="YourServiceRegion")
speech_config.endpoint_id = "YourEndpointId"
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
Kapsayıcı çalıştırma ve kullanma
Konuşma kapsayıcıları, Konuşma SDK'sı ve Konuşma CLI'sı aracılığıyla erişilen websocket tabanlı sorgu uç noktası API'leri sağlar. Varsayılan olarak, Konuşma SDK'sı ve Konuşma CLI'sı genel Konuşma hizmetini kullanır. Kapsayıcıyı kullanmak için başlatma yöntemini değiştirmeniz gerekir. Anahtar ve bölge yerine kapsayıcı ana bilgisayar URL'si kullanın.
Kapsayıcılar hakkında daha fazla bilgi için bkz. Docker ile Konuşma kapsayıcılarını yükleme ve çalıştırma makalesindeki Konak URL'leri.
Anlam segmentasyonu
Anlamsal segmentasyon, sessizliğe dayalı segmentlere ayırmayla ilişkili sorunları azaltmak için tasarlanmış bir konuşma tanıma segmentasyonu stratejisidir:
- Alt segmentlere ayırma: Kullanıcılar duraksama olmadan uzun süre konuştuğunda, kesme olmadan uzun bir metin dizisi ("metin duvarı") görebilir ve bu da okunabilirlik deneyimlerini ciddi ölçüde düşürür.
- Fazla segmentlere ayırma: Kullanıcı kısa bir süre durakladığında, sessizlik algılama mekanizması yanlış segmentlere ayırabilir.
Sessiz kalma zaman aşımlarına güvenmek yerine, anlamsal segmentlere ayırma segmentleri ve cümle sonu noktalama işaretlerini ('.' veya '?' gibi) algıladığında nihai sonuçları döndürür. Bu, daha yüksek kaliteli, sembolik olarak tamamlanmış segmentlerle kullanıcı deneyimini geliştirir ve uzun ara sonuçları önler.
Anlamsal segmentasyon kullanmak için, oluşturmak SpeechRecognizer
için kullanılan örnekte aşağıdaki özelliği SpeechConfig
ayarlamanız gerekir:
speech_config.set_property(speechsdk.PropertyId.Speech_SegmentationStrategy, "Semantic")
Anlamsal segmentasyon sınırlamalarından bazıları şunlardır:
- Anlamsal segmentasyonu kullanmak için Konuşma SDK'sı sürüm 1.41 veya üzeri gerekir.
- Anlamsal segmentasyon yalnızca sürekli tanımada kullanılmak üzere tasarlanmıştır. Buna transkripsiyon ve açıklamalı alt yazı gibi senaryolar dahildir. Tek tanıma ve dikte modunda kullanılmamalıdır.
- Anlamsal segmentlere ayırma tüm diller ve yerel ayarlar için kullanılamaz. Semantik segmentasyon şu anda yalnızca en-US, en-GB, en-IN ve en-AU gibi İngilizce (en) yerel ayarlar için kullanılabilir.
- Anlamsal segmentasyon henüz güvenilirlik puanlarını ve NBest listelerini desteklemez. Bu nedenle, güvenilirlik puanlarını veya NBest listelerini kullanıyorsanız anlamsal segmentlere ayırmayı önermeyiz.
Metne konuşma REST API başvurusu | Kısa ses başvurusu için metin REST API'sine konuşma | GitHub'da ek örnekler
Bu nasıl yapılır kılavuzunda, gerçek zamanlı konuşmayı metne dönüştürme için Azure AI Konuşma'yı kullanmayı öğreneceksiniz. Gerçek zamanlı konuşma tanıma, dikte, çağrı merkezi yardımı ve canlı toplantılar için açıklamalı alt yazı gibi anında transkripsiyon gerektiren uygulamalar için idealdir.
Örnek bir uygulama için ortamı ayarlamayı öğrenmek için bkz . Hızlı Başlangıç: Konuşmayı tanıma ve metne dönüştürme.
Konuşmayı metne dönüştürme
Komut isteminde aşağıdaki komutu çalıştırın. Komutuna aşağıdaki değerleri ekleyin:
- Konuşma kaynağı için abonelik anahtarınız
- Konuşma hizmeti bölgeniz
- Giriş ses dosyasının yolu
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'
Aşağıdaki örneğe benzer bir yanıt almanız gerekir:
{
"RecognitionStatus": "Success",
"DisplayText": "My voice is my passport, verify me.",
"Offset": 6600000,
"Duration": 32100000
}
Daha fazla bilgi için bkz . Konuşmayı metne dönüştürme REST API başvurusu.
Bu nasıl yapılır kılavuzunda, gerçek zamanlı konuşmayı metne dönüştürme için Azure AI Konuşma'yı kullanmayı öğreneceksiniz. Gerçek zamanlı konuşma tanıma, dikte, çağrı merkezi yardımı ve canlı toplantılar için açıklamalı alt yazı gibi anında transkripsiyon gerektiren uygulamalar için idealdir.
Örnek bir uygulama için ortamı ayarlamayı öğrenmek için bkz . Hızlı Başlangıç: Konuşmayı tanıma ve metne dönüştürme.
Mikrofondan konuşmayı tanıma
Bilgisayarınızın mikrofonu takın ve açın. Mikrofonu da kullanabilecek tüm uygulamaları kapatın. Bazı bilgisayarlarda yerleşik mikrofon bulunurken, bazıları için bluetooth cihazının yapılandırılması gerekir.
Artık mikrofonunuzdan konuşmayı tanımak için Konuşma CLI'sini çalıştırmaya hazırsınız. Komut satırından Konuşma CLI ikili dosyasını içeren dizine geçin. Sonra şu komutu çalıştırın:
spx recognize --microphone
Not
Konuşma CLI'sı varsayılan olarak İngilizce olur. Konuşmadan metin tablosuna farklı bir dil seçebilirsiniz. Örneğin, Almanca konuşmayı tanımak için ekleyin --source de-DE
.
Mikrofona konuşun ve sözcüklerinizin metne transkripsiyonunu gerçek zamanlı olarak görebilirsiniz. Konuşma CLI'si bir süre sessizlik süresinden sonra veya Ctrl+C'yi seçtiğinizde durur.
Dosyadan konuşma tanıma
Konuşma CLI'sı konuşmaları birçok dosya biçiminde ve doğal dilde tanıyabilir. Bu örnekte, İngilizce konuşma içeren herhangi bir .wav dosyasını (16 kHz veya 8 kHz, 16 bit ve mono PCM) kullanabilirsiniz. Hızlı bir örnek istiyorsanız, whatstheweatherlike.wav dosyasını indirin ve Konuşma CLI ikili dosyasıyla aynı dizine kopyalayın.
Ses dosyasında bulunan konuşmayı tanımak üzere Konuşma CLI'sini çalıştırmak için aşağıdaki komutu kullanın:
spx recognize --file whatstheweatherlike.wav
Not
Konuşma CLI'sı varsayılan olarak İngilizce olur. Konuşmadan metin tablosuna farklı bir dil seçebilirsiniz. Örneğin, Almanca konuşmayı tanımak için ekleyin --source de-DE
.
Konuşma CLI'sı, ekrandaki konuşmanın metin dökümünü gösterir.
Kapsayıcı çalıştırma ve kullanma
Konuşma kapsayıcıları, Konuşma SDK'sı ve Konuşma CLI'sı aracılığıyla erişilen websocket tabanlı sorgu uç noktası API'leri sağlar. Varsayılan olarak, Konuşma SDK'sı ve Konuşma CLI'sı genel Konuşma hizmetini kullanır. Kapsayıcıyı kullanmak için başlatma yöntemini değiştirmeniz gerekir. Anahtar ve bölge yerine kapsayıcı ana bilgisayar URL'si kullanın.
Kapsayıcılar hakkında daha fazla bilgi için bkz. Docker ile Konuşma kapsayıcılarını yükleme ve çalıştırma makalesindeki Konak URL'leri.