学习经历
0---原始文档备份和环境准备
1---原始脚本注释解析
2---原始脚本训练和测试拆分
3---自己录音,做自己版本的yesNo
=========================================================
3---自己录音,做自己版本的yesNo
这个过程较为曲折,经过时间较长,主要经历了win10录音和词典设计,查找m4a转wav方法和脚本设计,识别测试失败乱投医(再次注释理解后面脚本),查看log文件并找到采样率改变方法,再次运行wer过高,检查脚本发现错误,wer等于0等过程。这里只对最终正确的过程做总结。下面将只讲述整理过的正确内容
(1)录制音频。
我的电脑是win10系统,分别在用耳机和没有耳机的情况下进行了录制,发现区别不大,最终的音频没有用耳机录制,另外,录制是去掉了麦克风增强(应该影响不大),加入了噪声抑制。录制时文件名形如YYNNYYNN.m4a。没有像例程一样采用下划线主要时考虑文件名命名不方便。录制之后拷贝到虚拟机内。
(2)转换成和例程一致wav格式
百度下,决定使用ffmpeg进行格式转换工作。所以首先安装ffmpeg,安装完毕后查看例程声音文件格式。具体如下:
ffmpeg -i 0_0_0_0_1_1_1_1.wav
显示信息如下:
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from '0_0_0_0_1_1_1_1.wav':
Duration: 00:00:06.35, bitrate: 128 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
所以最好将文件处理成8000hz,wav格式的文件。完成该功能的脚本如下(需要创建一个wav目录):
#!/bin/bash
for FILE in *.m4a;
do ffmpeg -i "$FILE" -ar 8000 "wav/${FILE%.*}.wav";
done
(3)kaldi的相关处理
(3.1)input目录
首先将kaldi里面yesno音频目录的文件全部清除,然后把自己录制的wav格式的文件复制到yesno音频目录。
然后需要修改字典和音素文件。
其中音素来源如下:
yesno目录内有一个README.txt文件,内部指出该例程网址
http://www.openslr.org/1
进入目录
找到如下内容
SLR14 | BEEP Dictionary | Text | Phonemic transcriptions of over 250,000 English words. (British English pronunciations) |
下载该文件,找到yes no的音素
如下:
YES Y EH S
NO N OW
input目录需要做修改,主要修改如下:
lexicon.txt
<SIL> SIL
YES Y EH S
NO N OW
lexicon_nosil.txt
YES Y EH S
NO N OW
phones.txt
SIL
Y
EH
S
N
OW
task.arpabo
此文件没有改动。
(3.2)由于默认音频文件名是形如0_0_0_0_1_1_1_1.wav的文件,我自己录制的文件名是形如YYNNYYNN.wav,所以还需要修改脚本create_yesno_txt.pl,具体如下
#!/usr/bin/env perl
$in_list = $ARGV[0];
open IL, $in_list;
while ($l = <IL>)
{
chomp($l);
$l =~ s/\.wav//;
$trans = $l;
$trans =~ s/Y/YES /g;
$trans =~ s/N/NO /g;
#$trans =~ s/\_/ /g;
print "$l $trans\n";
}
至此,自己版本的yesno完成,结果如下: