Kaldi shell 脚本解析命令行选项

语音识别:安装编译Kaldi详细过程及遇到的一些问题汇总 语音识别-Kaldi的安装编译实录(Ubuntu环境) 本篇博客用于记录一次用开源语音识别(ASR)工具Kaldi来实现中文语音识别功能的经历,记录一路遇到的一些问题。希望本篇文章可以给广大有需要的人提供一些帮助,也以防之后若再做此方向的东西会重蹈覆辙。 注意:本文是在Ubuntu64位的虚拟机环境下运行的,通过阅读Kaldi官方的INSTALL文件中指出的,似乎不能在Windows下正常编译使用。 Kaldi简介:Kaldi是当前最流行的开源语音识别工具(Toolkit),它使用WFST来实现解码算法 阅读详情

训练神经网络片段:

{ # Train the MLP
train_ali=exp/tri4b_train_ali
cv_ali=exp/tri4b_dev_ali
$cuda_cmd $dir/log/train_nnet.log \
  steps/train_nnet.sh --copy-feats false \
    --apply-cmvn true --norm-vars true --delta-order 2 --splice 5 \
    --mlp-init $dir/nnet.init --learn-rate 0.004 \
    --train-opts "--verbose 2" \
    data_fbank_$num_mel_bins/train data_fbank_$num_mel_bins/dev data/lang $train_ali $cv_ali $dir || exit 1;
}



以wsj/s5/steps/nnet/train.sh 为例

. ./path.sh 加载完路径后,调用utils/parse_options.sh  修改默认参数


# TRAINING SCHEDULER
learn_rate=0.008   # initial learning rate
train_opts=        # options, passed to the training script
train_tool=        # optionally change the training tool
frame_weights=     # per-frame weights for gradient weighting

# OTHER
use_gpu_id= # manually select GPU id to run on, (-1 disables GPU)
seed=777    # seed value used for training data shuffling and initialization
# End configuration.

echo "$0 $@"  # Print the command line for logging

[ -f path.sh ] && . ./path.sh; 


. parse_options.sh || exit 1;###解析命令行选项


if [ $# != 6 ]; then
   echo "Usage: $0 <data-train> <data-dev> <lang-dir> <ali-train> <ali-dev> <exp-dir>"
   echo " e.g.: $0 data/train data/cv data/lang exp/mono_ali exp/mono_ali_cv exp/mono_nnet"
   echo "main options (for others, see top of script file)"
   echo "  --config <config-file>  # config containing options"
   exit 1;
fi

utils/parse_options.sh 

#!/bin/bash

# Copyright 2012  Johns Hopkins University (Author: Daniel Povey);
#                 Arnab Ghoshal, Karel Vesely

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
# THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
# WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
# MERCHANTABLITY OR NON-INFRINGEMENT.
# See the Apache 2 License for the specific language governing permissions and
# limitations under the License.


# Parse command-line options.
# To be sourced by another script (as in ". parse_options.sh").
# Option format is: --option-name arg
# and shell variable "option_name" gets set to value "arg."
# The exception is --help, which takes no arguments, but prints the 
# $help_message variable (if defined).


###
### The --config file options have lower priority to command line 
### options, so we need to import them first...
###

# Now import all the configs specified by command-line, in left-to-right order
for ((argpos=1; argpos<$#; argpos++)); do
  if [ "${!argpos}" == "--config" ]; then
    argpos_plus1=$((argpos+1))
    config=${!argpos_plus1}
    [ ! -r $config ] && echo "$0: missing config '$config'" && exit 1
    . $config  # source the config file.
  fi
done


###
### No we process the command line options
###
while true; do
  [ -z "${1:-}" ] && break;  # break if there are no arguments
  case "$1" in
    # If the enclosing script is called with --help option, print the help 
    # message and exit.  Scripts should put help messages in $help_message
  --help|-h) if [ -z "$help_message" ]; then echo "No help found." 1>&2;
	  else printf "$help_message\n" 1>&2 ; fi; 
	  exit 0 ;; 
  --*=*) echo "$0: options to scripts must be of the form --name value, got '$1'"
       exit 1 ;;
    # If the first command-line argument begins with "--" (e.g. --foo-bar), 
    # then work out the variable name as $name, which will equal "foo_bar".
  --*) name=`echo "$1" | sed s/^--// | sed s/-/_/g`; ### 解析规则
    # Next we test whether the variable in question is undefned-- if so it's 
    # an invalid option and we die.  Note: $0 evaluates to the name of the 
    # enclosing script.
    # The test [ -z ${foo_bar+xxx} ] will return true if the variable foo_bar
    # is undefined.  We then have to wrap this test inside "eval" because 
    # foo_bar is itself inside a variable ($name).
      eval '[ -z "${'$name'+xxx}" ]' && echo "$0: invalid option $1" 1>&2 && exit 1;
      
      oldval="`eval echo \\$$name`";
    # Work out whether we seem to be expecting a Boolean argument.
      if [ "$oldval" == "true" ] || [ "$oldval" == "false" ]; then 
	was_bool=true;
      else 
	was_bool=false;
      fi

    # Set the variable to the right value-- the escaped quotes make it work if
    # the option had spaces, like --cmd "queue.pl -sync y"
      eval $name=\"$2\"; 
        
    # Check that Boolean-valued arguments are really Boolean.
      if $was_bool && [[ "$2" != "true" && "$2" != "false" ]]; then
        echo "$0: expected \"true\" or \"false\": --$name $2" 1>&2
        exit 1;
      fi
      shift 2;
      ;;
  *) break;
  esac
