none
Reconhecimento de voz RRS feed

  • Pergunta

  • Bom dia pessoal!

    Estou desenvolvendo um sistema de reconhecimento de voz para automação residencial,  achei um exemplo na net que ate funcionou direitinho, o problema e que sou obrigado a falar uma palavra de cada Choices adicionada ao GrammarBuilder, no exemplo abaixo por exemplo funciona se eu disser "Buscar hotel no Rio de Janeiro" porem seu eu disser apenas a palavra "Hotel" ou "Restaurante" não funciona,  também não reconhece ou se disser "Hotel em rio de Janeiro", sou obrigado a dizer todas as palavras.

    Sera que existe alguma forma de contornar isso?

       static void Main(string[] args)
            {
                using (var sre = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("pt-BR")))
                {
                    sre.SetInputToDefaultAudioDevice();
    
                    var estabelecimentos = new Choices("hotel", "restaurante", "cinema", "shopping");
                    var locais = new Choices("Rio de Janeiro", "Minas Gerais", "São Paulo");
    
                    GrammarBuilder gb = new GrammarBuilder();
                    gb.Append("Buscar");
                    gb.Append(estabelecimentos);
                    gb.Append(new Choices("em", "no"));
                    gb.Append(locais);
                    var g = new Grammar(gb);
                    sre.LoadGrammarAsync(g);
    
                    sre.RecognizeCompleted += sre_RecognizeCompleted;
                    sre.SpeechRecognitionRejected += sre_SpeechRecognitionRejected;
                    sre.SpeechRecognized += sre_SpeechRecognized;
    
                    sre.RecognizeAsync(RecognizeMode.Multiple);
    
                    Console.ReadLine();
                }
            }
    
            static void sre_SpeechRecognitionRejected(object sender, SpeechRecognitionRejectedEventArgs e)
            {
                Console.WriteLine("Ignorado");
            }
    
            static void sre_RecognizeCompleted(object sender, RecognizeCompletedEventArgs e)
            {
                if (e.Result == null)
                    return;
    
                Console.WriteLine("Reconhecido: " + e.Result.Text);
            }
    
            // Create a simple handler for the SpeechRecognized event.
            static void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
            {
                Console.WriteLine("Ouvi");
    
                if (e.Result == null)
                    return;
    
                Console.WriteLine("Reconhecido: " + e.Result.Text);
            }

    sexta-feira, 22 de abril de 2016 13:04

Respostas

  • Oi.


     sou obrigado a dizer todas as palavras.

    Porque a gramática só reconhece uma frase com todas as palavras; "Buscar" é constante, o resto são opções; "Buscar" deve ser dito antes que qualquer outra coisa seja reconhecida. 

    Criar uma Grammar contendo só as Choices de estabelecimentos, outra contendo o verbo + Choices de estabelecimento + Choices de preposição + Choices de local; carregar as duas.

    Assim--

    var g = new Grammar(gb);
    var g2 = new Grammar(estabelecimentos);
    sre.LoadGrammar(g);
    sre.LoadGrammar(g2);
    --deve reconhecer ("Hotel" | "Restaurante" | ...) ou ("Buscar", ("Hotel" | "Restaurante" | ...), ("em" | "no"), ...)

    • Marcado como Resposta Marcos SJ sexta-feira, 22 de abril de 2016 17:37
    sexta-feira, 22 de abril de 2016 15:04