Riconoscimento vocale

di il
13 risposte

Riconoscimento vocale

Salve a tutti.
Mi piacerebbe creare un'applicazione che riconosca la voce. ho trovato alcuni esempi ma non funzionano. Il risultato è sempre l'errore"No recognizer is installed". vi posto il codice di esempio (se riesco)
Imports System.Speech.Recognition
Imports System.Threading
Imports System.Globalization
Imports System.Speech.Synthesis
Imports System.Speech.Recognition.SrgsGrammar
Public Class Form1

' events
Public Event SpeechRecognized As _
EventHandler(Of SpeechRecognizedEventArgs)
Public Event SpeechRecognitionRejected As _
EventHandler(Of SpeechRecognitionRejectedEventArgs)
' word list
Dim wordlist As String() = New String() {"Yes", "No", "Maybe"}
' word recognised event
Public Sub recevent(ByVal sender As System.Object,
ByVal e As RecognitionEventArgs)
LabelYes.ForeColor = Color.LightGray
LabelNo.ForeColor = Color.LightGray
LabelMaybe.ForeColor = Color.LightGray
If (e.Result.Text = "Yes") Then
LabelYes.ForeColor = Color.Blue
ElseIf (e.Result.Text = "No") Then
LabelNo.ForeColor = Color.Blue
ElseIf (e.Result.Text = "Maybe") Then
LabelMaybe.ForeColor = Color.Blue
End If
End Sub
' recognition failed event
Public Sub recfailevent(ByVal sender As System.Object,
ByVal e As RecognitionEventArgs)
LabelYes.ForeColor = Color.LightGray
LabelNo.ForeColor = Color.LightGray
LabelMaybe.ForeColor = Color.LightGray
End Sub
' form initialisation
Private Sub Form1_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
' need these to get British English rather than default US
' recogniser & grammar
Dim recog As New SpeechRecognizer
Dim gram As Grammar
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
Thread.CurrentThread.CurrentUICulture = New CultureInfo("en-US")
' convert the word list into a grammar
Dim words As New Choices(wordlist)
gram = New Grammar(New GrammarBuilder(words))

recog.LoadGrammar(gram)
' add handlers for the recognition events
AddHandler recog.SpeechRecognized, AddressOf Me.recevent
AddHandler recog.SpeechRecognitionRejected, AddressOf Me.recfailevent
' enable the recogniser
recog.Enabled = True
End Sub
End Class
ho scaricato ed installato anche MicrosoftSpeechPlatformSDKma non è servito a niente!
forse è troppo complicato per un neofita come mé!
Comunque, qualcuno ci capisce qualcosa?
grazie

