在进行语音识别模型的训练和测试语料收集的过程中,我们需要对收集到的语料进行归一化处理。
收集到的语料应每个命令词或句子单个截下来,对其进行归一化处理。因为即使是同一个人,在读不同的命令词的时候,音量也会不一样。特别是在语料录制的过程中,由于志愿者的逐渐疲惫,后面录的命令词的声音,可能会偏弱一些。
对语料进行归一化处理的基本原理是:取一段语料中幅度最大的点将其幅度拉大到接近1,记录拉大的比例,再将其他所有点均按这个比例拉伸。这个操作可以在Audacity等音频处理软件中进行处理,也可以使用以下方法进行操作:(该方法由全志算法友商提供,仅供全志内部使用,不对外开放,但自己实现其实也很简单)
处理方法
(1)将do_pcm工具复制到ubuntu PC的任意目录下。chmod 777 do_pcm。此时执行该工具会打印如下帮助信息:
[email protected]:~/test$ ./do_pcm
pcm file process:
[ -h]: show help information
[ -i]: input file path
[ -o]: output file path
[ --nchi]: number of input file channels, default 1
[ --ncho]: number of output file channels, default 1
[ --ichi]: channel index select from input file: 0,1,...(default 0,i.e, mean val)
[ -b]: bitwidht default 16
[ --ri]: input sample rate, default 16000
[ --ro]: output sample rate, default 16000
[ --norm]: whether or not to do pcm offline normalization, default 0
[ -v]: get split version needed 0
[ --hp]: high pass
[ --ali]: align pcm by m_sequence,default 0
[ --delay]: for two channel signal to calculate delay
[ --ali_s]: align pcm ,seconds to start with,default 0
[ --ali_e]: align pcm , seconds to end with ,default -1,which means 3min inputs
[ --split]: split pcm by m_sequence,default 0, 1 means split words,2 means split person by start, 3 means split person by end
[ --ms_cut_s]: start pos in ms
[ --ms_cut_e]: end pos in ms
[ --snr]: snr calculate
|
(2)使用Audacity或其他音频处理软件从采集到的语料中截取单个命令词,保存为一个.wav文件。
(3)在ubuntu PC上使用命令./do_pcm -i in.pcm -o out.pcm --norm对语料进行处理,得到的out.pcm则为一个处理好的语料文件,如:
![语音识别语料归一化处理的方法 语音识别语料归一化处理的方法](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzUyMi83N2RhMDEwMWZkNzU5OTM0ODU0NGVlYmM4MTgzMDM4YS5wbmc=)
幅度调整范围是-32767-72767
归一化处理前好的两个语料的对比(上方为处理前语料的音轨,下方为处理好语料的音轨):
![语音识别语料归一化处理的方法 语音识别语料归一化处理的方法](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzk1L2JmZmFkYzVlYWRmYTQ2YjNhZmZhMzNkNzkyMWIzN2M3LnBuZw==)
频谱图对比:
![语音识别语料归一化处理的方法 语音识别语料归一化处理的方法](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzQyMi84OTI1YTYzODllMzk0YmE4MDBlYWEyMTQxMjIwNWNiZS5wbmc=)