done


# Check for an empty argument to the --cmd option, which can easily occur as a 
# result of scripting errors.
[ ! -z "${cmd+xxx}" ] && [ -z "$cmd" ] && echo "$0: empty argument to --cmd option" 1>&2 && exit 1;


true; # so this script returns exit code 0.


kaldi-gop shell脚本位置kaldi-master/egs/gop/s5/run.sh 跑完log: feat-to-len scp:../s1/data/test-1000_hires/feats.scp ark,t:data/test_10short/tmp.len utils/subset_data_dir.sh: reducing #utt from 1000 to 10 steps/nnet3/compute_output.sh --cmd run.pl --nj 1 --online-ivect 阅读详情

相关推荐

ESP32对接百度智能云语音识别:从硬件配置到API调用的完整指南

本文详细介绍了ESP32对接百度智能云语音识别的完整流程,从硬件配置到API调用,涵盖麦克风选择、音频处理、错误处理及性能优化等关键环节。通过实战案例展示如何实现低成本、高效率的语音交互方案,特别适合智能硬件开发者参考。

weixin_29198045的博客 372

Kaldi脚本parse_options.sh解析

这个脚本在别的脚本中调用,目前是修改调用脚本中的默认配置参数。 比如我有了make_mfcc.sh的脚本,里面默认配置了mfcc的一些参数,比如维度、类型等等,然后我在make_mfcc执行的时候,通过命令行传参来修改默认的参数,可以通过调用parse_mfcc.sh来完成这一步。 这就要求parse_options.sh读取它上一层的脚本携带的参数,就是make_mfcc执行时的命令行参数,然后检查当前变量是否包含它,修改之,否则报错。 下面是parse_options.sh的开头部分,这部分sh.

程序的魅力 1219

基于555定时器的D类功放设计:从PWM原理到无反馈电路实践

D类功放(数字功放)是一种高效率的音频放大技术,其核心原理是脉冲宽度调制(PWM)。它将输入的模拟音频信号转换为一系列高速开关的脉冲,通过控制功率开关管(如MOSFET)的通断,再经低通滤波器还原放大后的音频。相比传统AB类功放,其转换效率通常超过90%,显著降低了热能损耗。这项技术在追求高能效和小型化的现代音频设备中价值凸显,广泛应用于有源音箱、汽车音响和便携式设备。本文聚焦于一种独特的实现方案:以经典的555定时器芯片为核心,构建一个无整体负反馈的D类功放。通过剖析其PWM调制器、FET电压-电流转换级

