袁瑞临++张栖铭++王峰++范凡
摘要:为了对猪只异常状态进行检测,本文设计了一种基于嵌入式平台的猪只声音识别系统,该系统以S3C2440芯片为微处理器,以Linux为操作系统,以QT为显示界面,并通过移植基于隐马尔科夫模型算法的语音识别工具箱HTK,实现了自动识别猪只不同状态的声音。经过实验验证表明,本系统达到了预期的实验效果。
关键词:声音识别;S3C2440; 隐马尔科夫模型;HTK; 嵌入式
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2017)04-0186-03
The Design of Embedded Voice Recognition System Based on HTK in Pigs
YUAN Rui-lin ,ZHANG Qi-ming,WANG Feng,FAN Fan
(1.College of Information Engineering, Taiyuan University of Technology, Jinzhong 030600,China)
Abstract: In order to detect the abnormal state of pigs, this paper designs a pig voice recognition system based on embedded platform, the system uses S3C2440 chip microprocessor, the Linux operating system, using QT as the display interface, and through transplantation based on Hidden Markov model algorithm for speech recognition toolbox HTK, realizes the automatic identification of pigs in different states sound. The experimental results show that the system achieves the desired experimental results.
Key words: voice recognition; S3C2440; HMM; HTK; embedded
现代集约化的养猪场规模越来越大,自动化和无人值守的水平日益提高,对猪场的状态监测提出了很高的要求,而猪的声音信息可以很好地反映猪的状态,为饲养员判断猪只的状态提供参考。声音识别作为模式识别的重要研究内容,近二十年来发展迅速,语音技术的应用已经成为一个具有竞争性的新兴高技术产业。随着计算机技术与电子技术的发展,嵌入式系统的应用领域越来越广,基于嵌入式平台的声音识别技术发展备受关注。由英国剑桥大学工程系开发的、由众多函数库和工具组成的声音识别工具箱HTK(Hidden Markov Model Toolkit),经过不断地发展和改进,得到了广泛使用,在嵌入式平台上移植开源的HTK可以缩短开发周期,节约成本。本文主要介绍了一种通过移植HTK应用于检测和识别猪只不同状态声音的嵌入式系统实现的整个过程。
1 实现原理
1.1 声音识别基本原理
关于猪只声音识别的算法,我们主要采用目前在声音信号处理的各个领域使用最为广泛的隐马尔可夫模型(HMM)算法。HMM算法是一种属于模板匹配类型的模式识别方法,即按照一定的相似度测度准则,使未知的声音模型与参考模型库作比较,以最大输出概率的一个模型作为识别结果。
在语音识别系统设计中,将每一种猪只状态作为一个基本元,并建立对应的HMM。HMM是一个输出符号序列的双重随机过程,假设具有N种状态S1,S2,S2,…,SN,在一定时间从某一个状态转移到另一个状态并且会输出一个符号序列。状态转移结果由初始状态概率π和状态转移概率矩阵A决定,输出的符号序列由观察值概率矩阵B决定。
在本文中,我们设定了具有6个转移状态的HMM模型,如图1所示。其中,S1和S6分别称为开始状态和结束状态,它们无观察函数,称为非发散状态;S2至S5这4个状态称为活动状态。HMM的状态转换图如下所示,其中aij为从状态i到状态j的转移概率,bi为状态i转移时的输出概率。
1.2 硬件组成
本嵌入式系统硬件采用Samsung公司推出的S3C2440芯片为核心,它是基于ARM920T的32位RISC微处理器,其主频为400MHZ,并且具有低功耗、高性能、高集成度等优点。猪只声音通过麥克风声音传感器采集回来,再经过数字音频编译码器进行处理。嵌入式音频系统的CODEC采用Philips公司生产的UDA1341芯片,它提供标准的IIS接口,可与S3C2440内置的IIS接口直接相连。音频驱动程序采用ALSA体系,由它提供的音频编程API接口,可以对声卡进行控制,设置采样频率、声道数目等参数,并完成对声卡的读出数据及写入数据等操作。系统的其他模块还有64M的SDRAM、256M的Nand Flash、MIC输入接口、耳机输出接口、电源模块等。
图 2 硬件结构图
1.3 软件设计
在软件设计部分,首先采用自行编写的录音程序将猪只声音保存为WAVE波形文件格式。再利用HTK所提供的数据准备工具、HMM模型训练工具、识别工具和结果分析工具来实现猪只声音信号的特征提取、训练、识别等过程。软件结构如下图所示:
图 3 软件设计结构图
2 嵌入式系统设计
以Linux为内核的嵌入式操作系统的设计,分为引导程序Bootloader的移植、内核的移植、文件系统(包含应用程序)的移植三大部分。本设计中Bootloader采用开发板自带的Uboot,故本文重点介绍内核的移植及文件系统和应用程序的移植。
2.1 交叉编译平台搭建
2.1.1 交叉编译简介
由于嵌入式平台处理能力及存储空间等资源的限制,需要在PC上利用交叉编译工具链对需要下载到ARM平台的文件进行交叉编译。本设计以ARM-Linux平台作为运行环境,故所选交叉编译工具链为arm-linux-gcc。
2.1.2 交叉编译工具安装过程
在PC主机上安装交叉编译工具链的主要步骤为:
① 下载交叉编译工具链arm-linux-gcc-4.3.2.tgz,并在/usr/local下建立arm文件夹:#mkdir /usr/local/arm。
② 将文件解压缩:#tar xzvf arm-linux-gcc-4.3.2.tgz -C /usr/local/arm。
③ 添加环境变量,在profile文件中添加:export PATH=/usr/local/arm/4.3.2/bin:$PATH。
2.2 内核的移植
2.2.1 内核简介
内核是嵌入式操作系统的核心,内核主要由进程调度、内存管理、虚拟文件系统、网络接口和通讯进程等组成。Linux内核具有代码开源、体积小、效率高、易裁剪等优点。本文中我们采用嵌入式Linux 2.6.31版本内核作为移植对象,并结合声音识别平台硬件的需要进行相应的配置。
2.2.2 内核安装过程
内核移植的主要步骤为:
①在官网上下载linux-2.6.31.tar.bz2内核源码。
②修改编译配置文件Makefile,指定系统硬件框架及交叉编译工具:
ARCH ? = arm
CROSS_COMPILE ?= arm-linux-
③在PC上Linux操作系统下进入图4所示的图形化配置界面,打开S3C2440的默认配置文件后,再进入"System Type"选项单,配置选中以下几项:
2.3 文件系统的设计
文件系统是操作系统的重要组成部分, Linux文件系统具有一些固定格式和功能的目录。文件系统制作的主要过程是创建系统的各个目录以及在这些目录下添加各种文件,由于创建目录部分无特别之处,故在下文中我们重点介绍在文件系统中如何添加本设计中所需要的应用程序。
2.3.1 HTK的编译
由于嵌入式平台资源的限制,在ARM平台主要完成猪只声音的识别工作,而声音模型的建立,即训练过程需要在PC平台完成。因此整个系统搭建分为PC平台和ARM平台两大部分。由于针对于宿主机的编译过程和针对ARM-Linux平台的类似,这里只介绍过程相对复杂的交叉编译过程,主要步骤如下:
①在HTK官网:http://htk.eng.cam.ac.uk/download.shtml下载HTK-3.4.1.tar.gz源码包。
②Linux下运行解压后文件夹下configure程序,生成Makefile文件:
./configure - prefix=/home/yrl/HTK1。
③修改源码包下HTKLib文件夹中的编译配置Makefile文件使其针对ARM平台,并移除一些嵌入式平台不需要的库文件,修改如下:
CC = gcc
CFLAGS := $(CFLAGS) -ansi -D_SVID_SOURCE -DOSS_AUDIO -D'ARCH="i686"' -Wall -Wno-switch -g -O2 -
RANLIB = ranlib
objects = HGraf.o esig_asc.o \
lvobjects = $(basename HGraf.o).lv.o esig_asc.lv.o \
修改为:
CC = arm-linux-gcc
CFLAGS := $(CFLAGS) -ansi -D_SVID_SOURCE -DOSS_AUDIO -D'ARCH="arm"' -Wall -Wno-switch -g -O2 -
RANLIB =arm-linux-ranlib
objects = esig_asc.o \
lvobjects = esig_asc.lv.o \
修改完成后保存,运行:make。
④与第③步类似,修改HTKTools文件夹下的Makefile文件,修改完保存退出。
Linux下运行:make
make install。
⑤编译完成后,将在HTKTools文件夹下生成所有可执行程序中的用于提取MFCC特征的工具HCopy和用于识别的工具HVite添加到文件系统的/usr/bin目录下即可。
2.3.2 HTK的应用
在采集猪只声音后,使用HTK所提供的与声音识别相关的工具集构建系统时,根据图3中所示的软件工具完成声音数据的标记并提取MFCC特征,使用基于前向后向算法的工具HInit和Hcompv及基于Baum-Welch算法的HRest完成声学模型的训练。在识别时,使用HVite将提取好的测试数据的MFCC特征与声学模型比较,得出识别结果。构建好猪只声音系统后,利用HResults对本系统进行性能评估,可得到测评结果及相关信息。
2.3.3 QT程序的设计
为了便于在ARM上显示结果并且方便测试,我们设计了Qt程序,并将编写好的程序利用Qt Embedded编译器编译成ARM-Linux平台的可执行程序,添加到文件系统中。在Qt程序中,嵌入编译好的声音识别可执行程序,同时为了方便单次测试,在界面中加入了QPushButton部件,当按钮被点击时,根据设计的“信号与槽”机制便会触发声音采集程序,进行识别。进行一次测试后,Qt识别界面如下图所示:
3 结束语
本设计通过移植较为成熟的开源工具箱HTK,并且合理地进行软硬件裁剪,成功实现了猪只异常声音在嵌入式平台的检测和识别。经过实验验证,准确率和处理速度均较为理想,具有很好的推广价值。
参考文献:
[1] 韦东山. 嵌入式 Linux应用开发完全手册[M].北京: 人民邮电出版社,2008.
[2] 张懿. 构造廉价的ARM9开发平台[J].单片机与嵌入式系统应用,2007(5):70-75.
[3] 布兰切特,萨默菲尔德.C++ GUI Qt4 编程[M].闫锋欣,曾泉人,张志强,译.2版.北京:电子工业出版社,2013.
[4] 杨成.嵌入式语音识别平台及优化研究[D].华南理工大学,2010.
[5] 胡航.语音信号处理[M].哈尔滨工业大学出版社,2000.
[6] 王柄锡.实用语音识别基础[M].北京:国防工业出版社,2005.
[7] 韓纪庆,张磊,郑铁然.语音信号处理[M].北京: 清华大学出版社,2005.
[8] 王炳锡,屈丹.实用语音识别基础[M].北京:国防工业出版社,2005.