Il riconoscimento vocale nel framework .NET non è efficiente [chiuso]

2

Voglio creare una tastiera virtuale in grado di catturare qualsiasi tasto tu parli e inviare la sequenza di tasti all'applicazione attiva. La parte Virtual Keyboard e il collegamento a Speech Recognition saranno fatti facilmente, ma il problema che sto soffrendo è che il riconoscimento vocale è inefficiente!

Ad esempio, dico "c" e lo prende come "v" o qualcosa del genere. Questo è estremamente irritante e sebbene funzioni con il microfono delle mie cuffie Logitech, non riconosce ancora quello che sto dicendo a volte ... È peggio con il microfono predefinito sul mio laptop Lenovo.

Ma è strano che la funzione di riconoscimento vocale di Google sul motore di ricerca di Google funzioni perfettamente, con o senza mike ... Perché è così?

C'è un modo per migliorare il mio programma?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech.Synthesis;
using System.Speech.Recognition;
using System.Threading;

namespace TextToVoice
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        SpeechSynthesizer sSynth = new SpeechSynthesizer();
        PromptBuilder pBuilder = new PromptBuilder();
        SpeechRecognitionEngine sRecognize = new SpeechRecognitionEngine();

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            pBuilder.ClearContent();
            pBuilder.AppendText(textBox1.Text);
            sSynth.Speak(pBuilder);




        }

        private void button2_Click(object sender, EventArgs e)
        {
            button2.Enabled = false;
            button3.Enabled = true;
            Choices sList = new Choices();
            sList.Add(new string[] { "one", "2", "3", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"});
            Grammar gr = new Grammar(new GrammarBuilder(sList));
            try
            {
                sRecognize.RequestRecognizerUpdate();
                sRecognize.LoadGrammar(gr);
                sRecognize.SpeechRecognized += sRecognize_SpeechRecognized;
                sRecognize.SetInputToDefaultAudioDevice();
                sRecognize.RecognizeAsync(RecognizeMode.Multiple);


            }

            catch
            {
                return;
            }
        }

        void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {

            if (e.Result.Text == "exit")
            {
                Application.Exit();
            }
            else if (e.Result.Text == "how are you")
            {
                sSynth.Speak("I am fine");
                textBox1.Text = "";
                pBuilder.ClearContent();
            }
            else if (e.Result.Text == "hey")
            {
                sSynth.Speak("Hello sir");
                textBox1.Text = "";

            }
            else
            {
                textBox1.Text = textBox1.Text + " " + e.Result.Text;

            }

            }

        private void button3_Click(object sender, EventArgs e)
        {
            button2.Enabled = true;
            button3.Enabled = false;
        }
        }
    }

Okay una modifica .. Fondamentalmente c'è un modo per creare un programma in grado di migliorare l'intesa dell'applicazione di ciò che sto parlando? Come Windows Speech Recognition ci fa leggere il testo e poi capire come parlo parole o altro, tranne che è troppo noioso: P

    
posta SinByCos 20.11.2014 - 18:12
fonte

1 risposta

3

La qualità del riconoscimento vocale dipende da molti parametri:

  • Microfono: come hai notato, un microfono con auricolare è migliore di quello del tuo laptop. I microfoni da studio daranno i risultati migliori, immagino.

  • Ambiente: avrai difficoltà a far funzionare il riconoscimento vocale in un ambiente rumoroso rispetto a un ambiente silenzioso (idealmente uno studio).

  • pronuncia: ad esempio, non sono un madrelingua inglese e ho un accento sfavorevole e quando ho provato a utilizzare il riconoscimento vocale di Google, la metà delle volte, Google comprende qualcos'altro. Allo stesso tempo, comprende praticamente tutto quando parla la mia ragazza.

  • Dizionario: se pronunci parole che effettivamente esistono, il motore di riconoscimento vocale può migliorare il suo processo usando un dizionario di parole. Ad esempio, se pronunci "elefante", ha buone possibilità di farlo bene. Se dici "eglefont", nessuno dei motori sarà in grado di scrivere la parola.

  • Sottoinsiemi contestuali: se il dizionario è associato a un contesto, sarà più facile per te capire il tuo motore. Ad esempio, chiedere al motore di digitare ciò che dici è molto più difficile che chiedergli di capire solo quattro comandi: "start", "stop", "move left" e "move right".

Mentre i primi tre punti possono aiutare a migliorare il riconoscimento in generale, penso che dovresti innanzitutto concentrarti sugli ultimi due punti.

Quello che sta accadendo, immagino, è che il motore di riconoscimento della tua applicazione sta cercando di capire parole , e non è in grado di farlo perché stai pronunciando solo lettere . Non penso che il fatto che tu abbia specificato solo lettere è rilevante: può darsi che Grammar stia ancora interpretando questo come parole, sebbene il Text to Speech di Windows capisca che le singole lettere sono in realtà lettere, non parole.

Poiché il riconoscimento vocale in Windows può anche essere addestrato per una specifica voce / pronuncia, potrebbe esserci un modo per addestrarlo per parole specifiche (nel tuo caso, lettere singole). Detto questo, non ho usato questa parte di .NET Framework, quindi non so quanto sia personalizzabile.

Anche correlati: Jeff Atwood, Qualunque cosa sia successo al riconoscimento vocale?

    
risposta data 20.11.2014 - 19:42
fonte

Leggi altre domande sui tag