Unity'de ses girişi

Dikkat

Başlamadan önce Bilişsel Konuşma Hizmetleri SDK'sı için Unity eklentisini kullanmayı göz önünde bulundurun. Eklenti daha iyi Konuşma Doğruluğu sonuçlarına ve konuşmadan metne kod çözme özelliğine ve iletişim kutusu, amaç tabanlı etkileşim, çeviri, metin okuma sentezi ve doğal dil konuşma tanıma gibi gelişmiş konuşma özelliklerine sahiptir. Başlamak için örneği ve belgeleri gözden geçirin.

Unity, Unity uygulamanıza Ses girişi eklemenin üç yolunu sunar ve bunlardan ilk ikisi PhraseRecognizer türleridir:

  • , KeywordRecognizer uygulamanıza dinlemeniz için bir dizi dize komutu sağlar
  • , GrammarRecognizer uygulamanıza dinlemek için belirli bir dil bilgisi tanımlayan bir SRGS dosyası verir
  • , DictationRecognizer uygulamanızın herhangi bir sözcüğü dinlemesine ve kullanıcıya konuşmasının notunu veya başka bir görüntüsünü sağlamasına olanak tanır

Not

Dikte ve tümcecik tanıma aynı anda işlenemez. GrammarRecognizer veya KeywordRecognizer etkinse, DictationRecognizer etkin olamaz ve tersi de geçerlidir.

Ses özelliğini etkinleştirme

Bir uygulamanın Ses girişini kullanabilmesi için Mikrofon özelliğinin bildirilmesi gerekir.

  1. Unity Düzenleyicisi'nde Proje Ayarlarını > Düzenle > Oynatıcı'ya gidin
  2. Windows Mağazası sekmesini seçin
  3. Yayımlama Ayarları > Özellikleri bölümünde Mikrofon özelliğini denetleyin
  4. HoloLens cihazınızda mikrofon erişimi için uygulamaya izin verme
    • Bunu cihaz başlangıcında yapmanız istenir, ancak yanlışlıkla "hayır" seçeneğine tıkladıysanız cihaz ayarlarından izinleri değiştirebilirsiniz

Tümcecik Tanıma

Uygulamanızın kullanıcı tarafından konuşulan belirli tümcecikleri dinlemesini ve ardından bazı eylemler gerçekleştirmesini sağlamak için şunları yapmanız gerekir:

  1. veya kullanarak KeywordRecognizer hangi tümceciklerin dinleneceğini belirtme GrammarRecognizer
  2. OnPhraseRecognized Olayı işleme ve tanınan tümceciğe karşılık gelen eylemi gerçekleştirme

KeywordRecognizer

Ad Alanı:UnityEngine.Windows.Speech
Types:KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

Bazı tuş vuruşlarını kaydetmek için birkaç using deyimine ihtiyacımız olacak:

using UnityEngine.Windows.Speech;
using System.Collections.Generic;
using System.Linq;

Ardından tanıyıcı ve anahtar sözcük> eylemi sözlüğü depolamak için sınıfınıza birkaç alan ekleyelim:

KeywordRecognizer keywordRecognizer;
Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();

Şimdi sözlüğe bir anahtar sözcük ekleyin, örneğin bir Start() yönteminde. Bu örnekte "activate" anahtar sözcüğünü ekliyoruz:

//Create keywords for keyword recognizer
keywords.Add("activate", () =>
{
    // action to be performed when this keyword is spoken
});

Anahtar sözcük tanıyıcısını oluşturun ve neleri tanımak istediğimizi söyleyin:

keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());

Şimdi etkinliğe kaydolun OnPhraseRecognized

keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

Örnek işleyici:

private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
    System.Action keywordAction;
    // if the keyword recognized is in our dictionary, call that Action.
    if (keywords.TryGetValue(args.text, out keywordAction))
    {
        keywordAction.Invoke();
    }
}

Son olarak, tanımaya başlayın!

keywordRecognizer.Start();

GrammarRecognizer

Ad Alanı:UnityEngine.Windows.Speech
Türler: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

