Aracılığıyla paylaş


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 çözmeye kolay erişimin yanı sıra 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 örnek ve belgelere göz atın.

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

  • uygulamanıza KeywordRecognizer 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 bir not veya konuşmasının 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 kullanması için Mikrofon özelliği bildirilmelidir.

  1. Unity Düzenleyicisi'nde Proje Ayarlarını > Düzenle > Yürütücüsü'ne 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 sağlamak için bazı eylemler gerçekleştirmeniz 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
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> 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öntemin içine. 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

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

SRGS dil bilginizi aldıktan ve bir StreamingAssets klasöründe projenizde yer aldıktan sonra:

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

GrammarRecognizer oluşturun ve SRGS dosyanızın yolunu 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 tamamlanmış 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, atık toplama sırasında ek performans maliyetiyle otomatik olarak serbest bırakılır.

Dikteye 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 etme özelliğini etkinleştirme

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

  1. Unity Düzenleyicisi'nde Proje Ayarlarını > Düzenle > Yürütücüsü'ne gidin
  2. Windows Mağazası sekmesinden seçin
  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 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

DictationRecognizer

Gibi 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ı duraklatıldıktan sonra tetiklenir ve genellikle cümlenin sonunda tetiklenir. Tam olarak tanınan dize 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
}

DikteHypothesis

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ımayı başlatın.

dictationRecognizer.Start();

DictationRecognizer'ı artık etrafta tutmak istemiyorsanız, olaylar 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, atık toplama sırasında ek performans maliyetiyle otomatik olarak serbest bırakılır.
  • Zaman aşımları belirli bir süre sonra gerçekleşir. Olayda bu zaman aşımlarını de DictationComplete 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ğırabilirsiniz Restart() :

PhraseRecognitionSystem.Restart();

Ayrıca, PhraseRecognitionSystem'ı da yeniden başlatacak bir KeywordRecognizer 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ı

Sunduğ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.