Это PocketSphinx, одна из систем распознавания непрерывной речи с открытым исходным кодом, разработанная Университетом Карнеги-Меллона и не зависящая от говорящего.
Хотя когда-то это была исследовательская система, активное развитие в значительной степени прекратилось и она стала очень и очень далека от современного состояния. Я делаю релиз, потому что люди тем не менее им пользуются, и в системе сборки и API есть ряд исторических ошибок, которые необходимо исправить.
Номер версии странно велик, потому что существует «выпуск», который люди используют, под названием 5prealpha, и с этого момента мы будем использовать правильное семантическое управление версиями.
Условия использования см. в файле ЛИЦЕНЗИИ.
Теперь мы используем CMake для сборки, что должно дать приемлемые результаты в Linux и Windows. Не уверен насчет Mac OS X, потому что у меня такой нет. Кроме того, просто была удалена аудиобиблиотека, которая никогда толком не собиралась и не работала корректно ни на одной платформе.
Больше нет зависимости от SphinxBase. SphinxBase больше нет. Это не та SphinxBase, которую вы ищете. Вся ваша SphinxBase принадлежит нам.
Чтобы установить модуль Python в виртуальной среде (замените ~/ve_pocketsphinx
виртуальной средой, которую вы хотите создать), из каталога верхнего уровня:
python3 -m venv ~/ve_pocketsphinx . ~/ve_pocketsphinx/bin/activate pip install .
Чтобы установить библиотеку C и привязки (при условии, что у вас есть доступ к /usr/local — если нет, используйте -DCMAKE_INSTALL_PREFIX
, чтобы установить другой префикс в первой команде cmake
ниже):
cmake -S . -B build cmake --build build cmake --build build --target install
Программа командной строки pocketsphinx
считывает одноканальный 16-битный звук PCM из стандартного ввода или одного или нескольких файлов и пытается распознать в нем речь, используя акустическую и языковую модель по умолчанию. Он принимает большое количество опций, которые вас, вероятно, не волнуют, команду , которая по умолчанию имеет значение live
, и один или несколько входных данных (кроме режима align
), или -
для чтения со стандартного ввода.
Если у вас есть одноканальный WAV-файл под названием «speech.wav» и вы хотите распознавать в нем речь, вы можете попробовать сделать это (результаты могут быть не очень хорошими):
pocketsphinx single speech.wav
Если ваши данные представлены в каком-то другом формате, я предлагаю преобразовать их с помощью sox
как описано ниже.
Команды следующие:
help
: Распечатайте длинный список тех опций, которые вас не интересуют.
config
: выгрузить конфигурацию в формате JSON в стандартный вывод (можно загрузить с помощью опции -config
).
live
: обнаруживает сегменты речи на каждом входе, запускает их распознавание (используя те параметры, которые вам не нужны) и записывает результаты в стандартный вывод в формате JSON с разделителями строк. Я понимаю, что это не самый красивый формат, но он определенно превосходит XML. Каждая строка содержит объект JSON со следующими полями, которые имеют короткие имена, чтобы сделать строки более читабельными:
b
: Время начала в секундах с начала потока.
d
: Продолжительность в секундах
p
: Предполагаемая вероятность результата распознавания, т. е. число от 0 до 1, представляющее вероятность входных данных в соответствии с моделью.
t
: Полный текст результата распознавания.
w
: список сегментов (обычно слов), каждый из которых, в свою очередь, содержит поля b
, d
, p
и t
для начала, конца, вероятности и текста слова. Если было передано -phone_align yes
, то будет присутствовать поле w
, содержащее сегментации телефонов в том же формате.
single
: Распознавайте каждый ввод как одно высказывание и записывайте объект JSON в том же формате, который описан выше.
align
: выравнивает один входной файл (или -
для стандартного ввода) по последовательности слов и записывает объект JSON в том же формате, который описан выше. Первый позиционный аргумент является входными, а все последующие объединяются в текст, чтобы избежать сюрпризов, если вы забудете его процитировать. Вы несете ответственность за нормализацию текста для удаления знаков препинания, заглавных букв, многоножек и т. д. Например:
pocketsphinx align goforward.wav "go forward ten meters"
По умолчанию выполняется только выравнивание на уровне слов. Чтобы получить выравнивание телефона, передайте -phone_align yes
во флагах, например:
pocketsphinx -phone_align yes align audio.wav $text
Это сделает вывод не особенно читаемым, но вы можете использовать jq, чтобы его очистить. Например, вы можете получить только названия слов и время начала следующим образом:
pocketsphinx align audio.wav $text | jq '.w[]|[.t,.b]'
Или вы можете получить имена телефонов и продолжительность следующим образом:
pocketsphinx -phone_align yes align audio.wav $text | jq '.w[]|.w[]|[.t,.d]'
Конечно, есть много, много других возможностей.
soxflags
: возвращает аргументы sox
, которые создадут соответствующий формат ввода. Обратите внимание: поскольку командная строка sox
немного необычна, они всегда должны идти после имени файла или -d
(который сообщает sox
читать с микрофона). Вы можете запустить живое распознавание следующим образом:
sox -d $(pocketsphinx soxflags) | pocketsphinx -
или декодируйте файл с именем «audio.mp3» следующим образом:
sox audio.mp3 $(pocketsphinx soxflags) | pocketsphinx -
По умолчанию в стандартную ошибку выводятся только ошибки, но если вам нужна дополнительная информация, вы можете передать -loglevel INFO
. Частичные результаты не распечатываются, возможно они будут в будущем, но не задерживайте дыхание.
По программированию см. каталог примеров, где приведены примеры использования библиотеки C и Python. Вы также можете прочитать документацию по API Python или C API.
PocketSphinx в конечном итоге основан на Sphinx-II
, который, в свою очередь, был основан на некоторых старых системах Университета Карнеги-Меллона, которые были выпущены как бесплатное программное обеспечение под лицензией, подобной BSD, благодаря усилиям Кевина Лензо. Большая часть декодера, в частности, была написана Равишанкаром Мосуром (ищите «rkm» в комментариях), но внесли свой вклад и другие люди, более подробную информацию см. в файле AUTHORS.
Дэвид Хаггинс-Дейнс (автор этого документа) отвечает за создание PocketSphinx
, в который добавлены различные оптимизации скорости и памяти, вычисления с фиксированной запятой, поддержка JSGF, переносимость на различные платформы и несколько связный API. Затем он на некоторое время исчез.
После этого долгое время сопровождением занимался Николай Шмырев, а большой объем кода внесли Александр Соловец, Вячеслав Климков и другие.
В настоящее время его снова поддерживает Дэвид Хаггинс-Дэйнс.