Python ile Speech-to-Text API'yi kullanma

1. Genel Bakış

9e7124a578332fed.png

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

Bu eğiticide, Speech-to-Text API'yi Python ile kullanmaya odaklanacaksınız.

Neler öğreneceksiniz?

  • Ortamınızı ayarlama
  • İ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 projesi
  • Chrome veya Firefox gibi bir tarayıcı
  • Python kullanma konusunda bilgi sahibi olma

Anket

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

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

Python ile ilgili deneyiminizi nasıl değerlendirirsiniz?

Yeni başlayan Orta düzey Uzman

Google Cloud hizmetleriyle ilgili deneyiminizi nasıl değerlendirirsiniz?

Başlangıç Orta İleri

2. Kurulum ve şartlar

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.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.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 bulutta çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız.

Cloud Shell'i etkinleştirme

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

3c1dabeca90e44e5.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.

9c92662c6a846a5c.png

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

9f0e51b578fecce5.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. Ortam kurulumu

Speech-to-Text API'yi kullanmaya başlamadan önce API'yi etkinleştirmek için Cloud Shell'de aşağıdaki komutu çalıştırın:

gcloud services enable speech.googleapis.com

Aşağıdakine benzer bir tablo görürsünüz:

Operation "operations/..." finished successfully.

Artık Speech-to-Text API'yi kullanabilirsiniz.

Ana dizininize gidin:

cd ~

Bağımlılıkları izole etmek için Python sanal ortamı oluşturun:

virtualenv venv-speech

Sanal ortamı etkinleştirin:

source venv-speech/bin/activate

IPython'ı ve Speech-to-Text API istemci kitaplığını yükleyin:

pip install ipython google-cloud-speech

Aşağıdakine benzer bir tablo görürsünüz:

...
Installing collected packages: ..., ipython, google-cloud-speech
Successfully installed ... google-cloud-speech-2.25.1 ...

Artık Speech-to-Text API istemci kitaplığını kullanmaya hazırsınız.

Sonraki adımlarda, önceki adımda yüklediğiniz IPython adlı etkileşimli bir Python yorumlayıcısı kullanacaksınız. Cloud Shell'de ipython komutunu çalıştırarak bir oturum başlatın:

ipython

Aşağıdakine benzer bir tablo görürsünüz:

