Ses temelli web uygulamaları - Web Speech API'ye Giriş

Yeni JavaScript Web Speech API, web sayfalarınıza konuşma tanıma eklemeyi kolaylaştırır. Bu API, Chrome'un 25 ve sonraki sürümlerindeki konuşma tanıma özellikleri üzerinde hassas kontrol ve esneklik sağlar. Tanınan metnin, konuşma sırasında neredeyse anında göründüğü bir örneği burada bulabilirsiniz.

Web Speech API demosu

DEMO / KAYNAK

Şimdi işin arka planına göz atalım. Öncelikle, webkitSpeechRecognition nesnesinin mevcut olup olmadığını kontrol ederek tarayıcının Web Speech API'yi destekleyip desteklemediğini kontrol ederiz. Aksi takdirde, kullanıcının tarayıcısını yükseltmesini öneririz. (API hâlâ deneysel olduğundan, şu anda tedarikçi firma ön eki olarak kullanılmaktadır.) Son olarak, konuşma arayüzünü sağlayan webkitSpeechRecognition nesnesini oluşturup bunun bazı özelliklerini ve etkinlik işleyicilerini ayarlarız.

if (!('webkitSpeechRecognition' in window)) {
    upgrade();
} else {
    var recognition = new webkitSpeechRecognition();
    recognition.continuous = true;
    recognition.interimResults = true;

    recognition.onstart = function() { ... }
    recognition.onresult = function(event) { ... }
    recognition.onerror = function(event) { ... }
    recognition.onend = function() { ... }
    ...

continuous için varsayılan değer false'tur. Bu, kullanıcı konuşmayı bıraktığında konuşma tanımanın sona ereceği anlamına gelir. Bu mod, kısa giriş alanları gibi basit metinler için idealdir. Bu demoda değeri true olarak ayarladık. Böylece kullanıcı konuşurken dursa bile tanıma devam eder.

interimResults için varsayılan değer false'tur. Diğer bir deyişle, tanıyıcı tarafından döndürülen sadece nihai sonuçlar nihaidir ve değişmez. Demoda doğru olduğu için erken ve ara sonuçlar değişebilir. Demoyu dikkatlice izleyin. Gri metin geçicidir ve bazen değişirken, siyah metin son olarak işaretlenmiş ve değişmeyecek olan tanıyıcıdan gelen yanıtlardır.

Başlamak için kullanıcı mikrofon düğmesini tıklar ve şu kod tetiklenir:

function startButton(event) {
    ...
    final_transcript = '';
    recognition.lang = select_dialect.value;
    recognition.start();

Konuşma tanıyıcı "lang" için konuşma dilini ayarlarız kullanıcının seçim açılır listesinden seçtiği BCP-47 değerine ekleyin (örneğin, İngilizce-Amerika Birleşik Devletleri için "en-US"). Bu ayar belirtilmezse varsayılan olarak HTML belgesi kök öğesinin ve hiyerarşisinin dili kullanılır. Chrome konuşma tanıma özelliği çok sayıda dili (demo kaynağındaki "langs" tablosuna bakın) ve bu demoda yer almayan bazı dilleri (ör. he-IL ve ar-EG) destekler.

Dili ayarladıktan sonra, konuşma tanıyıcıyı etkinleştirmek için recognition.start() yöntemini çağırırız. Ses yakalamaya başladıktan sonra onstart etkinlik işleyicisini ve ardından her yeni sonuç grubu için onresult etkinlik işleyicisini çağırır.

recognition.onresult = function(event) {
    var interim_transcript = '';

    for (var i = event.resultIndex; i < event.results.length; ++i) {
        if (event.results[i].isFinal) {
            final_transcript += event.results[i][0].transcript;
        } else {
            interim_transcript += event.results[i][0].transcript;
        }
    }
    final_transcript = capitalize(final_transcript);
    final_span.innerHTML = linebreak(final_transcript);
    interim_span.innerHTML = linebreak(interim_transcript);
    };
}

Bu işleyici, şimdiye kadar alınan tüm sonuçları iki dizede birleştirir: final_transcript ve interim_transcript. Sonuçta elde edilen dizelerde "\n" bulunabilir (ör. kullanıcı "yeni paragraf" dediğinde), bu dizeleri <br> veya <p> HTML etiketlerine dönüştürmek için linebreak işlevini kullanırız. Son olarak, bu dizeleri karşılık gelen <span> öğelerinin innerHTML'si olarak ayarlar: Siyah metinle stilize edilen final_span ve gri metinle stilize edilen interim_span.

interim_transcript, yerel bir değişkendir ve son onresult etkinliğinden bu yana tüm ara sonuçlar değişmiş olabileceğinden, bu etkinlik her çağrıldığında tamamen yeniden oluşturulur. Aynısını final_transcript için de for döngüsünü 0'dan başlatarak yapabiliriz. Bununla birlikte, son metin hiç değişmediğinden, final_transcript öğesini genel hale getirerek buradaki kodu biraz daha verimli hale getirdik. Böylece bu etkinlik, for döngüsü event.resultIndex olduğunda başlayabilir ve yalnızca yeni son metin eklenebilir.

Hepsi bu kadar! Kodun geri kalanı yalnızca her şeyin güzel görünmesini sağlamak için bulunuyor. Durumu korur, kullanıcıya bilgilendirici mesajlar gösterir ve mikrofon düğmesindeki GIF resmini statik mikrofon ile eğik çizgi resmi arasında değiştirir ve mikrofon animasyonunda yanıp sönen kırmızı noktayla değiştirir.

recognition.start() çağrıldığında mikrofonlu eğik çizgi resmi gösterilir ve onstart etkinleştiğinde mic-animate ile değiştirilir. Bu genellikle eğik çizgi fark edilmeyecek kadar hızlı gerçekleşir, ancak konuşma tanıma ilk kez kullanıldığında Chrome'un kullanıcıdan mikrofonu kullanmak için izin istemesi gerekir. Bu durumda onstart yalnızca kullanıcı izin verdiğinde ve izin verdiği takdirde etkinleşir. HTTPS'de barındırılan sayfaların tekrar tekrar izin istemesi gerekmezken HTTP tarafından barındırılan sayfalar bunu gerektirir.

Öyleyse web sayfalarınızın kullanıcılarınızı dinlemesini sağlayarak onlara hayat verin!

Geri bildiriminizi duymak isteriz...

Google'ın bu API'den alınan ses verilerini nasıl kullandığını öğrenmek için Chrome Gizlilik Raporu'na bakın.