コード例 #1
0
        protected void ProcessSpeechRecognizedResult(SpeechEngine engine, RecognitionResult rr)
        {
            StringBuilder builder = new StringBuilder();

            builder.Append("<JSON>");
            using (var stream = new MemoryStream())
            {
                XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();
                var            nav  = xnav.Select("/SML/action/*");

                string opts = "";
                if (nav.Count > 0)
                {
                    opts = "\"options\": {" + Options(nav) + "}, ";
                }

                string txt  = "\"text\": \"" + rr.Text.Replace("\"", "\\\"").ToString(culture) + "\", ";
                string conf = "\"confidence\": " + rr.Confidence.ToString(culture).Replace(",", ".") + ", ";

                rr.Audio.WriteToWaveStream(stream);
                stream.Position = 0;
                var base64 = Convert.ToBase64String(stream.GetBuffer());

                string json = "{" + txt + conf + opts + "   \"base64\": \"" + base64 + "\"}";
                builder.Append(json);
            }
            builder.Append("</JSON>");

            Console.Write(builder.ToString());
        }
コード例 #2
0
        public void SpeechRecognized(SpeechEngine engine, RecognitionResult rr)
        {
            // 1. Handle the Listening global state
            if (!IsListening)
            {
                Log("REJECTED not listening");
                return;
            }

            // Compute XPath Navigator
            XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();

            // 2. Handle confidence
            if (!Confidence(engine.Name, rr, xnav, engine.Confidence))
            {
                return;
            }

            // 3. Set an engagement for valid audio
            AddOnManager.GetInstance().HandleProfile(engine.Name, "engaged", (Object)DateTime.Now);

            // 4. Forward to all addons
            var text    = rr.Text;
            var grammar = rr.Grammar.Name;
            var options = new Dictionary <string, string>();

            using (var stream = new MemoryStream()) {
                rr.Audio.WriteToWaveStream(stream);
                AddOnManager.GetInstance().BeforeSpeechRecognition(engine.Name, text, rr.Confidence, xnav, grammar, stream, options);
                AddOnManager.GetInstance().AfterSpeechRecognition(engine.Name, text, rr.Confidence, xnav, grammar, stream, options);
            }
        }
コード例 #3
0
ファイル: WSRSpeechEngine.cs プロジェクト: pilot-SyS/WSRMacro
        protected String HandleWildcard(RecognitionResult rr, String url)
        {
            if (rr.Audio == null)
            {
                return(url);
            }

            XPathNavigator xnav     = rr.ConstructSmlFromSemantics().CreateNavigator();
            XPathNavigator wildcard = xnav.SelectSingleNode("/SML/action/@dictation");

            if (wildcard == null)
            {
                return(url);
            }

            // Retrieve language
            String language = cfg.language;

            if (wildcard.Value != "true")
            {
                language = wildcard.Value;
            }

            // Google
            var speech2text = ProcessAudioStream(rr, language);

            if (url != null)
            {
                url += "dictation=" + HttpUtility.UrlEncode(speech2text);
            }

            return(url);
        }
コード例 #4
0
        public void SpeechRejected(SpeechEngine engine, RecognitionResult rr)
        {
            // 1. Handle the Listening global state
            if (!IsListening)
            {
                Log("REJECTED not listening");
                return;
            }

            // 2. Check DYN Grammar
            if (ContextManager.GetInstance().Dynamic() == null)
            {
                return;
            }

            XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();

            // 3. Forward to all addons
            var text    = rr.Text;
            var options = new Dictionary <string, string>();

            using (var stream = new MemoryStream()) {
                rr.Audio.WriteToWaveStream(stream);
                AddOnManager.GetInstance().BeforeSpeechRejected(engine.Name, text, rr.Confidence, xnav, stream, options);
                AddOnManager.GetInstance().AfterSpeechRejected(engine.Name, text, rr.Confidence, xnav, stream, options);
            }
        }
