Error in MSR Identity toolkit (fopen)

◇◆丶佛笑我妖孽 提交于 2020-01-17 05:06:05

问题


I try to run a demo for speaker verification using MSR Identity toolkit. However it left error after training UBM step. The error is as follow. It looks like fopen return -1 and cause error to fread. I can't understand why it can't read the filenames. I can't attach the code since it involves many functions. I just hope someone that familiar with this toolkit can help me.

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);

Part of the code where lead to the error as follow:

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 contains:

'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'

回答1:


I use MSR Identity Toolkit without problem, fortunately.

What I have in htkread.m is as follows:

...

fid = fopen(filename, 'rb', 'ieee-be');

nframes = fread(fid, 1, 'int32'); % number of frames

...

Maybe the error you encountered comes from:

  • big-endian/little-endian issue

  • the *.htk feature you have is missing

  • the *.htk is with other format

regards,

tommy




回答2:


Is your fid returning a negative value? If yes, try specifying entire path where dataList= 'ubm.lst'; is in the code



来源:https://stackoverflow.com/questions/40364593/error-in-msr-identity-toolkit-fopen

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!