TENSORFLOW speech-command:解码wav时出现错误(数据读取字符串时太短)

时间:2018-06-03 10:46:35

标签: tensorflow speech

谢谢你的帮助。

我正在学习张量流的tuturial(语音命令),在我下载代码和数据集后,我运行程序,经过几个步骤的训练后,出现了一个错误。

InvalidArgumentError (see above for traceback): Data too short when trying to read string
     [[Node: DecodeWav = DecodeWav[desired_channels=1, desired_samples=16000, _device="/job:localhost/replica:0/task:0/device:CPU:0"](ReadFile)]]
     [[Node: DecodeWav/_21 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device_incarnation=1, tensor_name="edge_4_DecodeWav", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"]()]]
似乎解码方法有些不对劲,但我无法弄清楚出了什么问题。我从github下载后没有更改任何代码。 你能帮助我吗。感谢。

2 个答案:

答案 0 :(得分:0)

问题解决了。 问题是数据集中的一个语音是空的(0 kb),并且程序使用随机来获取训练数据,如果随机到这个空的训练语音,它就会出现问题中的错误。

答案 1 :(得分:0)

就我而言,我没有任何空文件。讨论底部的功能对我有帮助:

https://github.com/mozilla/DeepSpeech/issues/2048

import os
import wave
import pandas
import sys

def compare_header_and_size(wav_filename):
    with wave.open(wav_filename, 'r') as fin:
        header_fsize = (fin.getnframes() * fin.getnchannels() * fin.getsampwidth()) + 44
    file_fsize = os.path.getsize(wav_filename)
    return header_fsize != file_fsize

df = pandas.read_csv(sys.argv[1])
invalid = df.apply(lambda x: compare_header_and_size(x['wav_filename']), axis=1)
print('The following files are corrupted:')
print(df[invalid].values)

在比较所介绍功能中的两种测量方法时,我发现音频文件的长度不同。

原因是我将元数据添加到了wav文件,同时将它们保存在Adobe Audition中。那是一个错误