Как сопоставить аудио с целевой текстовой транскрипцией - PullRequest
1 голос
/ 22 апреля 2019

Я новичок в области глубокого обучения, я делаю базовое сквозное распознавание голоса, используя API-интерфейс tenorflow, модель LSTM и функцию потери ctc.Я извлек свои аудио функции в mfccs.Я действительно не знаю, как сопоставить мои аудио с транскрипциями, я знаю, что ctc используется для этой цели, я знаю, как работает ctc, но не знаю код для его реализации.

Вот мой кодИзвлечь особенности

import os
import numpy as np
import glob
import scipy.io.wavfile as wav
from python_speech_features import mfcc, logfbank

# Read the input audio file
for f in glob.glob('Downloads/DataVoices/Training/**/*.wav', recursive=True):
    (rate,sig) = wav.read(f)
    sig = sig.astype(np.float64)
    # Take the first 10,000 samples for analysis
    #sig = sig[:10000]
    mfcc_feat = mfcc(sig,rate,winlen=0.025, winstep=0.01,
                     numcep=13, nfilt=26, nfft=512, lowfreq=0, highfreq=None,
                     preemph=0.97, ceplifter=22, appendEnergy=True)
    fbank_feat = logfbank(sig, rate)
    acoustic_features = np.concatenate((mfcc_feat, fbank_feat), axis=1) # time_stamp x n_features
    print(acoustic_features)

Я также создал обучающий файл list.txt, в котором я предоставил транскрипции с аудио-путём, например:

это пример / 001 / 001.wav

это пример / 001/001 (1) .wav

, где 001 - папка, а 001.wav и 0001 (1) .wav - два волновых файла одного высказывания.

1 Ответ

0 голосов
/ 25 апреля 2019

Я публикую это как надуманный пример, предполагая, что это даст представление о том, как можно прочитать файл CSV и имена файлов внутри CSV. Вы можете изменить это в соответствии с вашими потребностями.

Допустим, у меня есть этот файл CSV. Первый столбец - ваша стенограмма. Путь к файлу - ваш аудиофайл. В моем случае это просто текстовый файл со случайным текстом.

Script1,D:/PycharmProjects/TensorFlow/script1.txt
Script2,D:/PycharmProjects/TensorFlow/script2.txt

Это код, который я использую для проверки. Пожалуйста, помните, что это пример.

import tensorflow as tf


batch_size = 1
record_defaults = [ ['Test'],['D:/PycharmProjects/TensorFlow/script1.txt']]


def readbatch(data_queue) :

    reader = tf.TextLineReader()
    _, rows = reader.read_up_to(data_queue, batch_size)
    transcript,wav_filename = tf.decode_csv(rows, record_defaults,field_delim=",")
    audioreader = tf.WholeFileReader()
    print(wav_filename)
    _, audio = audioreader.read( tf.train.string_input_producer(wav_filename) )
    return [audio,transcript]

data_queue = tf.train.string_input_producer(['D:\\PycharmProjects\\TensorFlow\\script.csv'], shuffle=False)

batch_data = readbatch(data_queue)

batch_values = tf.train.batch(batch_data, shapes=[tf.TensorShape(()),tf.TensorShape(batch_size,)],  batch_size=batch_size, enqueue_many=False )

init = tf.initialize_all_variables()

with tf.Session() as sess:
    sess.run(init)

    sess.run(tf.initialize_local_variables())
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)
    try:
        step = 0
        while not coord.should_stop():
            step += 1
            feat = sess.run([batch_values])
            audio = feat[0][0]
            print(audio)
            script = feat[0][1]
            print(script)
    except tf.errors.OutOfRangeError:
        print(' training for 1 epochs, %d steps', step)
    finally:
        coord.request_stop()
        coord.join(threads)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...