28 int main(
int argc, 
char *argv[]) {
    29   using namespace kaldi;
    31   typedef kaldi::int64 int64;
    34         "Computes dot-products between iVectors; useful in application of an\n"    35         "iVector-based system.  The 'trials-file' has lines of the form\n"    37         "and the output will have the form\n"    38         "<key1> <key2> [<dot-product>]\n"    39         "(if either key could not be found, the dot-product field in the output\n"    40         "will be absent, and this program will print a warning)\n"    42         "Usage:  ivector-compute-dot-products [options] <trials-in> "    43         "<ivector1-rspecifier> <ivector2-rspecifier> <scores-out>\n"    45         " ivector-compute-dot-products trials ark:train_ivectors.scp ark:test_ivectors.scp trials.scored\n"    46         "See also: ivector-plda-scoring\n";
    57     std::string trials_rxfilename = po.
GetArg(1),
    58         ivector1_rspecifier = po.
GetArg(2),
    59         ivector2_rspecifier = po.
GetArg(3),
    60         scores_wxfilename = po.
GetArg(4);
    63     int64 num_done = 0, num_err = 0;
    68     Input ki(trials_rxfilename);
    71     Output ko(scores_wxfilename, binary);
    72     double sum = 0.0, sumsq = 0.0;
    75     while (std::getline(ki.
Stream(), line)) {
    76       std::vector<std::string> fields;
    78       if (fields.size() != 2) {
    79         KALDI_ERR << 
"Bad line " << (num_done + num_err) << 
" in input "    80                   << 
"(expected two fields: key1 key2): " << line;
    82       std::string key1 = fields[0], key2 = fields[1];
    83       if (!ivector1_reader.
HasKey(key1)) {
    84         KALDI_WARN << 
"Key " << key1 << 
" not present in 1st table of ivectors.";
    88       if (!ivector2_reader.
HasKey(key2)) {
    89         KALDI_WARN << 
"Key " << key2 << 
" not present in 2nd table of ivectors.";
    94           &ivector2 = ivector2_reader.
Value(key2);
   100       sumsq += dot_prod * dot_prod;
   102       ko.
Stream() << key1 << 
' ' << key2 << 
' ' << dot_prod << std::endl;
   106       BaseFloat mean = sum / num_done, scatter = sumsq / num_done,
   107           variance = scatter - mean * mean, stddev = sqrt(variance);
   108       KALDI_LOG << 
"Mean dot-product was " << mean << 
", standard deviation was "   111     KALDI_LOG << 
"Processed " << num_done << 
" trials " << num_err
   113     return (num_done != 0 ? 0 : 1);
   114   } 
catch(
const std::exception &e) {
   115     std::cerr << e.what();
 
This code computes Goodness of Pronunciation (GOP) and extracts phone-level pronunciation feature for...
 
void PrintUsage(bool print_command_line=false)
Prints the usage documentation [provided in the constructor]. 
 
Allows random access to a collection of objects in an archive or script file; see The Table concept...
 
The class ParseOptions is for parsing command-line options; see Parsing command-line options for more...
 
const T & Value(const std::string &key)
 
void SplitStringToVector(const std::string &full, const char *delim, bool omit_empty_strings, std::vector< std::string > *out)
Split a string using any of the single character delimiters. 
 
int Read(int argc, const char *const *argv)
Parses the command line options and fills the ParseOptions-registered variables. 
 
std::string GetArg(int param) const
Returns one of the positional parameters; 1-based indexing for argc/argv compatibility. 
 
bool HasKey(const std::string &key)
 
int NumArgs() const
Number of positional parameters (c.f. argc-1). 
 
A class representing a vector. 
 
Real VecVec(const VectorBase< Real > &a, const VectorBase< Real > &b)
Returns dot product between v1 and v2. 
 
int main(int argc, char *argv[])