コード例 #5
0
        public bool DumpAudio(RecognitionResult rr, String path)
        {
            // Build Path
            if (path == null)
            {
                path  = "dump/dump_";
                path += DateTime.Now.ToString("yyyy.M.d_hh.mm.ss");
                path += ".wav";
            }

            // Clean Path
            if (File.Exists(path))
            {
                File.Delete(path);
            }

            // Dump to File
            using (FileStream fileStream = new FileStream(path, FileMode.CreateNew)) {
                rr.Audio.WriteToWaveStream(fileStream);
            }

            // Clean XML data
            path += ".xml";
            if (File.Exists(path))
            {
                File.Delete(path);
            }

            // Build XML
            XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();

            if (rr.Words.Count <= 0)
            {
                return(true);
            }

            String xml = "";

            xml += "<match=\"" + rr.Confidence + "\" text\"" + rr.Text + "\">\r\n";
            xml += "<trigger=\"" + rr.Words[0].Confidence + "\" text\"" + rr.Words[0].Text + "\">\r\n";
            xml += xnav.OuterXml;

            // Dump to XML
            System.IO.File.WriteAllText(path, xml);

            return(true);
        }
コード例 #6
0
ファイル: WSRSpeechEngine.cs プロジェクト: pilot-SyS/WSRMacro
        protected XPathNavigator HandleSpeech(RecognitionResult rr)
        {
            XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();

            double confidence = GetConfidence(xnav);

            // Normal check
            if (rr.Grammar.Name != "Dyn")
            {
                if (rr.Confidence < confidence)
                {
                    cfg.logWarning("ENGINE - " + Name, "REJECTED Speech: " + rr.Confidence + " < " + confidence + " Device: " + " Text: " + rr.Text);
                    return(null);
                }

                if (rr.Words[0].Confidence < cfg.trigger)
                {
                    cfg.logWarning("ENGINE - " + Name, "REJECTED Trigger: " + rr.Words[0].Confidence + " Text: " + rr.Words[0].Text);
                    return(null);
                }
            }

            // Dynamic check
            else
            {
                confidence = confidence - 0.2;
                cfg.logInfo("ENGINE - " + Name + " - DYN", "Dynamic Grammar");
                if (rr.Confidence < (confidence))
                {
                    cfg.logWarning("ENGINE - " + Name + " - DYN", "REJECTED Speech: " + rr.Confidence + " < " + confidence + " Device: " + " Text: " + rr.Text);
                    return(null);
                }
            }

            cfg.logWarning("ENGINE - " + Name, "RECOGNIZED Speech: " + rr.Confidence + " (" + confidence + ") / " + rr.Words[0].Confidence + " (" + rr.Words[0].Text + ")" + " Device: " + " Text: " + rr.Text);
            cfg.logDebug("ENGINE - " + Name, xnav.OuterXml);

            if (cfg.DEBUG)
            {
                WSRSpeechManager.GetInstance().DumpAudio(rr);
            }

            return(xnav);
        }
コード例 #7
0
        protected void SpeechRecognizedCallback(SpeechEngine engine, RecognitionResult rr)
        {
            // 1. Handle the Listening global state
            if (!IsListening)
            {
                Log("REJECTED not listening");
                return;
            }

            // Compute XPath Navigator
            // XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();
            var text = rr.Text;

            Console.Write("<JSON>");
            using (var stream = new MemoryStream()) {
                XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();
                var            nav  = xnav.Select("/SML/action/*");

                string opts = "";
                if (nav.Count > 0)
                {
                    opts = "\"options\": {" + Options(nav) + "}, ";
                }

                string txt  = "\"text\": \"" + rr.Text.Replace("\"", "\\\"").ToString(culture) + "\", ";
                string conf = "\"confidence\": " + rr.Confidence.ToString(culture).Replace(",", ".") + ", ";

                rr.Audio.WriteToWaveStream(stream);
                stream.Position = 0;
                var base64 = Convert.ToBase64String(stream.GetBuffer());

                string json = "{" + txt + conf + opts + "   \"base64\": \"" + base64 + "\"}";
                Console.Write(json);


                // stream.Position = 0;
                // using (FileStream fileStream = new FileStream("F:/temp2.wav", FileMode.CreateNew)) {
                //    stream.CopyTo(fileStream);
                // }
            }
            Console.Write("</JSON>");
        }
コード例 #8
0
        protected String HandleWildcard(RecognitionResult rr, String url)
        {
            if (rr.Audio == null) { return url;  }

              XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();
              XPathNavigator wildcard = xnav.SelectSingleNode("/SML/action/@dictation");
              if (wildcard == null) { return url; }

              // Retrieve language
              String language = cfg.language;
              if (wildcard.Value != "true") {
            language = wildcard.Value;
              }

              // Google
              using (MemoryStream audioStream = new MemoryStream()) {
            rr.Audio.WriteToWaveStream(audioStream);
            // rr.GetAudioForWordRange(rr.Words[word], rr.Words[word]).WriteToWaveStream(audioStream);
            audioStream.Position = 0;
            var speech2text = WSRSpeechManager.GetInstance().ProcessAudioStream(audioStream, language);
            if (url != null) {
              url += "dictation=" + HttpUtility.UrlEncode(speech2text);
            }
              }

              return url;
        }