weixin_30162121的博客 221

服务器中运行run.sh脚本遇到的一些问题

首先进入到run.sh文件所在的目录中,使用命令./run.sh运行时发现报如下错误: (base) [LiMiao@gpu08 GMM_baseline]$ ./run.sh -bash: ./run.sh: Permission denied 完整的命令如下所示: (base) [LiMiao@gpu08 ~]$ cd pycharmProjects/GMM_baseline (base) [LiMiao@gpu08 GMM_baseline]$ ls gmm_ubm.py log prepr

qq_33740167的博客 7062

华为模拟器eNSP练习题 - HCIA综合实验

华为模拟器eNSP练习题 - HCIA综合实验 题目要求 ISP路由器只能配置IP地址,之后不得进行其他任何配置; 整个内部网络基于192.168.1.0/24进行地址规划; R1/R2之间启动OSPF协议,单区域; PC1-PC4自动获取IP地址; PC1不能telnet R1,PC1外的其他内网pc可以; PC1-PC4可以访问PC5,R2的公网接口只拥有一个公有IP12.0.0.1; 外部的client可以通过域名www.ensp.com访问http server; ISP路由telnet 12.0

炸鸡店老板z的博客 9869

DSP TMS320C6657中FFT函数的调用与具体使用方法

首先明确一点,C6678中FFT的函数形式为: N : length of FFT in complex samples ptr_x : pointer to complex data input ptr_w : pointer to complex twiddle factor ptr_y : pointer to complex output data brev : pointer to bit reverse table containing 64 entries n_min : should be

Kayboy的博客 3012

shell脚本执行报错 invalid option/出现问题就去解决,都是工程师做的肯定有bug

执行shell 脚本报错信息如下: 解决办法步骤如下: 用vim 打开脚本 ,发现脚本格式为doc ,则需要将脚本格式转为unix 使用vim 修改格式 :set fileformat=unix 1 3. 在保存退出 :wq 1 就完美解决啦 ...

qq_15821487的博客 2761

双摄像头的实时视频拼接及目标跟踪(一)

本章主要讲图像拼接算法的研究 先膜拜一下知乎大佬全面的叙述:https://www.zhihu.com/question/34535199/answer/135169187 本文图像拼接是基于opencv的图像拼接,流程分为以下几步 ...

Y.W.jian的博客 3万+

语音识别实战 第二期

<p><img src="https://img-bss.csdnimg.cn/202203160419064128.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202203160419172128.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202203160419366050.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202203160419513637.png" alt="" /></p>

分布式定时任务(XXL-JOB)整合达梦数据库 带源码

背景 1. 因公司需要可视化管理配置调度任务,查询项目选择XXL-JOB,它是开源项目,入手很简单,详情可以参考官方文档; 2. 因项目的机密性,选择数据库为国内知名的达梦数据库7,与Java项目的整合详情可以参考SpringBoot 集成 达梦数据库 maven依赖本地jar包; 3. 因XXL-JOB暂时没有找到集成达梦数据库的案例,博主自己整合DM7踩过很多的坑,特此整合一个简单可直接...

艾斯-李的博客 3814

任务混部最少服务器数量计算问题

这里的并行度指的是该任务运行时会占用的服务器数量。要注意的是,一个服务器在每个时刻可以被任意任务使用,但同一时刻最多只能被一个任务占用,并且任务运行结束后会立即释放服务器(结束时刻不占用)。最后,我们从字典中找出服务器数量的最大值,这个最大值就是完成这批任务混部最少需要的服务器数量。对于每个任务,我们会遍历其对应的时间区间,将该任务的并行度累加到对应时刻的服务器数量上。任务混部的目标是让这批任务由同一批服务器承载运行,你需要计算完成这批任务混部最少需要多少服务器,以此来最大化控制资源成本。

