Сравнение аудио с использованием механизма распознавания речи Micorosft
У меня есть приложение, в котором пользователь может произнести слово и ему будет дана процентная точность слова, которое он произнес. то есть насколько четко двигатель распознал это слово.
Все это прекрасно работает, но у меня есть дилемма, какие слова нужно добавить в словарь, который я передам механизму распознавания в качестве словаря.
Если я даю слова, начинающиеся с "p", для case pen, то такие слова, как pendant, pent и т. Д., Все будут добавлены в словарь. В этом случае я не получаю распознанное слово как "pen".
Вместо этого я всегда получаю другие слова, такие как "подвеска" и т. Д.
Но если я добавляю в словарь только ограниченные слова, такие как "pe", "pen", то для того же записанного файла я получаю распознанные слова только как "Pen".
Значит, это явно зависит от слов, которые мы даем в словарь.
Я передал то же самое своему клиенту. Но они хотят, чтобы они могли говорить неправильные слова и для заданных входных слов, поэтому в то время им не нужно было получать точность, а также получать распознанный текст.
Я сделал то, что мог сделать для этой проблемы. Но моему клиенту нужно что-то помимо вселенной.
Код:
public OdllSpeechProcessor(string culture, string speechContent , string filePath)
{
try
{
int counter = 0;
string line;
cultureInfo = new CultureInfo(culture);
recognitionEngine = new SpeechRecognitionEngine(cultureInfo);
words = new Choices();
gb = new GrammarBuilder();
gb.Culture = cultureInfo;
rndAccuracy = new Random();
System.IO.StreamReader file = new System.IO.StreamReader(filePath);
while ((line = file.ReadLine()) != null)
{
if (line != "")
{
for (int i = 0; i < srcContent.Length; i++)
{
if (line.StartsWith(subsetWords, true, cultureInfo))
{
if (count >= line.Length)
{
words.Add(line);
counter++;
}
}
}
}
}
file.Close();
// Adding words to the grammar builder.
gb.Append(words);
// Create the actual Grammar instance, with the words from the source audio.
g = new Grammar(gb);
// Load the created grammar onto the speech recognition engine.
recognitionEngine.LoadGrammarAsync(g);
У каких-нибудь экспертов есть решение для этого здесь? Любая помощь будет оценена.
Спасибо
1 ответ
Вы используете командную грамматику (то есть набор вариантов). Используя командную грамматику, движок старается найти соответствие, которое может легко привести к ложным срабатываниям (как вы видели). Возможно, вы захотите исследовать грамматику диктовки, в частности грамматику произношения, как я изложил в своем ответе на этот вопрос. Обратите внимание, что решение, которое я описал, использует некоторые интерфейсы, которые недоступны в C# (или, по крайней мере, доступны через System.Speech.Recognition
).