コード例 #9
0
        protected XPathNavigator HandleSpeech(RecognitionResult rr)
        {
            XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();

              double confidence = GetConfidence(xnav);
              if (rr.Confidence < confidence) {
            cfg.logWarning("ENGINE - "+Name, "REJECTED Speech: " + rr.Confidence + " < " + confidence + " Device: " + " Text: " + rr.Text);
            return null;
              }

              if (rr.Words[0].Confidence < cfg.trigger) {
            cfg.logWarning("ENGINE - "+Name, "REJECTED Trigger: " + rr.Words[0].Confidence + " Text: " + rr.Words[0].Text);
            return null;
              }

              cfg.logWarning("ENGINE - "+Name, "RECOGNIZED Speech: " + rr.Confidence + " / " + rr.Words[0].Confidence + " (" + rr.Words[0].Text + ")" + " Device: " + " Text: " + rr.Text);
              cfg.logDebug("ENGINE - "+Name, xnav.OuterXml);

              if (cfg.DEBUG) { WSRSpeechManager.GetInstance().DumpAudio(rr); }

              return xnav;
        }
コード例 #10
0
    public void SpeechRejected(SpeechEngine engine, RecognitionResult rr) {

      // 1. Handle the Listening global state
      if (!IsListening) {
        Log("REJECTED not listening");
        return;
      }

      // 2. Check DYN Grammar
      if (ContextManager.GetInstance().Dynamic() == null) {
        return;
      }

      XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();

      // 3. Forward to all addons
      var text = rr.Text;
      var options = new Dictionary<string, string>();

      using (var stream = new MemoryStream()) {
        rr.Audio.WriteToWaveStream(stream);
        AddOnManager.GetInstance().BeforeSpeechRejected(engine.Name, text, rr.Confidence, xnav, stream, options);
        AddOnManager.GetInstance().AfterSpeechRejected(engine.Name, text, rr.Confidence, xnav, stream, options);
      }
    }
コード例 #11
0
    public void SpeechRecognized(SpeechEngine engine, RecognitionResult rr) {

      // 1. Handle the Listening global state
      if (!IsListening) {
        Log("REJECTED not listening");
        return;
      }

      // Compute XPath Navigator
      XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();

      // 2. Handle confidence
      if (!Confidence(engine.Name, rr, xnav, engine.Confidence)) {
        return;
      }

      // 3. Set an engagement for valid audio
      AddOnManager.GetInstance().HandleProfile(engine.Name, "engaged", (Object) DateTime.Now);

      // 4. Forward to all addons
      var text    = rr.Text;
      var grammar = rr.Grammar.Name;
      var options = new Dictionary<string, string>();

      using (var stream = new MemoryStream()) {
        rr.Audio.WriteToWaveStream(stream);
        AddOnManager.GetInstance().BeforeSpeechRecognition(engine.Name, text, rr.Confidence, xnav, grammar, stream, options);
        AddOnManager.GetInstance().AfterSpeechRecognition(engine.Name, text, rr.Confidence, xnav, grammar, stream, options);
      }
    }
コード例 #12
0
ファイル: WSRMacro.cs プロジェクト: Oniric75/WSRMacro
        // ==========================================
        //  WSRMacro DICTATION
        //  Only for Windows.Speech not Microsoft.Speech
        // ==========================================
        protected String HandleWildcard(RecognitionResult rr, String url)
        {
            XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();
              XPathNavigator wildcard = xnav.SelectSingleNode("/SML/action/@dictation");
              if (wildcard == null) { return url; }

              // Store URL
              this.dictationUrl = url;

              // Google
              using (MemoryStream audioStream = new MemoryStream()) {
            rr.Audio.WriteToWaveStream(audioStream);
             // rr.GetAudioForWordRange(rr.Words[word], rr.Words[word]).WriteToWaveStream(audioStream);
            audioStream.Position = 0;
            var speech2text = ProcessAudioStream(audioStream);
            if (url != null) {
              url += "&dictation=" + HttpUtility.UrlEncode(speech2text);
            }
              }

              return url;
        }
