Речь Фонеме в.Net

Проблема в том, что я хочу получить фонемы аудио речи на языке C#. скажем, у вас есть аудиофайл типа "x.wav", который говорит "привет, дорогой Шамим". Я хочу извлечь все фонемы речи и их относительное время. что-то вроде рисунка ниже:

Phoneme Editor

я использовал System.Speech библиотека (оба recognition а также synthesis пространства имен) но я не нашел то, что хотел. Теперь не заблуждайтесь! Я не хочу фонемы предложения "Привет дорогой Шамим", я хочу извлечь фонемы из неизвестного аудиовхода, который говорит, и английского предложения. Я старался System.Speech.Recognition но он пытается извлечь слова из аудиофайла, а не фонемы! и, как вы уже догадались, слова на 30% неверны!;)

4 ответа

Решение

Для распознавания фонем требуется немного специальной настройки по сравнению с распознаванием слов, и большинство движков не поддерживают его напрямую (словарь однотонных "слов" обычно не дает хорошей точности). Основная причина этого заключается в том, что распознавание фонем намного менее точно, чем распознавание слов, поскольку распознавание слов более ограничено (оно отфильтровывает все телефонные комбинации, которые не соответствуют реальным словам, а это большинство из них). Но HTK поддерживает это. Вы можете использовать его, выполняя команды оболочки (в этом нет ничего плохого в C#) или привязывая библиотеки.

Попробуйте использовать System.Speech.Recognition.DictationGrammar конструктор, который принимает строковый аргумент и передает в качестве аргумента "грамматика: диктовка # произношение". В качестве альтернативы необработанный SAPI (с использованием сборки взаимодействия SpeechLib) может задавать грамматику произношения через ISpRecoGrammar::LoadDictation и указание "Произношение" в качестве темы диктовки.

Вы можете связать скрытый набор инструментов Markov Model Tool с помощью pinvoke с вашим кодом на C# или попробовать использовать среду Accord.net, которая управляется и имеет классы HMM, но не содержит конкретных методов для извлечения фонем.

Это для vanilla .net, или вы можете использовать SAPI (вы знаете, речь API)? Речь api это хорошо, и, кажется, есть то, что вы ищете. Более того, в среде Windows его легче получить, чем из внешних библиотек (не говоря уже о том, что проблема лицензирования не сильно зависит от приложения).

Вы заметили System.Speech.Recognition.RecognizedWordUnit? Кажется, это примерно то, что вы ищете.

Другие вопросы по тегам