Merhabalar,
Bu yazımızda Google Cloud Tools kullanarak %100 Türkçe ses algılama sistemini nasıl yaparız bundan bahsedeceğiz.
Google Cloud tools sayesinde başta yapay zeka ve veri madenciliği olmak üzere bir çok sistemin API’larını kendi projelerimize entegre ederek faydalanabilmekteyiz. Google bu hizmeti belirli sınırlar dahilinde ücretsiz olarak vermekte. Yazımızı adım adım takip ettiğinizde sizde Türkçe konuşma algılama sistemine sahip olabilir, çeşitli sinir ağları yardımıyla kendi kişisel asistanlarınızı üretebilirsiniz. Lafı fazla uzatmadan adım adım anlatımıma başlıyorum.
Google Cloud Platform & Tools
Cloud Platform Hesap Oluşturma ve API Ayarları
İlk olarak IDE’mize gerekli toolkit’i kurarak başlayacağız. Bunun için gerekli olan bazı hususlar mevcut. Örneğin Google Cloud Platforms üzerinde bir hesabınızın olması ve bu hesabın aktif edilmiş olması gerekmekte. Aktif edilme aşamasında Google sizden hesap doğrulaması için kredi kartı bilgilerinizi talep edebilir. Unutmayın ki belirli limitler dahilinde bu platform ücretsiz olduğundan bilgilerini vermiş olduğunuz kredi kartından herhangi işlem yapılmayacaktır. Üyeliğinizin olmadığını/aktifleştirilmediğini varsayarak aşağıdaki adrese gideek üyeliğimizi oluşturup aktif ediyoruz.
Üyeliğimizi oluşturup aktifleştirdikten sonra yeni bir proje ekliyoruz. Google Cloud Console’da bulunan sol taraftaki Gezinme menüsünde gerekli bilgiyi bulabilirsiniz. Yeni bir proje eklememizin ardından API ve Kimlik ayarlarını tanımlamamız gerekiyor. Bunun için projenize giriş yaptıktan sonra soldaki gezinme menüsünü açtıp; API’ler ve Hizmetler >> Kimlik Bilgileri yolunu izleyebilirsiniz.Aşağıdaki resime bakarak nasıl ulaşacağinizi detaylı şekilde görebilirsiniz.
Bu menüye geldikten sonra projemizi tanımlaması için bir kimlik anahtarı üretmemiz gerekiyor. Bu işlem için Kimlik bilgilerini oluştur> API Anahtarı yolunu izlememiz gerekiyor. Daha detaylı bir görsel aşağıda verilmiştir.
İlgili kimliğin oluşturulmasının ardından karşınıza bir indirme dosyası çıkacak ve sizden dosyayı kaydetmeyi istediğiniz sorulacak. Buna evet diyerek dosyayı bilgisayarımıza indiriyoruz. Bu indirmiş olduğumuz .JSON dosyası projemizin cloud console için hangi uygulama olduğunu tanımada işimize yarayacak. Bu yüzden sonraki adımlar için saklıyoruz.
Google Cloud Tools Kurulumu
Bir önceki adımı tamamlamamızın ardından artık IDE’mize Google Cloud Tools kurabiliriz. Anlatımım C# üzerinde olacağından ben Visual Studio üzerinde bir kurulum örneği gösterceğim. Bunun için Visual Studio ekranınızda Tools>> Extensions and Updates seçeneğine tıklıyoruz. Bir sonraki adımda ise Online seçeneğine tıklayıp arama kısmına Google Cloud Tools for Visual Studio yazıyoruz. Karşımıza gelen eklentiyi Install diyerek kuruyoruz ve IDE’mizi yeniden başlatıyoruz. Detaylı resim aşağıda verilmiştir.
Bu konudaki Google Cloud Platforms klavuzunu okumak için aşağıdaki linke gidebilirsiniz.
Bu adımı tamamlamamız ile birlikte artık işimizi Visual Studio üzerinde sürdüreceğiz.
Visual Studio İşlemleri
Manage Accounts
Kurulum işlemini tamamladıktan sonra artık Visual Studio’muzda Tools sekmesi altında yeni bir seçenek olan “Google Cloud Tools” seçeneğ gözükecektir. Bu adımda Tools > Google Cloud Tools > Manage Accounts yolunu izleyerek daha önce oluşturmuş olduğumuz Google Hesabımıza giriş yapıp tanıtmamız gerekiyor. Add Account diyerek hesabımızın girişini yapıyoruz.
Ardından açılan ekran aşağıdaki gibi olacaktır. Ben hesabımı önceden bağladığım için sizde herhangi bir hesap görünmeyecektir.
Bu işlemi tamamlamanızın ardından yeniden Tools >> Google Cloud Tools >>Show Google Cloud Explorer seçeneğine tıklıyoruz. Açılan menüde “Select Project” seçeneğine tıkladığımızda daha önce oluşturmuş olduğumuz projemizi görmemiz gerekiyor. Projemizi seçip OK tuşuna basıyoruz ve menüyü kapatıyoruz.
Bu ayarı tamamlamamızın ardından bir sonraki adıma geçebiliriz.
Google API Kimlik Bilgisi Tanıtmak
Bir önceki adımlarda indirmiş olduğumuz JSON dosyası bu adımda işize yarayacak. Package Manager Console’i açıyoruz(Bilmeyenler için View >> Other Windows >> Package Manager Console). Açılan komut ekranında aşağıdaki ki PowerShelll komutunu uyguluyoruz. Tırnak içinde verilmiş olan “C:\Users\UserName\Downloads\GoogleCloudPlatforms.json” yolu sizin indirmiş olduğunuz dosya yolu olmalıdır. Benim tırnak içinde vermiş olduğum yol tamamen örnektir.
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\UserName\Downloads\GoogleCloudPlatforms.json"
Yukarıdaki komutu yazdıktan sonra enter tuşuna basıyoruz ve bir sonraki adıma geçiyoruz. Bu komut işlemini farklı komut istemcileri tarafından da yapabilirsiniz. Bunun hakkındaki klavuza gitmek için aşağıdaki linke tıklayabilirsiniz.
Visual Studio Paketlerini Kurmak
Bu adımda uygulamamızın doğru çalışması için gerekli olan paketleri kurmamız gerekiyor. Bunun için Project >> Manage NuGet Packages seçeneğine tıklıyoruz ve Nuget ekranımızı açıyoruz.
Bu ekranda kurmamız gereken bazı paketler bulunuyor. Sırasıyla iki paketi de kuralım. İlki Google Speech paketi olacaktır. Bunun için arama kısmına “Google.Cloud.Speech.V1” yazıyoruz ve kuruyoruz.
Kurmamız gereken ilk paket yukarıda gösterilmiştir. Bir sonraki kurmamız gereken paket ise “NAudio” yazarak erişebilirsiniz. İlgili detay aşağıda verilmiştir.
Bu paketi kurmamızın ardından bu adımdaki işlemlerimiz tamamlamış olacaktır.
Gerekli Kütüphanelerin Tanımlanması
Bu adımdan itibaren artık kodlama aşamasına geçmiş bulunuyoruz. İlk olarak projemiz içinde kullanacağımız kütüphanelerin tanımlamasını yapıyoruz. İlgili tanımlanması gereken kütüphaneler aşağıda verilmiştir.
using Google.Apis.Auth.OAuth2; using Google.Cloud.Speech.V1; using Grpc.Auth; using Google.Apis.Services; using System.Net; using System.Media; using System.Diagnostics; using NAudio.Wave; using System.IO;
Yukarıdaki tanımlamaların ardından bir sonraki adıma geçebiliriz.
Değişkenlerin Oluşturulması
Bu adımda kullanacağımız değişkenlerin tanımlamalarını yapacağız. Bu değişkenler sayesinde algılama yapabilecek, verileri işleyeceğiz. İlgili tanımlama kalıpları aşağıda verilmiştir.
private BufferedWaveProvider bwp; WaveIn waveIn; WaveOut waveOut; WaveFileWriter writer; WaveFileReader reader; string output = "audio.raw";
Bu adımı tamamladığımızda kodlama işlemimize devam edebilecek ve tanımlama işlemleri yapabileceğiz.
Eventlerin Tanımlanması
Bu aşamada çeşitli olayları el ile tanımlamamız gerekmektedir. Bunlar waveIn ve waveOut tanımlayıcılarının olaylarıdır. İki farklı event tanımlaması yapacağız birincisi verinin mevcut olduğunda tetiklenecek olan event diğeri ise oynatma durdurulduğunda tespit edecek olan event’tir.
private void waveOut_PlaybackStopped(object sender, StoppedEventArgs e) { try { waveOut.Stop(); reader.Close(); reader = null; } catch { //Exception.. } }
Birinci event yukarıda verilmiştir, diğer tanımlanması gereken event ise aşağıdadır.
void waveIn_DataAvailable(object sender, WaveInEventArgs e) { bwp.AddSamples(e.Buffer, 0, e.BytesRecorded); }
Böylece bu adımı tamamlamış bulunuyoruz.
Bileşenleri Initialize Etmek
Bir önceki adımlarda oluşturmuş olduğumuz bileşenlerin başlangıç durumuna getirilmesi amacıyla ufak bir kaç kod yazmamız gerekmektedir. Yazılacak olan kodlar İlgili formun yapılandırıcı metoduna yazılmalıdır. İlgili kod parçası aşağıda verilmiştir.
waveOut = new WaveOut(); waveIn = new WaveIn(); waveIn.DataAvailable += new EventHandler<WaveInEventArgs>(waveIn_DataAvailable); waveIn.WaveFormat = new NAudio.Wave.WaveFormat(16000, 1); bwp = new BufferedWaveProvider(waveIn.WaveFormat); bwp.DiscardOnBufferOverflow = true;
Bileşenlerin Oluşturulması Ve Kodlanması
Uygulamamızın doğru çalışması ve doğru yanıt vermesi amacıyla aktif form ekranımıza iki adet Button, bir adet BackgroundWorker ve bir adet Textbox ekliyoruz. Adım adım bileşenlerin içini dolduracağız. İlk olarak bileşenlerimizin ne işe yaradığını açıklayalım.
-1. Button: Ses kaydı özelliğini başlatmak için kullanılacaktır.
-2. Button: Ses kaydı özelliğini durdurmak ve analiz işlemini başlatmak için kullanılacaktır.
-BackgroundWorker: Uygulamamızın takılmadan çalışması için ve multithread bir yapıya sahip olması amacıyla kullanılacaktır.
-TextBox: Algılanan sesin yazı karşılığını ekranda göstermek amacıyla kullanılacaktır.
Ses Algıla Butonu
Ses algıla butonunun click eventine aşağıda verilen kod parçası yerleştirilmelidir.
if (NAudio.Wave.WaveIn.DeviceCount < 1) { MessageBox.Show("Etkin bir mikrofon bulamadım.", "Mikrofon Bağlı Değil", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } button1.Enabled = false; button2.Enabled = true; waveIn.StartRecording();
Sesi Analiz Et Butonu
Ses analiz et butonunun click eventine aşağıda verilen kod parçası yerleştirilmelidir.
backgroundWorker1.RunWorkerAsync();
Tabiki unutmadan bu butonun çalışması için backgroundWorker’ın içerisini doldurmamız gerekiyor.
BackgroundWorker Bileşeni
BackgroundWorker bileşeninin DoWork eventine aşağıdaki kod parçası yerleştirilmelidir.
Control.CheckForIllegalCrossThreadCalls = false; waveIn.StopRecording(); if (File.Exists("audio.raw")) File.Delete("audio.raw"); writer = new WaveFileWriter(output, waveIn.WaveFormat); byte[] buffer = new byte[bwp.BufferLength]; int offset = 0; int count = bwp.BufferLength; var read = bwp.Read(buffer, offset, count); if (count > 0) { writer.Write(buffer, offset, read); } waveIn.Dispose(); waveIn = null; writer.Close(); writer = null; reader = new WaveFileReader("audio.raw"); // (new MemoryStream(bytes)); waveOut.Init(reader); waveOut.PlaybackStopped += new EventHandler<StoppedEventArgs>(waveOut_PlaybackStopped); // waveOut.Play(); reader.Close(); if (File.Exists("audio.raw")) { var speech = SpeechClient.Create(); var response = speech.Recognize(new RecognitionConfig() { Encoding = RecognitionConfig.Types.AudioEncoding.Linear16, SampleRateHertz = 16000, LanguageCode = "tr", }, RecognitionAudio.FromFile("audio.raw")); textBox1.Text = ""; foreach (var result in response.Results) { foreach (var alternative in result.Alternatives) { textBox1.Text = textBox1.Text + " " + alternative.Transcript; } } MessageBox.Show("Tamamlandı. Algılanan: " + textBox1.Text); if (textBox1.Text.Length == 0) textBox1.Text = "Ses kaydı çok uzun ya da hiç ses algılanamadı."; } else { textBox1.Text = "Ses Dosyası Bulunamadı"; }
DoWork eventi içerisi doldurulduktan sonra bir sonraki adım olarak ise aynı BackgroundWorker bileşenimizin RunWorkerCompleted eventi içerisine aşağıdaki kod parçası yerleştirilmelidir.
waveIn = new WaveIn(); waveIn.DataAvailable += new EventHandler<WaveInEventArgs>(waveIn_DataAvailable); waveIn.WaveFormat = new NAudio.Wave.WaveFormat(16000, 1); }
Bu adımın tamamlanması ile birlikte uygulamamız çalışmaya hazır durumda olacaktır. Unutmayın ki ses algılama problemi yaşamamak için tüm ses driverlarınızın kurulu ve çalışır durumda olması gerekmektedir.
İlgili github projesine ulaşmak için aşağıdaki linke tıklayabilirsiniz.
Türkçe Konuşma Algılama on Github
Bana destek olmak için aşağıdan detaylı bir anlatım içeren klavuzumu satın alabilirsiniz.
Türkçe Konuşma Algılama Klavuzu by Google Books
Okuduğunuz için teşekkürler!
merhaba dediklerinizi sırasıyla yaptım başarılı bir şekilde derledi fakat sesi kaydetip konuşup bitirdikten sonra herhangi bir yazı çıkmıyor
Merhabalar, Breakpoint koyup servisin doğru çalıştığına emin olabilir misiniz?
Ben Json olarak indiremedim öyle bir seçenek çıkmadı yardım edebilir misiniz
Merhabalar, projenin cloud servislerine girdikten sonra sol taraftaki gezinme menüsünden “API’ler ve Hizmetler” kısmından “Kimlik Bilgileri” seçeneğine tıklamayı deneyin, ilgili json dosyasını oradaki anahtarlar listesinden indirebilirsiniz
Merhaba, bende de dosya indirme seçeneği çıkmadı. Belirttiğiniz adımları yapmam rağmen. Rica etsem indirilen (Json) dosya içeriğini paylaşabilir misiniz? Teşekür ederim.
Merhabalar,
İlgili dosya api’ye özel verildiğinden benim dosyamın size bir faydası olmayacaktır.
JSON Dosyasın indiremeyenler aşağıdaki linkten proje oluşturup indirebilirler.
https://cloud.google.com/speech-to-text/docs/quickstart-protocol
Merhabalar,
Bu konuda daha basit ve kod yazılımından anlamayanlar için tavsiye edebileceğiniz en verimli türkçe hazır ses çevirici program hangisidir acaba. Ben avukatım ve tükçeye hakim bu tarz canlı çeviri yapan bir program varsa fazlasıyla işime yarayacak. Bu konuda hangi programı tavsiye edersiniz acaba
Merhabalar,
Türkçeden canlı olarak dil işleme imkanı veren çeşitli uygulamalar tabi mevcut. Örnek vermek gerekirse Zemberek ile NLP yapabilirsiniz. Ayrıca bu konuda hayli ilerlemiş olan Google’ın teknolojilerini de kullanabilirsiniz. İlginiz için teşekkürler.
json dosyasını bir türlü indiremedim ya anahtar oluşturuluyor bir Anahtar keyi veriyor o kadar
Merhabalar,
Verilen keyi gcloud servisi üzerinde kayıt etmeyi ardından instance etmeyi denediniz mi?
Merhaba, bu kodu c# ile mi yazdınız
Merhaba, evet bu proje C# ile yazıldı.
algılanan sesi metne çevirip kaydedebiliyor muyuz? Yada bunun için önereceğiniz bir şey var mıdır?
Merhaba,
Tabiki bu başlıkta anlatılan yolu izlediğinizde konuşmadan yazıya veriyi çevirmeniz mümkün.
Merhabalar,
Paylaşımınız için teşekkürler, bu konuyu internette bayaa araştırdım. türkçe kaynak fazla olmadığından yarım kaldım.
ben bu kodları google cloud platformun (text to speech) API’siyle kullanmak istiyorum, yani metini konuşmaya çevirmek istiyorum.
platformda gezindim, eğitimlere baktım ama API’yi indiremedim, platformda sanal makine kurup API’yi web’te çalıştırma yollarına baktım lakin kodlamadan anlamadığımdan öyle kaldı.
sizin bu kodları diğer API’ye uyarlayabilirmiyiz yada masaüstünde (.exe) olarak çalıştırabilirmiyiz?
Merhabalar,
Türkçe kaynak olmadığı konusunda haklısınız, Yazmış olduğum tüm kodları, uygun şartları sağladığınızda build ettiğinizde “.exe” olarak çıktı alabilirsiniz.
Maalesef ki o şartlar bizde yok, yapmak istediğim google’ın bu sayfadaki test etme alanındaki gibi birşey https://cloud.google.com/text-to-speech/. sadece bunun mp3 olarak veya farklı formatta çıktı vermesi. word deki yazıları seçtiğimde, seçili alanı okuması gibi yada .
Sizin speech to text konusu gibi, birde text to speech konusu açsanız çok iyi olurdu. eminim ki bir çok kişiye yararı olacaktır.
Yeniden merhaba,
Geliştirmek istediğiniz benzer bir web uygulaması için ilgili api’yi kullanabilirsiniz elbette, Speech To Text için dil işleme denilen(NLP) kütüphanelerinden en geniş kaynağa sahip olan ve en verimli kullanabileceğim kütüphane Google olduğundan bunu kullanmıştım fakat TextToSpeech konusuna gelindiğinde yelpaze biraz daha genişliyor. Bunun için farklı kütüphaneler farklı imkanlar da sunuyorlar, hatta yanılmıyorsam Default olarak kurulu gelen özelliklerde, herhangi bir ekstra tool kullanmadan Windows üzerindeki kütüphaneler ile de bunu yapmamız sağlanıyor. Türkçe için bazı ek dil paketleri kurmak gerekebilir tabiki. İlerleyen zamanlarda işlerimden fırsat bulursam tabiki Text To Speech konusunda faydalı olacağını düşündüğüm bir kaynağı sunmaya çalışırım, pozitif yorum ve fikirleriniz için ayrıca teşekkür ederim.
Bende ilginiz için çok teşekkür ederim. Dün google cloud platformunu araştırırken dokümanlarda eğitim için birkaç satır kod buldum, c# diliyle anlatılmıştı. cloud shell komut satırında uygulamalı olarak gösteriyordu. eğitimi tamamladım, text to speech API’sini yükledim,
TR dil paketlerini indirdim, test ettim çalıştı. ses dosyasınıda mp3 formatında aldım. lakin bunu masaüstünde kullanabilsek yani ses seviyelerini, hızını, ses türü seçimlerini bir program içinde yapabilsek çok iyi olurdu. eğitim sayfasını atayım bir bak istersen :
https://codelabs.developers.google.com/codelabs/cloud-text-speech-csharp/index.html?index=..%2F..index#0
Merhabalar,
Evet, üstünkörü bir inceleme ile bahsettiğiniz tüm öznitelikleri değişken bir yapı kurmak mümkün, en kısa zamanda bunun ile ilgili bir yazı hazırlamaya çalışacağım. Katkılarınız için teşekkürler.
Size de teşekkürler, yazınızı bekliyor olacağım. kolay gelsin, iyi çalışmalar.
Kredi kartı olmayanlar için kötü oldu