Python 3.9.2 (default, Feb 28 2021, 17:03:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.18.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

İlk isteğinizi göndermeye hazırsınız...

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

Bu bölümde, İngilizce bir ses dosyasını metne dönüştüreceksiniz.

Aşağıdaki kodu IPython oturumunuza kopyalayın:

from google.cloud import speech


def speech_to_text(
    config: speech.RecognitionConfig,
    audio: speech.RecognitionAudio,
) -> speech.RecognizeResponse:
    client = speech.SpeechClient()

    # Synchronous speech recognition request
    response = client.recognize(config=config, audio=audio)

    return response


def print_response(response: speech.RecognizeResponse):
    for result in response.results:
        print_result(result)


def print_result(result: speech.SpeechRecognitionResult):
    best_alternative = result.alternatives[0]
    print("-" * 80)
    print(f"language_code: {result.language_code}")
    print(f"transcript:    {best_alternative.transcript}")
    print(f"confidence:    {best_alternative.confidence:.0%}")
    

Kodu incelemek ve ses dosyasını yazıya dökmek için recognize istemci kitaplığı yönteminin nasıl kullanıldığını görmek için bir dakikanızı ayırın. config parametresi, isteğin nasıl işleneceğini belirtir. audio parametresi ise tanınacak ses verilerini belirtir.

İstek gönderme:

config = speech.RecognitionConfig(
    language_code="en",
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/brooklyn_bridge.flac",
)

response = speech_to_text(config, audio)
print_response(response)

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

--------------------------------------------------------------------------------
language_code: en-us
transcript:    how old is the Brooklyn Bridge
confidence:    98%

Otomatik noktalama işaretlerini etkinleştirmek için yapılandırmayı güncelleyin ve yeni bir istek gönderin:

config.enable_automatic_punctuation = True

response = speech_to_text(config, audio)
print_response(response)

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

--------------------------------------------------------------------------------
language_code: en-us
transcript:    How old is the Brooklyn Bridge?
confidence:    98%

Özet

Bu adımda, farklı parametreler kullanarak İngilizce bir ses dosyasının transkriptini oluşturup sonucu yazdırabildiniz. Ses dosyalarını metne dönüştürme hakkında daha fazla bilgi edinebilirsiniz.

5. Word zaman damgalarını alma

Speech-to-Text, transkribe edilen sesin zaman farklarını (zaman damgaları) 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.

Ses dosyasını kelime zaman damgalarıyla transkribe etmek için aşağıdaki kodu IPython oturumunuza kopyalayarak kodunuzu güncelleyin:

def print_result(result: speech.SpeechRecognitionResult):
    best_alternative = result.alternatives[0]
    print("-" * 80)
    print(f"language_code: {result.language_code}")
    print(f"transcript:    {best_alternative.transcript}")
    print(f"confidence:    {best_alternative.confidence:.0%}")
    print("-" * 80)
    for word in best_alternative.words:
        start_s = word.start_time.total_seconds()
        end_s = word.end_time.total_seconds()
        print(f"{start_s:>7.3f} | {end_s:>7.3f} | {word.word}")
        

Kodu inceleyerek kelime zaman damgalarıyla* ses dosyasını nasıl yazıya döktüğünü görün. enable_word_time_offsets parametresi, API'ye her kelimenin zaman farklarını döndürmesini söyler (daha fazla bilgi için belgeye bakın).

İstek gönderme:

config = speech.RecognitionConfig(
    language_code="en",
    enable_automatic_punctuation=True,
    enable_word_time_offsets=True,
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/brooklyn_bridge.flac",
)

response = speech_to_text(config, audio)
print_response(response)

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

--------------------------------------------------------------------------------
language_code: en-us
transcript:    How old is the Brooklyn Bridge?
confidence:    98%
--------------------------------------------------------------------------------
  0.000 |   0.300 | How
  0.300 |   0.600 | old
  0.600 |   0.800 | is
  0.800 |   0.900 | the
  0.900 |   1.100 | Brooklyn
  1.100 |   1.400 | Bridge?

Özet

Bu adımda, kelime zaman damgalarıyla İngilizce bir ses dosyasını yazıya döktünüz ve sonucu yazdırdınız. Word zaman damgalarını alma hakkında daha fazla bilgi edinin.

6. Farklı dillerde transkripsiyon yapma

Speech-to-Text API, 125'ten fazla dili ve lehçeyi tanır. Desteklenen dillerin listesini burada bulabilirsiniz.

Bu bölümde, Fransızca bir ses dosyasını metne dönüştüreceksiniz.

Fransızca ses dosyasını transkribe etmek için aşağıdaki kodu kopyalayıp IPython oturumunuza yapıştırarak kodunuzu güncelleyin:

config = speech.RecognitionConfig(
    language_code="fr-FR",
    enable_automatic_punctuation=True,
    enable_word_time_offsets=True,
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/corbeau_renard.flac",
)

response = speech_to_text(config, audio)
print_response(response)

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

--------------------------------------------------------------------------------
language_code: fr-fr
transcript:    Maître corbeau sur un arbre perché Tenait dans son bec un fromage maître Renard par l'odeur alléché lui tint à peu près ce langage et bonjour monsieur du corbeau.
confidence:    94%
--------------------------------------------------------------------------------
  0.000 |   0.700 | Maître
  0.700 |   1.100 | corbeau
  1.100 |   1.300 | sur
  1.300 |   1.600 | un
  1.600 |   1.700 | arbre
  1.700 |   2.000 | perché
  2.000 |   3.000 | Tenait
  3.000 |   3.000 | dans
  3.000 |   3.200 | son
  3.200 |   3.500 | bec
  3.500 |   3.700 | un
  3.700 |   3.800 | fromage
...
 10.800 |  11.800 | monsieur
 11.800 |  11.900 | du
 11.900 |  12.100 | corbeau.

Özet

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

7. Tebrikler!

9e7124a578332fed.png

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

Temizleme

Geliştirme ortamınızda yer açmak için Cloud Shell'de:

  • IPython oturumunuz hâlâ açıksa kabuğa geri dönün: exit
  • Python sanal ortamını kullanmayı durdurun: deactivate
  • Sanal ortam klasörünüzü silin: cd ~ ; rm -rf ./venv-speech

Google Cloud projenizi silmek için Cloud Shell'de:

  • Mevcut proje kimliğinizi alın: PROJECT_ID=$(gcloud config get-value core/project)
  • Silmek istediğiniz projenin echo $PROJECT_ID olduğundan emin olun.
  • Projeyi silme: gcloud projects delete $PROJECT_ID

Daha fazla bilgi

Lisans

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