É possível usar o mecanismo de reconhecimento de fala do Windows em um jogo de pronúncia do Word?
-
27-09-2019 - |
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 ....
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:
- Converter o texto original em fonemas usando ISPENGINEPRONUNCIONAÇÃO :: GetPronncions.
- 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).
- 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