コード例 #13
0
ファイル: WSRMacro.cs プロジェクト: Oniric75/WSRMacro
        protected XPathNavigator HandleSpeech(RecognitionResult rr)
        {
            XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();

              double confidence = GetConfidence(xnav);
              if (rr.Confidence < confidence) {
            logInfo("ENGINE", "REJECTED Speech: " + rr.Confidence + " < " + confidence + " Device: " + GetDeviceConfidence() + " Text: " + rr.Text);
            return null;
              }

              if (rr.Words[0].Confidence < WSRConfig.GetInstance().trigger) {
            logInfo("ENGINE", "REJECTED Trigger: " + rr.Words[0].Confidence + " Text: " + rr.Words[0].Text);
            return null;
              }

              logInfo("ENGINE", "RECOGNIZED Speech: " + rr.Confidence + "/" + rr.Words[0].Confidence + " Device: " + GetDeviceConfidence() + " Text: " + rr.Text);
              WSRConfig.GetInstance().logDebug("ENGINE", xnav.OuterXml);
              if (WSRConfig.GetInstance().DEBUG) { DumpAudio(rr); }

              return xnav;
        }
コード例 #14
0
ファイル: WSRMacro.cs プロジェクト: Oniric75/WSRMacro
        public bool DumpAudio(RecognitionResult rr, String path)
        {
            // Build Path
              if (path == null){
            path  = "dump/dump_";
            path += DateTime.Now.ToString("yyyy.M.d_hh.mm.ss");
            path += ".wav";
              }

              // Clean Path
              if (File.Exists(path)){ File.Delete(path); }

              // Dump to File
              using (FileStream fileStream = new FileStream(path, FileMode.CreateNew)) {
            rr.Audio.WriteToWaveStream(fileStream);
              }

              // Clean XML data
              path += ".xml";
              if (File.Exists(path)){ File.Delete(path); }

              // Build XML
              XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();

              String xml = "";
              xml += "<match=\"" + rr.Confidence + "\" text\"" + rr.Text+"\">\r\n";
              xml += "<trigger=\"" + rr.Words[0].Confidence + "\" text\"" + rr.Words[0].Text + "\">\r\n";
              xml += xnav.OuterXml;

              // Dump to XML
              System.IO.File.WriteAllText(path, xml);

              return true;
        }
コード例 #15
0
    protected String HandleWildcard(RecognitionResult rr, String url) {
      if (rr.Audio == null) { return url;  }

      XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();
      XPathNavigator wildcard = xnav.SelectSingleNode("/SML/action/@dictation");
      if (wildcard == null) { return url; }

      // Retrieve language
      String language = cfg.language;
      if (wildcard.Value != "true") {
        language = wildcard.Value;
      }

      // Google
      var speech2text = ProcessAudioStream(rr, language);
      if (url != null) {
        url += "dictation=" + HttpUtility.UrlEncode(speech2text);
      }

      return url;
    }
コード例 #16
0
    protected XPathNavigator HandleSpeech(RecognitionResult rr) {
      XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator();

      double confidence = GetConfidence(xnav);

      // Normal check
      if (rr.Grammar.Name != "Dyn") {
        if (rr.Confidence < confidence) {
          cfg.logWarning("ENGINE - " + Name, "REJECTED Speech: " + rr.Confidence + " < " + confidence + " Device: " + " Text: " + rr.Text);
          return null;
        }

        if (rr.Words[0].Confidence < cfg.trigger) {
          cfg.logWarning("ENGINE - " + Name, "REJECTED Trigger: " + rr.Words[0].Confidence + " Text: " + rr.Words[0].Text);
          return null;
        }
      }

      // Dynamic check
      else {
        confidence = confidence - 0.2;
        cfg.logInfo("ENGINE - " + Name + " - DYN","Dynamic Grammar");
        if (rr.Confidence < (confidence)) {
          cfg.logWarning("ENGINE - " + Name + " - DYN", "REJECTED Speech: " + rr.Confidence + " < " + confidence + " Device: " + " Text: " + rr.Text);
          return null;
        } 
      }

      cfg.logWarning("ENGINE - " + Name, "RECOGNIZED Speech: " + rr.Confidence + " (" + confidence + ") / " + rr.Words[0].Confidence + " (" + rr.Words[0].Text + ")" + " Device: " + " Text: " + rr.Text);
      cfg.logDebug("ENGINE - "+Name, xnav.OuterXml);

      if (cfg.DEBUG) { WSRSpeechManager.GetInstance().DumpAudio(rr); } 

      return xnav;
    }