13 Risposte

  • Re: Riconoscimento vocale

    Https://msdn.microsoft.com/it-it/magazine/dn857362.asp
  • Re: Riconoscimento vocale

    Grazie gian82, purtroppo dall'articolo che mi hai linkato non ci capisco molto perché è in C#. Forse dovrei avere il codice della demo… magari riuscirei a capirci qualcosa!!
    grazie comunque.
    vito
  • Re: Riconoscimento vocale

    Non è molto recente ma è in vb.net
    http://www.pierotofy.it/pages/guide/Guida_al_Visual_Basic_dotNET/Riconoscimento_vocale/
  • Re: Riconoscimento vocale

    Grazie di nuovo gian82
    l'esempio del link è uno di quelli che ho già provato, ma Il risultato è sempre l'errore "No recognizer is installed"
  • Re: Riconoscimento vocale

    Io non ho mai trovato un codice funzionante, credo ci siano problemi per la lingua italiana
  • Re: Riconoscimento vocale

    Prova questo codice :
    foreach (RecognizerInfo ri in SpeechRecognitionEngine.InstalledRecognizers())
    {
        System.Diagnostics.Debug.WriteLine(ri.Culture.Name);
    }
    hai installato i riferimenti corretti al progetto?
    hai fatto riferimento a C:\Program Files\Microsoft SDKs\Speech\v11.0\Assembly\Microsoft.Speech.dll ?

    prova questo codice :
    
     using Microsoft.Speech.Recognition;
    
     CultureInfo c = null;
     c = new CultureInfo("it-IT");
     Microsoft.Speech.Recognition.SpeechRecognitionEngine eng = null;
     eng = new Microsoft.Speech.Recognition.SpeechRecognitionEngine(c);
     var list = SpeechRecognitionEngine.InstalledRecognizers();
     
  • Re: Riconoscimento vocale

    Si, tutti i riferimenti nel progetto sono istallati. un codice simile a quello che hai postato l'ho provato e mi restituisce tutte le voci installate)Scansoft silvia.microsoft elsa desktop, ecc)
  • Re: Riconoscimento vocale

    >>>Mi piacerebbe creare un'applicazione che riconosca la voce.
    private void RunRecognitionEngine(CultureInfo c)
            {
                eng = new Microsoft.Speech.Recognition.SpeechRecognitionEngine(c);
                var list = SpeechRecognitionEngine.InstalledRecognizers();            
                Choices parole = new Choices();
                parole.Add(new string[] {"comando naviga","comando articoli","leggi","ferma","parti","precedente","fuori","dentro"});
    
                // Create a GrammarBuilder object and append the Choices object.
                GrammarBuilder gb = new GrammarBuilder();
                gb.Append(parole);            
                // Create the Grammar instance and load it into the speech recognition engine.
                Grammar g = new Grammar(gb);            
                eng.LoadGrammar(g);
                eng.SetInputToDefaultAudioDevice();
                eng.RecognizeAsync(RecognizeMode.Multiple);
               
                // Register a handler for the SpeechRecognized event.          
                eng.SpeechRecognized += Recognizer_SpeechRecognized2;            
            }
            
            private void Recognizer_SpeechRecognized2(object sender, SpeechRecognizedEventArgs e)
            {
                if (e.Result.Text.Equals("naviga"))
                {
                    this.StopReading();
                    if(this.lastHrefLink!=null && this.lastHrefLink !="") { 
                        this.Navigate(this.lastHrefLink);
                    }
                }
                if(e.Result.Text.Equals("articoli"))
                {
                  this.StopReading();
                  HtmlElementCollection coll = doc.All;
                  StartReadingArticleTimer();
                  LeggiArticoli(coll);            
                }  
                if(e.Result.Text.Equals("leggi"))
                {
                    this.fermaLetturaArticoli = false;
                    this.StartReading();
                }
                if (e.Result.Text.Equals("ferma"))
                {
                    this.fermaLetturaArticoli = true;
                    this.StopReading();
                }
            }
    lascia perdere i metodi dentro gli if ,se traduci in vb.net dovrebbe comunque riconoscere le parole (Choices)
  • Re: Riconoscimento vocale

    gian82 ha scritto:


    >>>Mi piacerebbe creare un'applicazione che riconosca la voce.
    private void RunRecognitionEngine(CultureInfo c)
            {
                eng = new Microsoft.Speech.Recognition.SpeechRecognitionEngine(c);
                var list = SpeechRecognitionEngine.InstalledRecognizers();            
                Choices parole = new Choices();
                parole.Add(new string[] {"comando naviga","comando articoli","leggi","ferma","parti","precedente","fuori","dentro"});
    
                // Create a GrammarBuilder object and append the Choices object.
                GrammarBuilder gb = new GrammarBuilder();
                gb.Append(parole);            
                // Create the Grammar instance and load it into the speech recognition engine.
                Grammar g = new Grammar(gb);            
                eng.LoadGrammar(g);
                eng.SetInputToDefaultAudioDevice();
                eng.RecognizeAsync(RecognizeMode.Multiple);
               
                // Register a handler for the SpeechRecognized event.          
                eng.SpeechRecognized += Recognizer_SpeechRecognized2;            
            }
            
            private void Recognizer_SpeechRecognized2(object sender, SpeechRecognizedEventArgs e)
            {
                if (e.Result.Text.Equals("naviga"))
                {
                    this.StopReading();
                    if(this.lastHrefLink!=null && this.lastHrefLink !="") { 
                        this.Navigate(this.lastHrefLink);
                    }
                }
                if(e.Result.Text.Equals("articoli"))
                {
                  this.StopReading();
                  HtmlElementCollection coll = doc.All;
                  StartReadingArticleTimer();
                  LeggiArticoli(coll);            
                }  
                if(e.Result.Text.Equals("leggi"))
                {
                    this.fermaLetturaArticoli = false;
                    this.StartReading();
                }
                if (e.Result.Text.Equals("ferma"))
                {
                    this.fermaLetturaArticoli = true;
                    this.StopReading();
                }
            }
    lascia perdere i metodi dentro gli if ,se traduci in vb.net dovrebbe comunque riconoscere le parole (Choices)
    questo codice mi da un sacco di errori… proprio non sono capace con C#
  • Re: Riconoscimento vocale

    Mancheranno degli using(imports) ,prova ad aggiungere questi:
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.Speech.Synthesis;
    using Microsoft.Speech.Recognition;
    using System.Globalization;
    using System.Timers;
    
    ti consiglierei di fare un progetto windows forms pulito ed usare la documentazione msdn risolvendo un problema alla volta,se devi tradurre del codice da c# a vb.net potresti usare sharpdevelop versione 4.4. ,nel suo menu principale sotto project trovi convert per convertire da c# ad altri linguaggi
  • Re: Riconoscimento vocale

    Ok grazie di tutto
  • Re: Riconoscimento vocale

    gian82 ha scritto:


    hai installato i riferimenti corretti al progetto?
    hai fatto riferimento a C:\Program Files\Microsoft SDKs\Speech\v11.0\Assembly\Microsoft.Speech.dll ?
    Su win10 64 bit non ce l'ho la cartella C:\Program Files\Microsoft SDKs\Speech, ho soltanto C:\Program Files\Microsoft SDKs\Azure
  • Re: Riconoscimento vocale

    Probabilmente non hai installato l'sdk speech
Devi accedere o registrarti per scrivere nel forum
13 risposte