Deepspeech - выводит больше аудиофайлов и сохраняет результат
Я закончил обучение общим голосовым данным для глубокой речи от Mozilla, и теперь я могу получить вывод для одного аудио .wav
файл. Ниже приведена команда, которую я использую.
(deepspeech-venv) megha@megha-medion:~/Alu_Meg/DeepSpeech_Alug_Meg/DeepSpeech$ ./deepspeech my_exportdir/model.pb/output_graph.pb models/alphabet.txt myAudio_for_testing.wav
здесь myAudio_for_testing.wav - аудиофайл, который я использую, чтобы получить приведенный ниже вывод.
TensorFlow: v1.6.0-9-g236f83e
DeepSpeech: v0.1.1-44-gd68fde8
Warning: reading entire model file into memory. Transform model file into an mmapped graph to reduce heap usage.
2018-06-29 14:51:35.832686: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
heritor teay we decide the lunch ha annral limined eddition of y ye com im standmat
Наследник, мы решаем, что обед будет завершен
Вот мои несколько вопросов,
1) Выделенное предложение, выделенное жирным шрифтом, является выводом для моего аудио. как я могу сохранить этот файл?
2) У меня есть около 2000 аудио файлов, как это. Как я могу прочитать 1 на 1 и получить вывод? Я пытался написать скрипт на python для чтения всех имеющихся у меня аудиофайлов.wav, но поскольку моя служба Deepspeech использует некоторые источники, хранящиеся в виртуальной среде, я не понимаю, как мне написать свою команду Deepspeech внутри сценария., Ребята, можете ли вы дать мне несколько советов, чтобы продолжить? Это будет отличная помощь.
Спасибо:)
Megha
2 ответа
Для второго вопроса я добавил дополнительный раздел в файле client.py файла Deepspeech, чтобы встретить несколько файлов и сохранить каждую стенограмму в файле Excel с соответствующим именем файла в качестве значения индекса.
> r =csv.reader(open('my_CSV_file.csv')) lines = list(r) pathToAudio =
> args.audio#sys.argv[3] audio_files = os.listdir(pathToAudio) for i in
> range(1,len(lines)):
> for eachfile in audio_files :
> if eachfile.endswith(".wav"):
> if(eachfile == lines[i][1]):
> file_Path = pathToAudio + "/" + eachfile
> print("File to be read is ", file_Path)
> fs, audio = wav.read(file_Path)
> audio_length = len(audio) * ( 1 / 16000)
> assert fs == 16000, "Only 16000Hz input WAV files are supported for now!"
> print('Running inference.', file=sys.stderr)
> inference_start = timer()
> output = ds.stt(audio, fs)
> lines[i][2] = output
> writer = csv.writer(open('my_CSV_file', 'w'))
> writer.writerows(lines)
> print(output)
> inference_end = timer() - inference_start
> print('Inference took %0.3fs for %0.3fs audio file.' % (inference_end, audio_length), file=sys.stderr)
Я нашел решение для моего первого вопроса. мы можем просто перенаправить вывод в некоторый файл, как показано ниже.
(deepspeech-venv) megha@megha-medion:~/Alu_Meg/DeepSpeech_Alug_Meg/DeepSpeech$ ./deepspeech my_exportdir/model.pb/output_graph.pb models/alphabet.txt myAudio_for_testing.wav > output_test.csv
TensorFlow: v1.6.0-9-g236f83e
DeepSpeech: v0.1.1-44-gd68fde8
Warning: reading entire model file into memory. Transform model file into an mmapped graph to reduce heap usage.
2018-06-29 15:22:50.275833: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
Я просто добавил > output_test.csv после моей команды.
Но я так и не смог разобраться со вторым вопросом.
Я не знаю, слишком ли поздно отвечать на ваш вопрос, но оставляю свой ответ здесь на случай, если у других может быть такая же / похожая проблема.
На странице github Mozilla/DeepSpeech они используют скрипт transcribe.py. В этом скрипте у них есть функция под названием transcribe_many (src_paths, dst_paths). По сути, эта функция принимает на входе список местоположений аудиофайлов (src_paths) и загружает их в ОЗУ, а затем делает вывод в режиме множественной обработки. Вывод записывается в папку "dst_paths".
Вот предварительный просмотр кода из файла, которым я поделился по ссылке выше.
def transcribe_many(src_paths,dst_paths):
pbar = create_progressbar(prefix='Transcribing files | ', max_value=len(src_paths)).start()
for i in range(len(src_paths)):
p = Process(target=transcribe_file, args=(src_paths[i], dst_paths[i]))
p.start()
p.join()
log_progress('Transcribed file {} of {} from "{}" to "{}"'.format(i + 1, len(src_paths), src_paths[i], dst_paths[i]))
pbar.update(i)
pbar.finish()