Tanıma dil bilgisini SRGS kullanarak belirtiyorsanız GrammarRecognizer kullanılır. Bu, uygulamanızın yalnızca birkaç anahtar sözcükten fazlası varsa, daha karmaşık tümcecikleri tanımak istiyorsanız veya komut kümelerini kolayca açıp kapatmak istiyorsanız yararlı olabilir. Bkz. Dosya biçimi bilgileri için SRGS XML Kullanarak Dil Bilgisi Oluşturma .

SRGS dil bilgisini edindikten ve bir StreamingAssets klasöründe projenizde olduğunda:

<PROJECT_ROOT>/Assets/StreamingAssets/SRGS/myGrammar.xml

oluşturun GrammarRecognizer ve SRGS dosyanıza giden yolu geçirin:

private GrammarRecognizer grammarRecognizer;
grammarRecognizer = new GrammarRecognizer(Application.streamingDataPath + "/SRGS/myGrammar.xml");

Şimdi etkinliğe kaydolun OnPhraseRecognized

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

SRGS dil bilginizde belirtilen bilgileri içeren ve uygun şekilde işleyebileceğiniz bir geri arama alırsınız. Önemli bilgilerin çoğu dizide semanticMeanings sağlanacaktır.

private void Grammar_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
    SemanticMeaning[] meanings = args.semanticMeanings;
    // do something
}

Son olarak, tanımaya başlayın!

grammarRecognizer.Start();

Dikte

Ad Alanı:UnityEngine.Windows.Speech
Türler: DictationRecognizer, SpeechError, SpeechSystemStatus

Kullanıcının konuşmasını metne dönüştürmek için öğesini DictationRecognizer kullanın. DictationRecognizer , dikte işlevselliğini kullanıma sunar ve hipotez ve tümcecik tamamlanan olayları kaydetmeyi ve dinlemeyi destekler, böylece hem konuşurken hem de sonrasında kullanıcınıza geri bildirimde bulunabilirsiniz. Start() ve Stop() yöntemleri sırasıyla dikte tanımayı etkinleştirir ve devre dışı bırakır. Tanıyıcıyla işiniz bittiğinde, kullandığı kaynakları serbest bırakmak için kullanılarak Dispose() atılmalıdır. Bu kaynaklar, daha önce serbest bırakılmazsa ek performans maliyetiyle çöp toplama sırasında otomatik olarak serbest bırakılır.

Dikte etmeye başlamak için yalnızca birkaç adım gerekir:

  1. Yeni bir oluşturma DictationRecognizer
  2. Dikte olaylarını işleme
  3. DictationRecognizer'ı başlatma

Dikte özelliğini etkinleştirme

Bir uygulamanın dikteyi kullanabilmesi için İnternet İstemcisi ve Mikrofon özellikleri bildirilmelidir:

  1. Unity Düzenleyicisi'nde Proje Ayarlarını > Düzenle > Oynatıcı'ya gidin
  2. Windows Mağazası sekmesinden
  3. Yayımlama Ayarları > Özellikleri bölümünde InternetClient özelliğini denetleyin
    • İsteğe bağlı olarak, mikrofonu henüz etkinleştirmediyseniz Mikrofon özelliğini denetleyin
  4. Henüz yapmadıysanız HoloLens cihazınızda uygulamaya mikrofon erişimi için izin verme
    • Bunu cihaz başlangıcında yapmanız istenir, ancak yanlışlıkla "hayır" seçeneğine tıkladıysanız cihaz ayarlarından izinleri değiştirebilirsiniz

DictationRecognizer

Şöyle bir DictationRecognizer oluşturun:

dictationRecognizer = new DictationRecognizer();

Dikte davranışını uygulamak için abone olunabilen ve işlenebilen dört dikte olayı vardır.

  1. DictationResult
  2. DictationComplete
  3. DictationHypothesis
  4. DictationError

DictationResult

Bu olay, kullanıcı genellikle bir cümlenin sonunda duraklatıldıktan sonra tetiklenir. Tanınan dizenin tamamı burada döndürülür.

