Speech-to-Text, konuşulan sesi yazılı metne dönüştürür. Google Cloud bunu bir gRPC hizmeti olarak sunar ve sgcWebSockets Enterprise, genel TsgcGRPCClient üzerine kurulu türlü bir Speech istemcisi içerir, böylece sesi doğrudan Delphi ve C++Builder'dan deşifre edebilirsiniz. Birkaç özellikle bir tanıma isteği oluşturur, onu gRPC üzerinden gönderir ve dökümü geri okursunuz; harici bir çalışma zamanı veya elle yazılmış protobuf gerekmez.
Nasıl çalışır
gRPC, HTTP/2 üzerinde çerçevelenmiş Protocol Buffers mesajlarıdır, bu nedenle Speech istemcisi kütüphanenin geri kalanıyla aynı taşıma üzerinde çalışır. Bir TsgcHTTP2Client, speech.googleapis.com:443 adresine bir TLS bağlantısı açar, bir TsgcGRPCClient onun üzerinde gRPC çerçevelemesini ve trailer'ları işler ve sgcGRPC_Google_Speech içindeki türlü Speech mesajları istek ve yanıtı sizin için serileştirir ve ayrıştırır.
Google Cloud API'leri kimlik doğrulamalıdır. Bir hizmet hesabıyla kimlik doğrulaması yapar, JSON anahtarını kısa ömürlü bir bearer belirteciyle takas eder ve bu belirteci her çağrıda gRPC meta verisi olarak gönderirsiniz. İsteğin kendisi, bir RecognitionConfig (dil, kodlama, örnekleme hızı) ile birlikte ses, satır içi baytlar veya bir Cloud Storage URI'sidir. Hizmet, her biri bir güven puanıyla sıralanmış döküm alternatifleri tutan bir veya daha fazla sonuçla yanıt verir.
Bir hizmet hesabıyla kimlik doğrulama
Google Cloud istemcisi, bir hizmet hesabı JSON anahtarını bir bearer belirtecine dönüştürür. Anahtarı yükleyin, JWT özelliklerini ayarlayın ve kendinden imzalı belirtecin kabul edilmesi için hedef kitleyi Speech uç noktasına bağlayın. Belirteç geldikten sonra, onu gRPC istemcisinin DefaultMetadata'sına bir authorization üst bilgisi olarak ekleyin; bu, ardından her çağrıda taşınır.
uses
sgcHTTP2_Client, sgcGRPC_Client, sgcGRPC_Types,
sgcHTTP_Google_Cloud, sgcGRPC_Google_Speech;
// service-account JWT authentication
Cloud.GoogleCloudOptions.Authentication := gcaJWT;
Cloud.GoogleCloudOptions.JWT.ClientEmail := ClientEmail;
Cloud.GoogleCloudOptions.JWT.PrivateKeyId := PrivateKeyId;
Cloud.GoogleCloudOptions.JWT.PrivateKey.Text := PrivateKey;
Cloud.GoogleCloudOptions.JWT.ProjectId := ProjectId;
// self-signed service-account JWT is audience-bound to the Speech endpoint
Cloud.GoogleCloudOptions.JWT.API_Endpoint := 'https://speech.googleapis.com/';
// once the token is acquired, send it on every gRPC call
GRPC.DefaultMetadata.Clear;
GRPC.DefaultMetadata.Add('authorization', 'Bearer ' + Token);
gRPC istemcisini bağlama
Kanal, bir HTTP/2 bağlantısıdır. TLS etkinken bir TsgcHTTP2Client'ı Speech ana bilgisayarına yönlendirin, onu gRPC bileşeninin Client özelliğine atayın ve hat içerik türünü seçin. Speech hizmeti Protocol Buffers konuşur, bu nedenle sıkıştırma olmadan grpcProto kullanın.
HTTP2 := TsgcHTTP2Client.Create(nil);
HTTP2.Host := 'speech.googleapis.com';
HTTP2.Port := 443;
HTTP2.TLS := True;
GRPC := TsgcGRPCClient.Create(nil);
GRPC.Client := HTTP2;
GRPC.ChannelOptions.ContentType := grpcProto;
GRPC.ChannelOptions.Compression := grpcNoCompression;
HTTP2.Active := True;
Sesi tanıma ve dökümü okuma
Deşifre etmek için bir TsgcGRPCSpeechRecognizeRequest oluşturun. Config'i dil kodu, kodlama ve örnekleme hızıyla doldurun, Audio.Uri'yi bir Cloud Storage nesnesine yönlendirin (veya satır içi baytlarla Audio.Content'i ayarlayın) ve google.cloud.speech.v1.Speech hizmetinde Recognize'ı çağırın. İstek kendini ToBytes ile serileştirir ve yanıt, sonuçlar ve alternatifler için üzerinde gezinebileceğiniz türlü bir yanıta geri ayrıştırılır.
var
oRequest: TsgcGRPCSpeechRecognizeRequest;
oResponse: TsgcGRPCResponse;
oSpeech: TsgcGRPCSpeechRecognizeResponse;
oResult: TsgcGRPCSpeechRecognitionResult;
oAlt: TsgcGRPCSpeechRecognitionAlternative;
i, j: Integer;
begin
oRequest := TsgcGRPCSpeechRecognizeRequest.Create;
try
oRequest.Config.Encoding := 0; // 0 = ENCODING_UNSPECIFIED, let the API detect
oRequest.Config.SampleRateHertz := 16000;
oRequest.Config.LanguageCode := 'en-US';
oRequest.Config.EnableAutomaticPunctuation := True;
oRequest.Audio.Uri := 'gs://my-bucket/audio.flac';
oResponse := GRPC.Call('google.cloud.speech.v1.Speech', 'Recognize',
oRequest.ToBytes);
finally
oRequest.Free;
end;
if oResponse.StatusCode <> grpcOK then
begin
ShowMessage('gRPC error: ' + oResponse.StatusMessage);
Exit;
end;
oSpeech := TsgcGRPCSpeechRecognizeResponse.Create;
try
oSpeech.LoadFromBytes(oResponse.Data);
for i := 0 to oSpeech.ResultCount - 1 do
begin
oResult := oSpeech.ResultItem(i);
for j := 0 to oResult.AlternativeCount - 1 do
begin
oAlt := oResult.Alternative(j);
Memo1.Lines.Add('Transcript: ' + oAlt.Transcript);
Memo1.Lines.Add('Confidence: ' + FloatToStr(oAlt.Confidence));
end;
end;
finally
oSpeech.Free;
end;
end;
Tanıma yapılandırması
İstekteki Config nesnesi, doğrudan Google'ın RecognitionConfig mesajına eşlenir. Dil ve örnekleme hızının ötesinde, sıralanmış varyantlar istemek için MaxAlternatives, rahatsız edici kelimeleri maskelemek için ProfanityFilter, çok kanallı ses için AudioChannelCount, okunabilir çıktı için EnableAutomaticPunctuation ve ayarlanmış bir tanıma modeli seçmek için Model ayarlayabilirsiniz. Her özellik isteğe bağlıdır ve yalnızca ayarlandığında hatta gönderilir, böylece yalnızca ihtiyacınız olanı gönderirsiniz.
Satır içi ses veya bir Cloud Storage URI'si
Kısa klipler isteğin içinde taşınabilir: ham ses baytlarını Audio.Content'e atayın; istemci bunları protobuf'a gömer. Daha uzun dosyalar için, sesi bir bucket'a yükleyin ve bunun yerine Audio.Uri'yi bir gs:// yoluna ayarlayın; bu, isteği küçük tutar ve Google'ın nesneyi doğrudan okumasına izin verir. İkisi birbirini dışlar, belirli bir istekte birini veya diğerini ayarlarsınız.
Sonuçlar ve alternatifler
Bir yanıt, tanınan her ses segmenti için bir tane olmak üzere bir sonuç listesidir. Her sonuç, en olası döküm önce ve 0 ile 1 arasında bir Confidence puanı olacak şekilde olasılığa göre sıralanmış bir veya daha fazla alternatif taşır. Hepsini okumak için ResultCount ve AlternativeCount üzerinde yineleyin veya en iyi tahmin için yalnızca ilk sonucun ilk alternatifini alın. Türlü yardımcılar protobuf ayrıştırmasını yapar, böylece düz Delphi dizeleri ve kayan noktalı sayılarla çalışırsınız.
Kullanılabilirlik
Türlü Speech-to-Text gRPC istemcisi, sgcWebSockets Enterprise sürümünün bir parçasıdır ve Windows, macOS, Linux, iOS ve Android üzerinde çalışır. Bu makalenin dayandığı, çalıştırılmaya hazır bir örnek Demos\21.GRPC\11.Speech_to_Text içinde yer alır ve tam referans gRPC Client ürün sayfasında bulunur.
Sorularınız veya geri bildirimleriniz mi var? Bize ulaşın. Kodu yazan kişilerden bir yanıt alacaksınız.