m0_62153576的博客 106

kaldi入门详解——aishell步骤解释

kaildi讲解 kaldi是一个开源的语音识别工具箱,是基于c++、perl、shell编写的,可以在windows和unix 平台上编译。 教程网页:http://www.kaldi-asr.org/doc/ 里面可以查阅语音/说话人识别实现过程、kaldi的数据结构、命令的使用说明等。还有网上的dan的ppt。 kaldi下载:https://github.com/kaldi-asr/kaldi。 语音识别基础知识快速入门 英文:《Speech and Language Processing

hdm314的博客 4093

SAP 固定资产采购简介

SAP 固定资产采购是指企业通过采购流程获取长期使用并记录为固定资产的物品。固定资产是企业为长期使用而购置的资产,如机器设备、办公设备、建筑物、车辆等,通常这些资产的使用期限较长,并且在资产负债表上记录。在SAP系统中,固定资产采购流程通常与物料管理(MM)模块和固定资产管理(FI-AA)模块相结合。这个过程涉及从需求的提出、采购订单的创建,到货物接收、发票校验和资产激活的多个步骤。

我小时候很黑的博客 1728

kaldi中SHELL调用C++程序过程源码分析

引入 kaldi真正的核心源码,都是C++写成的,这个结论可以从如下两点得以确认: (1)在kaldi的源码kaldi/src目录下,能看到很多扩展名为.cc的源程序,这是linux下C++源码; (2)在源码中,比如kaldi\src\featbin\compute-mfcc-feats.cc,可以看到static_cast<uint16>和std::string这样的代码,这是C+...

ybdesire的专栏 1660

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

LiJian-kaldi搭建在线语音识别系统 资料汇总

感谢视频制作者李健和视频上传者北洋村的热心分享 原视频在:https://www.bilibili.com/video/BV19a4y1h7cB 大家记得三连~ 说明 Kaldi的资料比较少,对新手特别不友好,我也是无意中搜到了这个视频的资料,看完确实收获很大,学习的过程一方面是复现出作者的各种模型,另一方面,也想在心中形成kaldi的一个big picture。 但这个视频并无相关的学习资料,另外视频的知识点的索引也不全面,我分享的目的也是希望大家一起搜集资料,互相分享,互相促进,所以这篇文章也会不断更新

weixin_42217661的博客 4069

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

kaldi中文语音识别_基于thchs30(4)

接上回,完成数据准备的工作后,shell显示 说明已经创建这些文件完毕。 我们看到生成的spk2utt的文件格式是这样的: 我们看到它是先是一个说话者id号 然后是这个说话者id下的所有名称, 而word.txt和text是一样的。 既然我们已经数据准备了,所以以后就不用再进行数据准备了,所以在下次运行run.sh时,  先注释掉相关数据准备的shell脚本。 #data prep...

dqxiaoxiao的博客 5039

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Kaldi 语音识别基础教程

Kaldi 是一款语音识别工具,可以快速训练语音识别模型。Kaldi 主要是用 C++ 编写,是用 Shell、Python 和 Perl 来作为胶水进行模型训练,并且 Kaldi 是完全免费开源的。 Kaldi 语音识别模型的快速构建,具有大量语音相关算法以及优质的论坛受到国内外企业和开发者的追捧。 本场 Chat 将以以下几个模块进行延展: Kaldi 介绍; Kaldi 环境构建; Kal...

GitChat 7365

Kaldi .cc文件的命令行解析

通过src/util/parse-options.h 中定义的ParseOptions类来解析参数 Shell脚本的使用: src/nnetbin/nnet-train-frmshuff.cc 用来训练神经网络 即上图 train_tool=nnet-train-frmshuff NnetTrainOptions trn_opts; trn_o

极度视界 4571

语音识别--kaldi特征提取代码笔记(1)

