Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [C#]Riconoscimento vocale da System.Speech

    Ciao a tutti,
    sto provando a fare una piccola applicazione per il riconoscimento vocale utilizzando le librerie System.Speech.Recognition.
    Premesso che il linguaggio del computer è Italiano (e quindi non posso attivare le funzionalità integrate di riconoscimento vocale da pannello di controllo), ho trovato, scartabellando per internet, questo codice:
    Codice PHP:
    using System;
    using System.Speech;
    using System.Speech.Recognition;
    using System.Threading;
    using System.Diagnostics;
    using System.Globalization;

    namespace 
    SpeechTest
    {
        class 
    Program
        
    {

            static 
    void Main(string[] args)
            {
                
    EnumerateEngines();
                
    args CheckArguments(args);

                
    CommandListener listener = new CommandListener();
                
    listener.SetCommands(args);
                
    listener.Run();
            }

            private static 
    string[] CheckArguments(string[] args)
            {
                if (
    args.Length == 0)
                {
                    
    Console.WriteLine("Setting up default words. Enter your own words via command line arguments");
                    
    args = new string[] { "music""word" };
                }

                
    Console.Write("Now listening for...");
                foreach (
    string word in args)
                {
                    
    Console.Write(String.Format("'{0}', "word));
                }
                
    Console.WriteLine("\r\n(Press a key to stop listening)");
                return 
    args;
            }

            private static 
    void EnumerateEngines()
            {
                
    Console.WriteLine("The following engines are available");
                foreach (
    RecognizerInfo config in SpeechRecognitionEngine.InstalledRecognizers())
                {
                    
    Console.WriteLine(config.Name " " config.Description);
                }
            }
        }

        class 
    CommandListener
        
    {
            
    SpeechRecognitionEngine _speechRecogniser;
            public 
    CommandListener()
            {
                
    _speechRecogniser = new SpeechRecognitionEngine();
                
    _speechRecogniser.SetInputToDefaultAudioDevice();

                
    _speechRecogniser.SpeechDetected += new EventHandler<SpeechDetectedEventArgs>(_speechRecogniser_SpeechDetected);
                
    _speechRecogniser.SpeechHypothesized += new EventHandler<SpeechHypothesizedEventArgs>(_speechRecogniser_SpeechHypothesized);
                
    _speechRecogniser.SpeechRecognitionRejected += new EventHandler<SpeechRecognitionRejectedEventArgs>(_speechRecogniser_SpeechRecognitionRejected);
                
    _speechRecogniser.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(_speechRecogniser_SpeechRecognized);
                
    _speechRecogniser.AudioStateChanged += new EventHandler<AudioStateChangedEventArgs>(_speechRecogniser_AudioStateChanged);
                
    _speechRecogniser.AudioSignalProblemOccurred += new EventHandler<AudioSignalProblemOccurredEventArgs>(_speechRecogniser_AudioSignalProblemOccurred);

                
    NotifyEvent("Loaded default engine - {0}"_speechRecogniser.RecognizerInfo.Name);
            }

            
    #region Event Handlers
            
    void _speechRecogniser_AudioSignalProblemOccurred(object senderAudioSignalProblemOccurredEventArgs e)
            {
                
    NotifyEvent("Audio problem {0}"e.AudioSignalProblem.ToString("G"));
            }

            
    void _speechRecogniser_AudioStateChanged(object senderAudioStateChangedEventArgs e)
            {
                
    NotifyEvent("Audio state now {0}"e.AudioState.ToString("G"));
            }

            
    void _speechRecogniser_SpeechRecognized(object senderSpeechRecognizedEventArgs e)
            {
                
    NotifyEvent("Recognized '{0}' at {1} seconds"e.Result.Texte.Result.Audio.AudioPosition);
            }

            
    void _speechRecogniser_SpeechRecognitionRejected(object senderSpeechRecognitionRejectedEventArgs e)
            {
                
    NotifyEvent("RecognitionRejected '{0}' at {1} seconds"e.Result.Texte.Result.Audio.AudioPosition);
            }

            
    void _speechRecogniser_SpeechHypothesized(object senderSpeechHypothesizedEventArgs e)
            {

                
    NotifyEvent("Hypothesized '{0}' at seconds"e.Result.Text);
            }

            
    void _speechRecogniser_SpeechDetected(object senderSpeechDetectedEventArgs e)
            {
                
    NotifyEvent("Detected speech at {0} seconds"e.AudioPosition.TotalSeconds);
            }
            
    #endregion

            
    public void SetCommands(string[] commands)
            {
                
    GrammarBuilder grammarBuilder = new GrammarBuilder();

                
    grammarBuilder.Culture _speechRecogniser.RecognizerInfo.Culture;
                
    grammarBuilder.Append(new Choices(commands));
                
    Grammar grammar = new Grammar(grammarBuilder);

                
    _speechRecogniser.UnloadAllGrammars();
                
    _speechRecogniser.LoadGrammar(grammar);

                
    _speechRecogniser.RecognizeAsync(RecognizeMode.Multiple);
            }

            public 
    void Run()
            {
                while (!
    Console.KeyAvailable)
                {
                    
    Thread.Sleep(100);
                }

                
    _speechRecogniser.Dispose();
            }

            private static 
    void NotifyEvent(string formatparams object[] args)
            {
                
    Console.WriteLine(string.Format(formatargs));
            }
        }

    Ok, il problema è, dopo aver aggiunto il riferimento del progetto a System.speech, compilando mi da questo errore su questa linea:
    Codice PHP:
    _speechRecogniser.SetInputToDefaultAudioDevice(); 
    Errore HRESULT E_FAIL restituito da una chiamata a un componente COM.

    Non ne so moltissimo di C#, preferisco altri linguaggi, ma sembra che il problema sia il "defaultAudioDevice". Controllando tra le periferiche,il mio microfono è abilitato e funzionante.
    Provando a cambiare la suddetta riga così:
    Codice PHP:
    _speechRecogniser.SetInputToNull(); 
    Il risutalto è uguale. Il problema quindi non è il microfono.

    Cosa diavolo può essere?
    Grazie a tutti!

  2. #2
    Ciao.
    I possibili problemi sono 2:
    1) Non stai eseguendo l'istanza di VisualStudio in modalità Administrator
    2) Non hai le Sapi5.1 installate.

    Facci sapere...
    Ciao

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    A me non ha dato nessun errore in compilazione ... sicuro che l'errore sia durnate la compilazione ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    1) Si, ho i privilegi di amministratore
    2) Beh, per ogni evenienza mi sono scaricato il Windows SDK v7.0 che dovrebbe avere già incluse le sapi 5.3, tanto è che il download delle nuove release delle sapi non è più disponibile. Inoltre, non dovrebbe darmi un errore sull'inizializzazione dell'oggetto se non le avessi? Oppure proprio non mostrarmi la libreria.

    Potresti provare il codice e vedere se a te funziona? Perchè sui 4 computer che ho non c'è verso, inoltre su sistemi 64bit dice che è proprio impossibile eseguire System.Speech non so per quale astruso motivo.

    Grazie mille!

  5. #5
    @oregon: si, scusami hai perfettamente ragione, è un errore run-time. Ormai inizio a perdere colpi >_>

  6. #6
    Ciao ... non vorrei insistere più di tanto ... ma per privilegi di amministratore, intendi dire .... tasto destro->Esegui come amministratore?.
    Insisto perchè è importante per poter verificare il secondo punto del mio post.

    Facci sapere...
    Ciao

  7. #7
    Effettivamente, lanciandolo come amministratore l'errore cambia, e dice che non ho le sapi installate: "Riconoscimento vocale non disponibile nel sistema. Impossibile trovare i motori SAPI e di riconoscimento vocale."
    Ok, allora mi sono scaricato i 4 giga di windows sdk per niente
    Ora sto provvedendo ad installare le sapi 5.1 (ma non erano arrivati alle 5.3?)

    Grazie mille

  8. #8
    Attenzione alle impostazione nel pannello di controllo .... "SpeechRecognitionOption".

    Facci sapere...
    Ciao

  9. #9
    Ok, ho impostato SAPI Developer Sample Engine come "lingua" nel pannello di controllo e ora il programma funziona.
    Sapete se qualcuno ha rilasciato, anche a pagamento, un riconoscitore vocale in italiano (oltre a dragon naturally speaking)?
    Questo è abbastanza grossolano e non lo si può addestrare(approposito, l'addestramento come funziona?)

    Grazie

  10. #10
    Non saprei...
    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.