Unity'de ses girişi

Dikkat

Başlamadan önce Bilişsel Konuşma Hizmetleri SDK'sı için Unity eklentiyi kullanmayı göz önünde bulundurabilirsiniz. Eklenti daha iyi Konuşma Doğruluğu sonuçlarına ve konuşmayı metne kod çözme özelliğine kolay erişimin yanı sıra iletişim kutusu, amaç tabanlı etkileşim, çeviri, metinden konuşma sentezi ve doğal dil konuşma tanıma gibi gelişmiş konuşma özelliklerine sahiptir. Çalışmaya başlama için örnek ve belgeleri inceleyin.

Unity, Unity uygulamanıza Ses girişi eklemek için üç yol gösterir; ilk ikisi PhraseRecognizer türleridir:

  • , KeywordRecognizer uygulamanıza dinlemesi gereken dize komutları dizisi sağlar
  • , GrammarRecognizer uygulamanıza dinlemesi gereken belirli bir dil bilgisini tanımlayan bir SRGS dosyası sağlar
  • , DictationRecognizer uygulamanın herhangi bir sözcüğü dinlemesine ve kullanıcıya bir not veya başka bir konuşma görüntüsü sağlamasına olanak sağlar

Not

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

Ses özelliğini etkinleştirme

Bir uygulamanın Ses girişini kullanması için Mikrofon özelliğinin bildir olması gerekir.

  1. Unity Düzenleyicisi'nde Project Ayarlar > Player'da Düzenle'ye gidin
  2. Windows Store sekmesini seçin
  3. Yayımlama Ayarlar Bölümünde Mikrofon özelliğini kontrol edin
  4. HoloLens cihazınızı kullanarak uygulamaya mikrofon erişimi HoloLens verin
    • Bunu cihaz başlangıcında yapmanız istensin, ancak yanlışlıkla "hayır"a tıkladıysanız, cihaz ayarlarından izinleri değiştirebilirsiniz

Tümcecik Tanıma

Uygulamanın kullanıcı tarafından konuşulan belirli tümcecikleri dinlemesi için bir eyleme geçerek şunları yapmak gerekir:

  1. veya kullanarak hangi tümceciklerin dinlen bir olduğunu KeywordRecognizer belirtme GrammarRecognizer
  2. Olayı işleme OnPhraseRecognized ve tanınan tümceciğine karşılık gelen eylemi uygulama

KeywordRecognizer

Ad alanı:UnityEngine.Windows. Konuşma
Türler: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-eylem sözlüğünü depolamak için sınıfınıza birkaç > alan ekleriz:

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

Şimdi sözlüğüne 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 tanımak istediğiniz şeyi söyleyin:

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

Şimdi olay için OnPhraseRecognized kaydol

keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

Örnek bir 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şlayabilirsiniz!

keywordRecognizer.Start();

GrammarRecognizer

Ad alanı:UnityEngine.Windows. Konuşma
Türler:GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

Dil BilgisiSRGS kullanarak tanıma dil bilginizi belirtirken GrammarRecognizer kullanılır. Bu, uygulamanıza birden fazla anahtar sözcük varsa, daha karmaşık tümcecikleri tanımak veya komut kümelerini kolayca açmak ve kapatmak için yararlı olabilir. Dosya biçimi bilgileri için bkz. SRGS XML Kullanarak Dil Bilgisi Oluşturma.

SRGS dil bilginize sahip olduktan ve bu dil bilgisi StreamingAssets klasöründeki projenize olduktan sonra:

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

oluşturun GrammarRecognizer ve SRGS dosyanıza giden yolu bu dosyaya iletir:

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

Şimdi olay için OnPhraseRecognized kaydol

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

SRGS dil bilgisinde belirtilen bilgileri içeren ve uygun şekilde işleyebilirsiniz. Ö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şlayabilirsiniz!

grammarRecognizer.Start();

Dikte

Ad alanı:UnityEngine.Windows. Konuşma
Türler:DictationRecognizer, SpeechError, SpeechSystemStatus

Kullanıcının DictationRecognizer konuşmasını metne dönüştürmek için kullanın. DictationRecognizer, dikte işlevini ortaya çıkarır ve hipotezlerin ve tümcecik tamamlanan olayların kaydını ve dinlemeyi destekler. Bu nedenle hem konuşma sırasında hem de sonrasında kullanıcınıza geri bildirim gönderebilirsiniz. Start() ve Stop() yöntemleri, dikte tanımayı sırasıyla etkinleştirir ve devre dışı bıraktır. Tanıyıcı ile yapıldıktan sonra, kullandığı kaynakları Dispose() serbest bırakmak için kullanılarak atılması gerekir. Atık toplama sırasında bu kaynakları daha önce serbest bırakmayacaksa ek performans maliyetiyle otomatik olarak serbest bırakacaktır.

