İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Onder Teker
on_der_tek_er@yahoo.com

Java Konuşuyor!

Java Speech API

Java platform'u JSAPI (The Java Speech API) ile birlikte sahip olduğu multimedia özelliklerini genişletiyor. JSAPI, Speech Recognition ve Synthesis (Konuşma Tanıma ve Bireşim) yapmakta kullanılan Java standardıdır. Recognition, insan konuşmasının algılanması ve metin haline dünüştürülmesi, Synthesis de bir metnin konuşma haline getirilmesi yani bir programın 'konuşması' anlamına geliyor.

Spesifikasyon anlamında tamamlanan (1.0'a ulaşan) JSAPI, implementasyon anlamında henüz tamamlanmış görünmüyor. Şu andaki imlementasyonların bazıları JSAPI spesifiksayonunu kısmen destekliyorlar. Bazılara sadece belli işletim sistemlerinde çalışıyor. Bazılarında da son derece kısıtlı uygulamalar var. Ancak imlementasyonlar kesinlikle bu alanda oldukça ilerlendiğiniğini, yakın zamanda Java platformunun speech recognition ve synthesis özelliğini bir standart olarak kendisine katacağını gösteriyor.

Konuşma Tanıma (Speech Recognition)

Konuşma Tanıma (Speech Recognition) insan sesiinin tanınıp, söylenmek istenenin algılanması ve metin hale dönüştürülmesi anlamına geliyor. Burda kasıt bir programın insan söylediklerine 'anlaması' değil. Sadece belli bir komut listesinden hangisinin söylendiğinin anlaşılmasıdır. Bu şekilde menüler sesle çalışabilmektedir. Konuşma tanıma sistemi sadece elindeki menü seçeneklerinden hangisinin söylendiğini ayırt etmektedir.

JSGF (Java Speech Grammar Format)

Java Speech Grammar Format (Java Konuşma Grameri Formatı), bir konuşma tanıma sisteminin kurallarını belirtmek için kullanılan dildir. JSGF, Java'nın sözdizimine yakın bir biçimde tasarlanmıştır. Konuşma tanıma özelliği olan bir uygulama yazılırken, öncelikle kurallar belirlenir. JSAPI aracılığyla bu kurallara bakılarak konuşan insanın ne söylediği anlaşılır.

JSGF Örneği

JSFG'ye basit bir örnek verelim. Örnekler ingilizce olacak maalesef, JSAPI'nin türkçeyi desteklemesi biraz daha zaman alacaktır. Bir komut listesi ve onun kibarce söyleniş kuralarını belirleyen bir örnek olsun. Kibarlık kuralları için

#JSGF V1.0;
grammar com.acme.politeness;
// Body
public <startPolite> = (please | kindly | could you | 
oh  mighty  computer) *;
public <endPolite> = [ please | thanks | thank you ];

Bu örnekte 'please' 'kindly' 'could you' 'oh mighty computer' ile başlayan komutların kibarca kabul edileceği belirleniyor. Aynı şekilde 'please', 'thanks' 'thank you' ile biten ifadeler de kibar kabul edilecek. Burada 'com.acme.politeness' grammer adı, 'startPolite' ve 'endPolite' kural (rule) oluyor.

Bir de komutların belirlenmesini görelim. Bu örnek komutların kibarca söyleneceğini belirliyor.

#JSGF V1.0 ISO8859-1 en;
grammar com.acme.commands;
import <com.acme.politeness.startPolite>;
import <com.acme.politeness.endPolite>;
/**
  * Basic command.
  * @example please move the window
  * @example open a file
  */
public <basicCmd> = <startPolite> <command> <endPolite>;
<command> = <action> <object>;
<action> = /10/ open |/2/ close |/1/ delete |/1/ move;
<object> = [the | a] (window | file | menu);

Buradaki ifadenin anlamı şudur : Basit bir komut ('basicCommand') kibar başlangıç, komut ve kibar bitiş şeklindedir. Komut (command), ya bir eylem (action) veya bir nesne ('object')dir. Eylem ya aç (open), kapat (close), sil (delete) veya hareket et (move)'dur. Nesne ise window, file ve menu olabilir. Bu örnekte yorumlar arasında verileilecek komutlara örnekler yazılmıştır. Yukarıdaki iki gramer, 'lütfen pencereyi kapat' ('please move the window ') ve 'bir dosya aç' (open a file) komutlarını anlayabilmektedir.

JSAPI'deki Recognizer interface'i programın yukarıdakine benzer şekilde verdiği rule'lara göre konuşmayı anlıyor ve hangi komutun verildiğini programa bildiriyor. Program da 'open a file' şeklinde bir komuta karşılık ne yapacaksa yapıyor.

Kounuşma Bireşimi (Speech Synthesis)

Konuşma Bireşimi (Speech Synthesis) belli bir metin insan sesi haline dönüştürülmesidir. İnsan sesinin cinsiyet, yaş ve canlılık gibi özellikleri de üretilen seste olabilmektedir.

JSML (Java Speech API Markup Language)

Java Speech API Markup Language (Java Konuşma Kütüphanesi İşaretleme Dili), insan sesinin vurgularını, konuşma hızı gibi çeşiti özelliklerini belirlemeye yarayan XML tabanlı bir dildir. Speech Sysntesizer düz metni de okuyabilmekte ancak JSML formatında okuması daha canlı daha insan sesine benzer şekilde olmaktadır. Örneğin :

<div type="sentence">Computers <emphasis>can</emphasis> speak!</div> 

ifadesi, normal cümle olarak okunur ve 'can' kelimesi vurgulu söylenir.

<voice gender="female" age="30"> I hate you! </voice> 

ifadesi 30 yaşında bir bayanın sesiyle konuşma üretir.

Java Synthesizer Kod Örneği

Düz bir metni 'konuşan' Java programı aşağıdaki gibidir. Bu kodda bir Synthesizer yaratılmakta ve bir metin insan sesi haline getirilmektedir.

JSpeechTest.javaİndir Göster Gizle Kopar Satır Gizle Satır Göster
  1 import javax.speech.*;
  2 import javax.speech.synthesis.*;
  3 public class JSpeechTest{
  4   public static void main(String[] args)
  5       throws Exception
  6   {
  7     SynthesizerModeDesc desc = new SynthesizerModeDesc(
  8         null,"general",Locale.US,null,null);
  9     Synthesizer synth = Central.createSynthesizer(desc);
 10     synth.allocate();
 11     synth.resume();
 12     synth.speakPlainText("i love java", null);
 13     synth.waitEngineState(Synthesizer.QUEUE_EMPTY);
 14     synth.deallocate();
 15   }
 16 }

Gerçekleştirmeler

JSAPI, Sun Microsystems'in başta Apple Computer, Inc., AT&T, Dragon Systems, Inc., IBM Corporation, Novell, Inc., Philips Speech Processing, ve Texas Instruments Incorporated olmak üzere önde gelen konuşma teknolojisi şirketleriyle birlikte çalışması sonucu oluşmuş bir standart.

Şu anda bilinen JSAPI projeleri :Source Forge'taki FreeTTS, IBM'in "Speech for Java" , The Cloud Garden, Lernout & Hauspie'un TTS for Java Speech API, Conversa Web 3.0, Festival, Elan Speech Cube. Bu gerçekleştirmelerin bir kısmı tamamen Java'yla geliştirilmişken bazıları C++'ta geliştirilmiş sistemlere Java arayüzü sağlayarak çalışmaktadır. Bir kısmı Java Sound API'nın işlevlerini kullanmaktayken bazıları belli bir konuşma motoru'yla uyumlu çalışmaktadır. Bir kısmı Recognition ve Synthesis'den sadece birini gerçekleştirmektedir.

Sonuç

Java'nın Konuşma Tanıma ve Bireşim yeteneğinin olduğunu söylemek için çok erken, ancak spesifikasyonun gerçekleştirilme oranı, API'ın basitliği ve Java'nın diğer multimedya unsurlarını kendisine entegre etmekteki başarısı göz önüne alındığında yakın bir gelecekte Java platformunun bu özelliği de standart olarak bünyesinde barındıracağını söylemek yanlış olmaz. Belki Java henüz tam olarak konuşmuyor ama yarın mutlaka konuşacak.

Referanslar

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır