Speech-to-Text API'yi C# ile kullanma

1. Genel Bakış

Google Cloud Speech-to-Text API, kullanımı kolay bir API ile güçlü nöral ağ modelleri uygulayarak geliştiricilerin 120 dil ve lehçede sesi metne dönüştürmesini sağlar.

Bu codelab'de Speech-to-Text API'yi C# ile kullanmaya odaklanacaksınız. İngilizce ve diğer dillerdeki ses dosyalarını transkripsiyon için Cloud Speech-to-Text API'ye nasıl göndereceğinizi öğreneceksiniz.

Neler öğreneceksiniz?

  • Cloud Shell'i kullanma
  • Speech-to-Text API'yi etkinleştirme
  • API isteklerinin kimliğini doğrulama
  • C# için Google Cloud istemci kitaplığını yükleme
  • İngilizce ses dosyalarını metne dönüştürme
  • Ses dosyalarını kelime zaman damgalarıyla metne dönüştürme
  • Farklı dillerdeki ses dosyalarını metne dönüştürme

Gerekenler

  • Google Cloud Platform projesi
  • Chrome veya Firefox gibi bir tarayıcı
  • C# kullanma konusunda bilgi sahibi olma

Anket

Bu eğitimi nasıl kullanacaksınız?

Yalnızca okuyun Okuyun ve alıştırmaları tamamlayın

C# ile ilgili deneyiminizi nasıl değerlendirirsiniz?

Yeni başlayan Orta düzey Uzman

Google Cloud Platform hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?

Başlangıç Orta İleri

2. Kurulum ve Gereksinimler

Yönlendirmesiz ortam kurulumu

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır.
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Cloud Shell'i başlatma

Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

Cloud Shell'i etkinleştirme

  1. Cloud Console'da Cloud Shell'i etkinleştir 'i d1264ca30785e435.png tıklayın.

cb81e7c8e34bc8d.png

Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara ekran gösterildiyse Devam'ı tıklayın.

d95252b003979716.png

Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.

7833d5e1c5d18f54.png

Bu sanal makineye, ihtiyaç duyacağınız tüm geliştirme araçları yüklenmiştir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki çalışmalarınızın neredeyse tamamını tarayıcıyla yapabilirsiniz.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, proje kimliğinize ayarlandığını görürsünüz.

  1. Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu komutu çalıştırın:
gcloud auth list

Komut çıkışı

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Değilse şu komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. Speech-to-Text API'yi etkinleştirme

Speech-to-Text API'yi kullanmaya başlamadan önce API'yi etkinleştirmeniz gerekir. API'yi Cloud Shell'de aşağıdaki komutu kullanarak etkinleştirebilirsiniz:

gcloud services enable speech.googleapis.com

4. Google Cloud Speech-to-Text API'nin C# istemci kitaplığını yükleme

Öncelikle Speech-to-Text API örneklerini çalıştırmak için kullanacağınız basit bir C# konsol uygulaması oluşturun:

dotnet new console -n SpeechToTextApiDemo

Uygulamanın oluşturulduğunu ve bağımlılıkların çözüldüğünü görmelisiniz:

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

Ardından SpeechToTextApiDemo klasörüne gidin:

cd SpeechToTextApiDemo/

Ayrıca projeye Google.Cloud.Speech.V1 NuGet paketini ekleyin:

dotnet add package Google.Cloud.Speech.V1
info : Adding PackageReference for package 'Google.Cloud.Speech.V1' into project '/home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj'.
log  : Restoring packages for /home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.Speech.V1' version '1.0.1' added to file '/home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj'.

Artık Speech-to-Text API'yi kullanmaya hazırsınız.

5. Ses dosyalarını metne dönüştürme

Bu bölümde, önceden kaydedilmiş bir İngilizce ses dosyasını metne dönüştüreceksiniz. Ses dosyası Google Cloud Storage'da kullanılabilir.

Bir ses dosyasını metne dönüştürmek için Cloud Shell'in sağ üst kısmından kod düzenleyiciyi açın:

fd3fc1303e63572.png

SpeechToTextApiDemo klasöründeki Program.cs dosyasına gidin ve kodu aşağıdakilerle değiştirin:

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                SampleRateHertz = 16000,
                LanguageCode = LanguageCodes.English.UnitedStates
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-tests/speech/brooklyn.flac");         
            
            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine(alternative.Transcript);
                }
            }
        }
    }
}

Kodu inceleyip ses dosyasını transkribe etmek için kullanıldığını görmek için bir veya iki dakikanızı ayırın.

Encoding parametresi, ses dosyası için kullandığınız ses kodlama türünü API'ye bildirir. .raw dosyaları için kullanılan kodlama türü Flac'dir (kodlama türüyle ilgili daha fazla bilgi edinmek için dokümana göz atabilirsiniz).

RecognitionAudio nesnesinde, Cloud Storage'daki ses dosyamızın URI'sini veya ses dosyasının yerel dosya yolunu API'ye iletebilirsiniz. Burada bir Cloud Storage URI'si kullanıyoruz.