Dikteyi başlatan yalnızca birkaç adım vardır:

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

Dikte özelliğini etkinleştirme

Bir uygulamanındikte kullanmak için İnternet İstemcisi ve Mikrofon özellikleri bildir gerekir:

  1. Unity Düzenleyicisi'nde Düzenleme Project Ayarlar > Player'a gidin
  2. Windows Store sekmesinde seçin
  3. Yayımlama Ayarlar bölümündeInternetClient özelliğini kontrol edin
    • İsteğe bağlı olarak, mikrofonu önceden etkinleştirmedıysanız Mikrofon özelliğini kontrol edin
  4. Henüz uygulamanıza mikrofon erişimi HoloLens izinler verin
    • Bunu cihaz başlangıcında yapmanız istensin, ancak yanlışlıkla "hayır"a tıkladıysanız, cihaz ayarlarından izinleri değiştirebilirsiniz

DictationRecognizer

Aşağıdaki gibi bir DictationRecognizer oluşturun:

dictationRecognizer = new DictationRecognizer();

Dikte davranışını uygulamak için abone olunan ve işilebilecek dört dikte olayları vardır.

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

DictationResult

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

İlk olarak, olayına abone DictationResult olun:

dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

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

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

DictationHypothesis

Kullanıcı konuşmaya devam ederken bu olay sürekli olarak başlatıldı. Tanıyıcı dinleyen, şimdiye kadar dinleyenlerin metinlerini sağlar.

İlk olarak, olayına abone DictationHypothesis olun:

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

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

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

DictationComplete

Bu olay, tanıyıcı durduğunda, stop() çağrısından, zaman aşımı oluştuğundan veya başka bir hatadan dolayı başlatıldı.

İlk olarak, olayına abone DictationComplete olun:

dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

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

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

DictationError

Hata oluştuğunda bu olay başlatıldı.

İlk olarak, olayına abone DictationError olun:

dictationRecognizer.DictationError += DictationRecognizer_DictationError;

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

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

Abone olduktan ve önemsersiniz dikte olaylarını işlemeye başladıktan sonra olayları almaya başlamak için dikte tanıyıcısını başlat.

dictationRecognizer.Start();

Artık DictationRecognizer'ın etrafında tutmak istemiyorsanız, olayların aboneliğinden çıkmanız ve DictationRecognizer'ın atılması 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, dikte tanımayı sırasıyla etkinleştirir ve devre dışı bıraktır.
  • Tanıyıcı ile yapıldıktan sonra, kullandığı kaynakları Dispose() serbest bırakmak için kullanılarak atılması gerekir. Atık toplama sırasında bu kaynakları daha önce serbest bırakmayacaksa ek performans maliyetiyle otomatik olarak serbest bırakacaktır.
  • Zaman aşımı, ayarlanmış bir sürenin ardından gerçekleşir. Bu zaman aşımı zaman aşımını olayda kontrol DictationComplete edin. Dikkat etmek için iki zaman aşımı vardır:
    1. Tanıyıcı başlatılır ve ilk beş saniye boyunca ses duymazsa zaman zaman alır.
    2. Tanıyıcı bir sonuç verdiyse, ancak 20 saniye boyunca sessizlik duyuyorsa zaman aşımına uğrar.

Hem tümcecik tanımayı hem de dikte etmeyi kullanma

Uygulamanızda hem tümcecik tanımayı hem de dikte etmeyi kullanmak istiyorsanız, diğerini başlatabilmeniz için önce bir aşağı doğru kapatmanız gerekir. Çalıştıran birden çok Keywordtanıyıcıya sahipseniz, bunları ile her bir kez kapatabilirsiniz:

PhraseRecognitionSystem.Shutdown();

Restart()Dictationtanıyıcı durduktan sonra tüm tanıyıcıları önceki durumlarına geri yüklemek için öğesini çağırabilirsiniz:

PhraseRecognitionSystem.Restart();

Ayrıca, PhraseRecognitionSystem ' yi yeniden başlatacak bir Keywordtanıyıcı de başlatabilirsiniz.

Karma Gerçeklik araç setinde ses girişi

Aşağıdaki tanıtım sahnelerindeki ses girişi için MRTK örneklerini bulabilirsiniz:

Sonraki geliştirme kontrol noktası

Belirlediğimiz Unity geliştirme kontrol noktası yolculuğunu takip ediyorsanız, karma gerçeklik platformu yeteneklerini ve API 'Leri araştırırken bir sonraki göreviniz vardır:

Her zaman Unity geliştirme kontrol noktalarına dilediğiniz zaman geri dönebilirsiniz.