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.
- Unity Düzenleyicisi'nde Proje Ayarlarını > Düzenle > Yürütücüsü'ne gidin
- Windows Mağazası sekmesini seçin
- Yayımlama Ayarları > Özellikleri bölümünde Mikrofon özelliğini denetleyin
- 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:
- veya kullanarak
KeywordRecognizer
hangi tümceciklerin dinleneceğini belirtmeGrammarRecognizer
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:
- Yeni bir oluşturma
DictationRecognizer
- Dikte olaylarını işleme
- DictationRecognizer'ı başlatma
Dikte etme özelliğini etkinleştirme
Bir uygulamanın dikteyi kullanması için İnternet İstemcisi ve Mikrofon özellikleri bildirilmelidir:
- Unity Düzenleyicisi'nde Proje Ayarlarını > Düzenle > Yürütücüsü'ne gidin
- Windows Mağazası sekmesinden seçin
- 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
- 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.
DictationResult
DictationComplete
DictationHypothesis
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()
veStop()
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:- Tanıyıcı başlatılırsa ve ilk beş saniye boyunca herhangi bir ses duymazsa zaman aşımına uğrar.
- 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.