İlk olarak olaya abone olun DictationResult :

dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

Ardından DictationResult geri çağırmasını işleyin:

private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
{
    // do something
}

DikteHypotesis

Kullanıcı konuşurken bu olay sürekli tetiklenir. Tanıyıcı dinledikçe, şimdiye kadar duyduklarına ilişkin metin sağlar.

İlk olarak olaya abone olun DictationHypothesis :

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

Ardından DictationHypothesis geri çağırmasını işleyin:

private void DictationRecognizer_DictationHypothesis(string text)
{
    // do something
}

Dikte Tamamla

Tanıyıcı durdurulduğunda, Stop() çağrılırken, zaman aşımı oluştuğunda veya başka bir hata oluştuğunda bu olay tetiklenir.

İlk olarak olaya abone olun DictationComplete :

dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

Ardından DictationComplete geri çağırmasını işleyin:

private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
{
   // do something
}

DictationError

Bir hata oluştuğunda bu olay tetiklenir.

İlk olarak olaya abone olun DictationError :

dictationRecognizer.DictationError += DictationRecognizer_DictationError;

Ardından DictationError geri çağırmasını işleyin:

private void DictationRecognizer_DictationError(string error, int hresult)
{
    // do something
}

Abone olduktan ve ilgilendiğiniz dikte olaylarını işledikten sonra, olayları almaya başlamak için dikte tanıyıcısını başlatın.

dictationRecognizer.Start();

Artık DictationRecognizer'ı tutmak istemiyorsanız, olay aboneliğini kaldırmanız ve DictationRecognizer'ı Atmanız gerekir.

dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;
dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete ;
dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis ;
dictationRecognizer.DictationError -= DictationRecognizer_DictationError ;
dictationRecognizer.Dispose();

İpuçları

  • Start() ve Stop() yöntemleri sırasıyla dikte tanımayı etkinleştirir ve devre dışı bırakır.
  • Tanıyıcıyla işiniz bittiğinde, kullandığı kaynakları serbest bırakmak için kullanılarak Dispose() atılmalıdır. Bu kaynaklar, daha önce serbest bırakılmazsa ek performans maliyetiyle çöp toplama sırasında otomatik olarak serbest bırakılır.
  • Zaman aşımları belirli bir süre sonra gerçekleşir. Olayda DictationComplete bu zaman aşımlarını de kontrol edebilirsiniz. Dikkat etmeniz gereken iki zaman aşımı vardır:
    1. Tanıyıcı başlatılırsa ve ilk beş saniye boyunca herhangi bir ses duymazsa zaman aşımına uğrar.
    2. Tanıyıcı bir sonuç verdiyse ancak 20 saniye boyunca sessizliği duyarsa zaman aşımına uğrar.

Hem Tümcecik Tanıma hem de Dikte Etme Kullanma

Uygulamanızda hem tümcecik tanımayı hem de dikteyi kullanmak istiyorsanız, diğerini başlatmadan önce birini tamamen kapatmanız gerekir. Birden çok KeywordRecognizer çalıştırıyorsanız, şunları kullanarak hepsini bir kerede kapatabilirsiniz:

PhraseRecognitionSystem.Shutdown();

DictationRecognizer durdurulduktan sonra tüm tanıyıcıları önceki durumlarına geri yüklemek için çağrısı Restart() yapabilirsiniz:

PhraseRecognitionSystem.Restart();

PhraseRecognitionSystem'ı da yeniden başlatacak bir KeywordRecognizer da başlatabilirsiniz.

Karma Gerçeklik Araç Seti'nde ses girişi

Ses girişi için MRTK örneklerini aşağıdaki tanıtım sahnelerinde bulabilirsiniz:

Sonraki Geliştirme Denetim Noktası

Ortaya koyduğumuz Unity geliştirme denetim noktası yolculuğunu takip ediyorsanız sıradaki göreviniz Karma Gerçeklik platformu özelliklerini ve API'lerini keşfetmektir:

İstediğiniz zaman Unity geliştirme denetim noktalarına geri dönebilirsiniz.