脚本说明 cmd.sh(配置运行方式,以及内存使用大小,使用gpu数量) #export train_cmd="queue.pl --mem 2G" #export decode_cmd="queue.pl --mem 4G" #export mkgraph_cmd="queue.pl --mem 8G" export train_cmd=run.pl export decode_cmd="run.pl --mem 4G" export mkgraph_cmd="run.pl --mem 8G" ex

暮木的博客 1436

【kaldi】运行aishell脚本解析

local/aishell_prepare_dict.sh $data/resource_aishell生成data/local/dict目录下的内容 extra_questions.txt lexiconp.txt lexicon.txt nonsilence_phones.txt optional_silence.txt silence_phones.txtextra_questions.txt:用来构建决策树的问题集,可以是空的,包含多组相同的音素,每一组音素包含相同的重音或者声调;lexi

u011590738的博客 723

kaldi的编译安装与报错解决方法

引入 kaldi是语音识别领域,最常用的一个工具。 它自带了很多特征提取模块,能提取MFCC/ivector/xvector等语音特征;也自带了很多语音模型代码,可以直接使用或重新训练GMM-HMM等模型;它还支持GPU进行训练。可以说是功能很强大了。 更厉害的是,你只需要简单的SHELL编程,就能使用kaldi。kaldi作为一个工具,不需要像库一样进行大量编程,所以使用门槛其实不高。 但是,它...

ybdesire的专栏 1万+

在树莓派上搭建kaldi离线语音识别系统(交叉编译)

在树莓派上搭建kaldi离线语音识别系统(交叉编译)一、系统功能和环境概述1.1、实现功能1.2、开发环境二、kaldi语音识别工具箱三、树莓派的相关配置四、kaldi交叉编译过程4.1、配置Ubuntu中的交叉编译环境4.2、kaldi相关依赖工具的交叉编译4.2.1 openFST的交叉编译过程4.2.2 OpenBlas的交叉编译过程4.2.3 clapack的交叉编译过程4.2.4 Als...

麻城明歌的博客 7357

kaldi基于aishell中chain解码

1,创建识别目录,在c1同级目录创建online_demo目录,目录结构如下: mkdir -p online_demo/data/models/chain mkdir -p online_demo/data/wav mkdir -p online_demo/log 2,生成识别配置文件,在kaldi-trunk/egs/aishell/c1目录下执行脚本: ./steps/online/nnet3/prepare_online_decoding.sh --add_pitch true data/lang

qq_35088451的博客 613

kaldi parse_options.sh

一般程序里的局部变量我们都会设置默认值,如果没有传真值,程序执行时候使用默认值,这个在python或其它程序里都比较好实现,在shell里如何实现呢? test.sh代码 a=1 b=1 echo "\$0 =${0} \$1=${1} \$2=${2}" echo "default a=${a} b=$b" echo "update a=${a} b=$b" 即使我们这样执行 bash test.sh --a 10 --b 22, 执行结果 (notebook) root@ai-PowerEdge-R

q_xiami123的博客 792

kaldi下清华语音数据集的说话人测试脚本编写

这是第二次弄了,第一次在朋友服务器上弄,后面关闭了,数据也没能拷贝,重新写写 参考链接: https://github.com/kaldi-asr/kaldi/issues/1014  关于trials文件的作用 http://blog.csdn.net/zjm750617105/article/details/52421814  kaldi中改写sre10/v1用timit da

破晓的专栏 3036

【kaldi】Kaldi tutorial翻译之Prerequisites(前提条件)-kaldi学习前必备梳理

本翻译仅供自己学习使用,拒绝转载。欢迎大家指出错误,共同学习。 This tutorial assumes that you know the basics of speech recognition using the HMM-GMM approach. One brief introduction that is available online

HHLab 1683
上一篇: Automatic Speech Recognition(ASR) 学习资源
下一篇: Kaldi .cc文件的命令行解析
LiFeitengup
博客等级 码龄15年 466粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值