Cloud Shell'e dönüp uygulamayı çalıştırın:

dotnet run

Aşağıdaki çıkışı göreceksiniz:

how old is the Brooklyn Bridge

Özet

Bu adımda, İngilizce bir ses dosyasını yazıya döküp sonucu yazdırabildiniz. Metne dönüştürme hakkında daha fazla bilgi edinin.

6. Kelime zaman damgalarıyla metne dönüştürme

Speech-to-Text, transkribe edilen ses için zaman farkını (zaman damgası) algılayabilir. Zaman kaymaları, sağlanan ses dosyasındaki her konuşulan kelimenin başlangıcını ve sonunu gösterir. Zaman farkı değeri, sesin başlangıcından itibaren geçen süreyi 100 ms'lik artışlarla gösterir.

Zaman kaymaları içeren bir ses dosyasını transkribe etmek için SpeechToTextApiDemo klasöründeki Program.cs dosyasına gidin ve kodu aşağıdakilerle değiştirin:

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                SampleRateHertz = 16000,
                LanguageCode = LanguageCodes.English.UnitedStates,
                EnableWordTimeOffsets = true
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-tests/speech/brooklyn.flac");
     
            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine($"Transcript: { alternative.Transcript}");
                    Console.WriteLine("Word details:");
                    Console.WriteLine($" Word count:{alternative.Words.Count}");
                    foreach (var item in alternative.Words)
                    {
                        Console.WriteLine($"  {item.Word}");
                        Console.WriteLine($"    WordStartTime: {item.StartTime}");
                        Console.WriteLine($"    WordEndTime: {item.EndTime}");
                    }
                }
            }
        }
    }
}

Kodu incelemek için birkaç dakikanızı ayırın. Bu kodun, kelime zaman damgalarıyla ses dosyalarını yazıya dökmek için kullanıldığını göreceksiniz.*.* EnableWordTimeOffsets parametresi, API'ye zaman farklarını etkinleştirmesini söyler (daha fazla bilgi için dokümanı inceleyin).

Cloud Shell'e dönüp uygulamayı çalıştırın:

dotnet run

Aşağıdaki çıkışı göreceksiniz:

dotnet run

Transcript: how old is the Brooklyn Bridge
Word details:
 Word count:6
  how
    WordStartTime: "0s"
    WordEndTime: "0.300s"
  old
    WordStartTime: "0.300s"
    WordEndTime: "0.600s"
  is
    WordStartTime: "0.600s"
    WordEndTime: "0.800s"
  the
    WordStartTime: "0.800s"
    WordEndTime: "0.900s"
  Brooklyn
    WordStartTime: "0.900s"
    WordEndTime: "1.100s"
  Bridge
    WordStartTime: "1.100s"
    WordEndTime: "1.500s"

Özet

Bu adımda, İngilizce bir ses dosyasını kelime zaman damgalarıyla transkribe edip sonucu yazdırabildiniz. Kelime zaman damgalarıyla transkript oluşturma hakkında daha fazla bilgi edinin.

7. Farklı dillerde transkripsiyon yapma

Speech-to-Text API, 100'den fazla dilde transkripsiyonu destekler. Desteklenen dillerin listesini burada bulabilirsiniz.

Bu bölümde, önceden kaydedilmiş bir Fransızca ses dosyasını metne dönüştüreceksiniz. Ses dosyası Google Cloud Storage'da kullanılabilir.

Fransızca ses dosyasını metne dönüştürmek için SpeechToTextApiDemo klasöründeki Program.cs dosyasına gidin ve kodu aşağıdakilerle değiştirin:

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                LanguageCode = LanguageCodes.French.France
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-data/speech/corbeau_renard.flac");

            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine(alternative.Transcript);
                }
            }
        }
    }
}

Kodu incelemek ve ses dosyasını* metne dönüştürmek için nasıl kullanıldığını görmek üzere birkaç dakikanızı ayırın. LanguageCode parametresi, ses kaydının hangi dilde olduğunu API'ye bildirir.

Cloud Shell'e dönüp uygulamayı çalıştırın:

dotnet run

Aşağıdaki çıkışı göreceksiniz:

maître corbeau sur un arbre perché tenait en son bec un fromage

Bu cümle, popüler bir Fransız çocuk masalından alınmıştır.

Özet

Bu adımda, Fransızca bir ses dosyasını metne dönüştürüp sonucu yazdırabildiniz. Desteklenen diller hakkında daha fazla bilgi edinin.

8. Tebrikler!

Ses dosyalarında farklı türde transkripsiyon işlemleri yapmak için C# kullanarak Speech-to-Text API'yi nasıl kullanacağınızı öğrendiniz.

Temizleme

Bu hızlı başlangıçta kullanılan kaynaklar için Google Cloud Platform hesabınızın ücretlendirmesini önlemek amacıyla:

  • Cloud Platform Console'a gidin.
  • Kapatmak istediğiniz projeyi seçin, ardından üst kısımdaki "Sil"i tıklayın. Bu işlem, projenin silinmesini planlar.

Daha Fazla Bilgi

Lisans

Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.