Pergunta

Uso para criar um aplicativo que use o mecanismo de reconhecimento de fala do Windows ou o SAPI. é como um jogo para pronúncia que isso lhe dá uma pontuação quando você a pronuncia corretamente. Mas quando iniciei experimentos com o SAPI, ele tem um reconhecimento ruim, a menos que, se você carregar uma gramática nele (xml), seu melhor resultado de reconhecimento.

Mas o problema agora é a pronúncia mais próxima do texto de entrada será reconhecida. por exemplo:

Base de dados -> DEDEBASE -> Correto.

Mesmo se você pronunciar mal. Dá a você respostas corretas.

sem usar a gramática XML

Quando você diz que o banco de dados lhe dá "na base/base/base de dados/etc ..."

Por favor, poste sua resposta, sugestão, esclarecimento. Votos de melhor resposta.

is it possible or not?

A propósito, uso o compilador Delphi nos projetos ....

Foi útil?

Solução

Para o que você quer, provavelmente é melhor não usar uma gramática. Mas exige que os usuários façam o treinamento básico "mínimo" do mecanismo de reconhecimento de fala. Não é muito longo e relativamente agradável. E isso realmente faz a diferença na precisão do reconhecimento (acredite, eu tenho um forte sotaque francês no meu inglês).
Pode até ser incluído como uma prática preliminar para o próprio jogo.
Você pode achar interessante ver isso Coderagem 4 sessão sobre "Fala que habilita os aplicativos Delphi (ZIP)"

Outras dicas

Eu faria duas coisas:

  1. Converter o texto original em fonemas usando ISPENGINEPRONUNCIONAÇÃO :: GetPronncions.
  2. Use uma gramática de ditado e o modelo de linguagem de pronúncia para forçar o SAPI para devolver um conjunto de fonemas - faça isso chamando ISPRECOGRAMMAR :: LoadDictation(L "pronúncia", splo_static).
  3. Compare os fonemas reconhecidos com os fonemas alvo.

Observe que a pronúncia do ISPEngine não está disponível no SAPI 5.1, portanto, isso é limitado ao Vista e ao Windows 7.

Se o objetivo do jogo é incentivar o usuário a falar usando a pronúncia mais próxima da "pronúncia padrão" para um determinado idioma (por exemplo, EN-US), então fazer com que o usuário treine o reconhecimento para se adaptar ao usuário particular (não modificado) Os padrões de fala podem ser contraproducentes. Em parte, você estaria treinando o reconhecimento para perdoar mais os lapsos de pronúncia do usuário.

Se você acaba usando o reconhecimento baseado em gramática ou o reconhecimento baseado em ditado (o post de Eric Brown parece muito promissor), você provavelmente também desejará analisar as pontuações de "confiança". Essas pontuações estão disponíveis após o reconhecimento de um reconhecimento, e eles dão um valor numérico para o quão confiante o reconhecedor é que o que o usuário realmente disse corresponde ao que o reconhecedor pensa que o usuário disse. Dependendo da configuração do reconhecimento e do caso de uso, as pontuações de confiança podem ou não ser significativas.

Se você está baseando sua pontuação de precisão na representação textual dos telefones/fonemas/pronúncia, uma maneira rápida e fácil de obter uma pontuação de precisão seria usar a distância de Levenshtein, um algoritmo para o qual existem muitas implementações disponíveis gratuitamente na rede . Um algoritmo de pontuação melhor pode ser um diferencial ressincronizador, com a unidade atômica de comparação sendo telefones únicos.

Aqui estão algumas palavras -chave para a caça ao MSDN Doc:
Isprecoresult -> getphrase -> spPhrase -> regra -> 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top