【问题标题】:Error in MSR Identity toolkit (fopen)MSR 身份工具包中的错误 (fopen)
【发布时间】:2016-11-01 16:44:38
【问题描述】:

我尝试使用MSR Identity toolkit 运行演示以验证说话者。然而,它在训练 UBM 步骤后留下了错误。错误如下。看起来fopen 返回-1 并导致fread 出错。我不明白为什么它无法读取filenames。我无法附上代码,因为它涉及许多功能。我只是希望熟悉这个工具包的人可以帮助我。

Error using fread
Invalid file identifier. Use fopen to generate a valid file identifier.

Error in htkread (line 7)
nframes = fread(fid, 1, 'int32'); % number of frames

Error in mapAdapt>load_data (line 107)
    data{ix} = htkread(filenames{ix});

Error in mapAdapt (line 52)
    dataList = load_data(dataList);

Error in demo_gmm_ubm (line 69)
    gmm_models{spk} = mapAdapt(spk_files, ubm, map_tau, config);

导致错误的部分代码如下:

function data = load_data(datalist)
% load all data into memory
if ~iscellstr(datalist)
    fid = fopen(datalist, 'rt');
    filenames = textscan(fid, '%s');
    fclose(fid);
    filenames = filenames{1};
else
    filenames = datalist;
end
nfiles = size(filenames, 1);
data = cell(nfiles, 1);
for ix = 1 : nfiles,
    data{ix} = htkread(filenames{ix});
end

function [data, frate, feakind] = htkread(filename)
% read features with HTK format (uncompressed)
fid = fopen(filename, 'r','b'); %ERROR HERE
nframes = fread(fid, 1, 'int32'); % number of frames
frate   = fread(fid, 1, 'int32'); % frame rate in nano-seconds unit
nbytes  = fread(fid, 1, 'short'); % number of bytes per feature value
feakind = fread(fid, 1, 'short'); % 9 is USER
ndim = nbytes / 4; % feature dimension (4 bytes per value)
data = fread(fid, [ndim, nframes], 'float');
fclose(fid);

datalist 包含:

'features\fadg0_sa2.htk'
'features\fadg0_si1279.htk'
'features\fadg0_si1909.htk'
'features\fadg0_si649.htk'
'features\fadg0_sx109.htk'
'features\fadg0_sx19.htk'
'features\fadg0_sx199.htk'
'features\fadg0_sx289.htk'
'features\fadg0_sx379.htk'

【问题讨论】:

  • 您是否生成了文件 'features\fadg0_sa2.htk'?我希望看到带有虚拟语音数据的演示,但在 MSR 工具箱中找不到。你知道我可以直接运行的任何设置吗?

标签: matlab speech-recognition voice-recognition


【解决方案1】:

幸运的是,我使用 MSR Identity Toolkit 没有问题。

我在 htkread.m 中的内容如下:

...

fid = fopen(文件名, 'rb', 'ieee-be');

nframes = fread(fid, 1, 'int32'); % 帧数

...

可能你遇到的错误来自:

  • big-endian/little-endian 问题

  • 您拥有的 *.htk 功能缺失

  • *.htk 为其他格式

问候,

汤米

【讨论】:

  • 我尝试了大端/小端,但它也不起作用。我会尝试调查您提到的第二和第三个问题。
【解决方案2】:

您的 fid 是否返回负值?如果是,请尝试指定 dataList= 'ubm.lst'; 的整个路径在代码中

【讨论】:

    猜你喜欢
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 2015-12-31
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多