2015-06-08 7 views
5

Как преобразовать звуковой сигнал в список фонем?преобразовать звук в список фонем в python

I. Настоящая методология и/или код, чтобы перейти от цифрового сигнала к списку фонем, из которого производится запись звука.
например:

lPhonemes = audio_to_phonemes(aSignal) 

, где, например

from scipy.io.wavfile import read 
iSampleRate, aSignal = read(sRecordingDir) 

aSignal = #numpy array for the recorded word 'hear' 
lPhonemes = ['HH', 'IY1', 'R'] 

Мне нужна функция audio_to_phonemes

Не все звуки языка слова, так что я не могу просто использовать something that uses the google API, например.

Редактировать
Я не хочу аудио словами, я хочу аудио фонем. Большинство библиотек, похоже, не выводит это. Любая библиотека, которую вы рекомендуете, должна иметь возможность выводить упорядоченный список фонем, из которых состоит звук. И это должно быть в python.

Я также хотел бы узнать, как работает звук звука для фонем. Если не для целей реализации, то ради интереса.

ответ

9

Точное распознавание фонемы непросто архивировать, поскольку сами фонемы довольно слабо определены. Даже в хорошем звуке наилучшие возможные системы сегодня имеют около 18% частоты ошибок фонемы (вы можете проверить результаты LSTM-RNN в TIMIT, опубликованном Алексом Грейвсом).

В знак признания фонем CMUSphinx в Python делается так:

from os import environ, path 

from pocketsphinx.pocketsphinx import * 
from sphinxbase.sphinxbase import * 

MODELDIR = "../../../model" 
DATADIR = "../../../test/data" 

# Create a decoder with certain model 
config = Decoder.default_config() 
config.set_string('-hmm', path.join(MODELDIR, 'en-us/en-us')) 
config.set_string('-allphone', path.join(MODELDIR, 'en-us/en-us-phone.lm.dmp')) 
config.set_float('-lw', 2.0) 
config.set_float('-beam', 1e-10) 
config.set_float('-pbeam', 1e-10) 

# Decode streaming data. 
decoder = Decoder(config) 

decoder.start_utt() 
stream = open(path.join(DATADIR, 'goforward.raw'), 'rb') 
while True: 
    buf = stream.read(1024) 
    if buf: 
    decoder.process_raw(buf, False, False) 
    else: 
    break 
decoder.end_utt() 

hypothesis = decoder.hyp() 
print ('Phonemes: ', [seg.word for seg in decoder.seg()]) 

Вам необходимо оформить последнюю pocketsphinx из GitHub, чтобы запустить этот пример. Результат должен выглядеть следующим образом:

('Best phonemes: ', ['SIL', 'G', 'OW', 'F', 'AO', 'R', 'W', 'ER', 'D', 'T', 'AE', 'N', 'NG', 'IY', 'IH', 'ZH', 'ER', 'Z', 'S', 'V', 'SIL']) 

Смотрите также wiki page

+0

Привет, Николай. У меня возникла проблема с установкой последней версии и возникла еще одна проблема. Не могли бы вы взглянуть ?: http://stackoverflow.com/questions/30728041/install-pocketsphinx-for-python2-7 – Roman

+0

@Nikolay Shmyrev Не могли бы вы разработать reg 'MODELDIR'? что там? Благодарю. – oba2311

+0

MODELDIR - это расположение модели. Это может быть где угодно в системе, это зависит от того, куда вы положили файлы. –

4

Мне нужно создать функцию audio_to_phonemes

Вы в основном говорят:

мне нужно повторно реализовать 40 лет исследований распознавания речи

You не следует реализовывать это самостоятельно (если вы не собираетесь стать профессором в области распознавания речи и иметь революционный новый proach), но должен использовать одну из многих существующих фреймворков. Посмотрите на sphinx/pocketsphinx!

+0

Я действительно не хочу, чтобы изобретать колесо, я хочу, чтобы реализовать существующее программное обеспечение. 'audio_to_phonemes' должен это сделать. Хотя я не могу найти ничего, что просто забирает звук, а также передает мне фонемы и останавливается там. Я не хочу распознавания голоса *. Я хочу аудиофонмы. – Roman

+3

Поскольку это часть работы: посмотрите существующие системы программного обеспечения распознавания голоса. Они не монолитные, но имеют речевые модели, которые дают им списки фонем, обычно (конечно, в зависимости от индивидуальной структуры). –

+1

Вы можете определенно извлекать фонемы, а не слова в калди. – lCapp