Domanda

Io utilizzo per creare un'applicazione che utilizzi il motore di riconoscimento vocale di Windows o SAPI.è come un gioco per pronuncia che ti dà un punteggio quando lo pronunci correttamente.ma quando ho iniziato gli esperimenti con SAPI, ha uno scarso riconoscimento a meno che se si carica una grammatica su di esso (XML) non si ottiene il miglior risultato di riconoscimento.

ma il problema ora è che verrà riconosciuta la pronuncia più vicina al testo immesso.Per esempio:

Banca dati -> degradato -> corretto.

anche se lo pronunci male.ti dà risposte corrette.

senza utilizzare la grammatica xml

quando dici database ti dà "nella base/nella base/data base/ecc..."

per favore pubblica la tua risposta, suggerimento, chiarimento.voti per la migliore risposta.

is it possible or not?

tra l'altro utilizzo il compilatore Delphi sui progetti....

È stato utile?

Soluzione

Per quello che vuoi, probabilmente è meglio non usare una grammatica.Ma richiede che gli utenti facciano una formazione di base "minima" sul motore di riconoscimento vocale.Non è molto lungo e relativamente piacevole.E fa davvero la differenza in termini di precisione del riconoscimento (credetemi, ho un forte accento francese nel mio inglese).
Può anche essere incluso come pratica preliminare per il gioco stesso.
Potresti trovare interessante vederlo Sessione di CodeRage 4 SU "Abilitazione vocale delle applicazioni Delphi (zip)"

Altri suggerimenti

Farei due cose:

  1. Converti il ​​testo originale in fonemi utilizzando ISpEnginePronunciation::GetPronunciations.
  2. Utilizza una grammatica di dettatura e il modello del linguaggio di pronuncia per forzare SAPI a restituirti una serie di fonemi: fallo chiamando ISpRecoGrammar::LoadDictation(L"Pronuncia", SPLO_STATIC).
  3. Confronta i fonemi riconosciuti con i fonemi target.

Tieni presente che ISpEnginePronunciation non è disponibile su SAPI 5.1, quindi è limitato a Vista e Windows 7.

Se lo scopo del gioco è incoraggiare l'utente a parlare utilizzando la pronuncia più vicina alla "pronuncia standard" per una determinata lingua (ad es.EN-US), quindi chiedere all'utente di addestrare il riconoscitore ad adattarsi ai particolari modelli vocali (non modificati) dell'utente potrebbe essere controproducente.In parte addestreresti il ​​riconoscitore ad essere più indulgente nei confronti degli errori di pronuncia dell'utente.

Sia che tu finisca per utilizzare il riconoscimento basato sulla grammatica o il riconoscimento basato sulla dettatura (il post di Eric Brown sembra molto promettente), probabilmente vorrai anche esaminare i punteggi di "confidenza".Questi punteggi sono disponibili dopo che è stato eseguito un riconoscimento e danno un valore numerico alla sicurezza del riconoscitore che ciò che l'utente ha effettivamente detto corrisponde a ciò che il riconoscitore pensa che l'utente abbia detto.A seconda della configurazione del riconoscitore e del caso d'uso, i punteggi di confidenza possono essere significativi o meno.

Se stai basando il tuo punteggio di precisione sulla rappresentazione testuale di foni/fonemi/pronuncia, un modo semplice e veloce per ottenere un punteggio di precisione sarebbe usare la distanza di Levenshtein, un algoritmo per il quale esistono molte implementazioni disponibili gratuitamente in rete .Un algoritmo di punteggio migliore potrebbe essere un differenziale di risincronizzazione, con l'unità atomica di confronto costituita dai singoli telefoni.

Ecco alcune parole chiave per la ricerca di documenti MSDN:
ISpRecoResult -> GetPhrase -> SPPHRASE -> Regola -> SPPHRASERULE -> SREngineConfidence.

http://msdn.microsoft.com/en-us/library/ee413319%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/ms720460%28v=VS.85%29.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top