历史上的今天
返回首页

历史上的今天

今天是:2025年04月06日(星期日)

2020年04月06日 | 基于JuliUS语音识别引擎实现机器人孤立词语音识别系统的设计

2020-04-06 来源:单片机与嵌入式系统应用

引言

随着现代科技和技术的不断发展,人们在与机器的信息交流中,需要一种更加方便、自然的交互方式,实现人机之间的语音交互,让机器听懂人话是人们梦寐以求的事情。技术的发展,使得这一理想得以实现,把语音识别技术与机器人控制技术相结合,正成为目前研究的热点,不但具有较好的理论意义,而且有较大的实用价值。

语音识别技术应用于机器人系统大多是针对特定的环境,设计出语音命令来进行控制的。只需要对几十个字或词的命令行进语音识别,便可使得原本需要手工操作的工作由语音轻松完成。本文针对现有机器人平台,设计一个非特定人的孤立词语音识别系统。

1、语音识别原理及JuliUS简介

1.1 基于HMM的语音识别原理

语音识别系统是一种模式识别系统,系统首先对语音信号进行分析,得到语音的特征参数,然后对这些参数进行处理,形成标准的模板。这个过程称为训练或学习。当有语音进入系统时,系统将对这些语音信号进行处理,然后进行参考模板的匹配,得出结果。此时便完成了语音识别的过程。

目前,HMM作为语音信号的一种统计模型,是语音识别技术的主流建模方法,正在语音处理各个领域中获得广泛的应用。现在许多商用语音软件,以及各种具有优良性能的语音识别系统,都是在此模型上开发的,已经形成了完整的理论框架。

基于HMM模式匹配算法的语音识别系统表现为:在训练阶段,采用HMM训练算法为每一个词条建立一个HMM模型。词条经过反复训练后,将得到的对应HMM模型加入HMM模型库中以数据的形式保存。在匹配阶段,也就是识别阶段,采用HMM匹配算法将输入的未知语音信号与训练阶段得到的模型库中的模型进行匹配,输出语音识别的结果。

1.2 JuliUS简介

Julius是日本京都大学和日本IPA(Informaon-ch-nology PromoTIon Agency)联合开发的一个实用高效双通道的大词汇连续语音识别引擎。目前已经能较好地应用于日语和汉语的大词汇量连续的语音识别系统。Julius由纯C语言开发,遵循GPL开源协议,能够运行在Lin-ux、Windows、Mac:OS X、Solaris以及其他Unix平台。Julius的版本采用的设计思想,使得各功能模块可以通过参数配置。

Julius的运行需要一个语言模型和一个声学模型。利用Julius,通过结合语言模型和声学模型,可以很方便地建立一个语音识别系统。语言模型包括一个词的发音字典和语法约束。Julius支持的语言模型包括:N-g模型,以规则为基础的语法和针对孤立词识别的简单单词列表。声学模型必须是以分词为单位且由HMM定义的。

应用程序可以有两种方式与Julius交互:一种是基于套接字的服务器一客户端通信方式,另一种是基于函数库的嵌入方式。在这两种情况下,要识别过程结束,识别结果就被送入应用程序中,应用程序就能得到Julius引擎的现有状态和统计,并可以操作官。Julius概述如图1所示。

2、系统框架

2.1 硬件结构

在语音识别的机器狗控制系统中Atom Z510为训练学习机大脑(1.1 GHz主频的 Atom Z510嵌入式控制平台),它主要完成语音识别的功能。PXA270控制器(Intel公司于2003年底推出的性能强劲的PXA27x系列,基于v5E的XScale内核,最高频率可达624MHz)作为机器狗本体上的核心智能控制器,接收Atom Z510识别后的结果,发出控制命令。ATmega128控制器(公司的8位系列中的一种,运行频率16 MHz)完成基于串行总线的数字舵机控制,完成对机器狗的前后腿以及尾巴等关节控制。机器狗硬件结构平台如图2所示。

2.2 结构

整个机器人系统包括3个模块:Julius语音识别模块、GUI人机界面、机器人控制模块。Julius将识别的语音命令提交给GUI模块,并在GUI上显示;同时GUI将语音命令转化为动作控制命令并发给机器人控制模块;GUI还可以控制Julius的启动和停止。其中机器人控制模块主要在PXA270上,而语音识别和GUI是在Atom Z510上。系统软件模型如图3所示。

3 、语音识别系统构建

一个完整的语音识别系统一般包括3部分:声学模型、语言模型和识别器。在本系统中只建立基于控制命令(动词)的识别语法,其他词忽略,因此没有构建语言模型;识别器采用Julius开源平台,此部分只用配置参数和相关文件。本文主要工作是声学模型训练和语音识别系统构建。

3.1 声学模型训练

声学模型是识别系统的底层模型,是语音识别系统中最关键的一部分,它是每个声学单元的声学模型参数集合。本系统的声学模型是使用HTK对采集的语音库进行多次迭代训练后提取的,基于词的声学特征向量集。HTK(HMM Tools Kit)是由英国剑桥大学工程系的语音视觉和机器人技术工作组(Speech Vision and RoboTIcs Group)开发,专门用于建立和处理HMM的实验包,主要应用于语音识别领域,也可用于语音模型的测试和分析。其具体训练步骤如下:

(1)数据准备

收集汉语标准普通话的语料库,并将语料库中的语音,创建语音识别单元元素列表文件。

(2)特征提取

本系统采用MFCC进行语音的特征参数提取,训练中将每一个语音文件用工具HCopy转换成MFCC格式。

(3)HMM定义

在训练HMM模型时要给出模型的初始框架,本系统中的HMM模型选择同一个结构,如图4所示。该模型包含4个活动状态{S2,S3,S4,S5),开始和结束(这里是S1.S6),是非发散状态。观察函数bi是带对角矩阵的高斯分布,状态的可能转换由j表示。

(4)HMM训练

本系统先使用HInit工具对HMM模型进行初始化,再用HCompv工具来对模型进行平坦初始化。HMM模型的每个状态给定相同的平均向量和变化向量,在整个训练集上全局计算而得。最后用HRest的多次估计迭代,估计出HMM模型参数的最佳值,经多次迭代,将训练得到的单个HMM模型整合到一个hmmsdef.mmf文件中。声学模型HTK训练流程如图5所示。

3.2 Julius应用

3.2.1 Julius部署

在本系统中语音识别部分是部署在Atom Z510上,而Atom Z510上首先需要移植操作系统(本系统采用的是ubuntu8.10)以上步骤在此不详细介绍,文献中有详细说明。语音识别的核心部分是Julius识别器,需要将Julius源码编译部署到Atom Z510平台。其步骤如下:

①要确保linux系统中有以下支持库:Zlib、flex、OSS驱动、ESounD和libsndfile。

②从Julius官网下载源代码Julius-4.1.5。

③解压:tar-zxjf julius-4.1.5。

④编译:%./configure,%make,%make install。

3.2.2 Julius配置

Julius全部采用C语言代码实现,采用模块化设计方式,而且各功能模块可配置。在使用前需要将配置参数写入jconf文件,此文件作为运行参数载入系统,系统扫描参数配置并启动各功能块。其中重点介绍以下几个配置参数:

◆-dfa rtdog.dfa,指定语法文件rtdog.dfa;

◆-v rtdog.dict,指定字典文件;

◆-h rtdog.binhmm,指定HMM模型文件;

◆-lv 8000,设定音频的阈值便于滤去噪音;

◆-rejectshort 600,设定最小的语音长度;

◆-input c,设定语音的输入方式为microphone。

3.3 语音识别系统软件设计

3.3.1 GUI设计

本系统为了方便测试,采用QT4的库来开发人机界面(GUI),同时加入了手动控制的按钮。其总体功能如图6所示。通信线程是本系统的数据传输枢纽,十分重要。在QT中通过对线程类QThre继承来实现新的线程设计。该类提供了创建一个新线程以及控制线程运行的各种方法。线程是通过QThread::run()重载函数开始执行的。在本系统中设计了1个线程,用它来不断地读取共享内存中的语音命令,然后将其转化为控制命令传给机器人控制模块。

3.3.2 模块间通信

由于系统的3个模块不在同一个平台上部署,运行过程中需要进行数据通信。GUI和Julius都部署在Atom Z510平台上,但属于2个进程,它们之间可以通过共享内存来交互数据。而GUI和机器人控制模块就需要通过网络通信来实现数据交互。这里采用的是基于TCP的socket编程接口来实现模块间的通信,模块间通信流程如图7所示。

4、 实验测试

演示系统界面如图8所示。本文使用大量的语音样本来完成HTK的训练和模式构建,语音样本采用16 kHz采样,16位量化。独立的语音识别测试中,将训练集以及测试集中语音样本和识别结果进行了对比分析。本文语音样本的内容包括训练集(语料库中的语音成分)和测试集(本实验中采集的语音)。由于本系统只用提取语音命令,不需要完整句子的识别,所以没有针对句子做测试。

本文对于训练集基于词的识别率为71.7%,测试集基于词的识别率为56.5%,测试结果如表1所列。

表中各符号所表示的意义如下所示:

H,正确;S,替代错误;D,删除错误;I,插入错误;N,标记文件中单元总数;SENT,句子,WORD:基本单元。

结语

本文在给定的实验室机器人平台上,设计了基于语音控制的机器狗系统。其中,语音识别子系统通过HTK和Julius的开源平台构建而成。经过测试分析,该系统能够较好地识别人发出的语音命令,简化了机器人的操作,使机器与人的交互更加智能化。

责任编辑:gt

推荐阅读

史海拾趣

ARCOTRONICS公司的发展小趣事

在市场竞争日益激烈的情况下,ARCOTRONICS公司始终坚持创新引领的发展理念。公司投入大量资源用于研发新产品,不断推出具有创新性和竞争力的电子产品。这些新品不仅满足了市场的多样化需求,还为公司带来了丰厚的利润回报,进一步巩固了公司在行业内的领先地位。

ADLINK公司的发展小趣事

ARCOTRONICS公司一直将产品质量视为企业的生命线。公司建立了严格的质量管理体系,从原材料采购到生产过程的每一个环节都进行严格把控。同时,公司还注重售后服务,为客户提供及时、专业的技术支持和解决方案。这些举措使ARCOTRONICS公司的产品赢得了客户的广泛信赖和好评。

Electro-Term/Hollingsworth公司的发展小趣事

面对全球电子市场的不断变化,Electro-Term公司及时调整了市场布局和战略方向。公司深入分析了不同地区的市场需求和消费者偏好,制定了有针对性的市场推广策略。同时,公司还加强了与国际知名企业的合作,共同开发新技术和产品。这些努力使Electro-Term在全球市场上取得了显著的成绩。

Brite-Led Optoelectronics Inc公司的发展小趣事

面对电子行业的快速变化和不断升级的技术需求,Brite-Led始终保持敏锐的洞察力和创新精神。公司不断投入研发资源,推出新产品和新技术,以满足市场的变化和客户的需求。同时,公司还注重人才培养和引进,建立了一支高素质的研发团队和管理团队。这些措施使得Brite-Led在激烈的市场竞争中始终保持领先地位,实现了持续发展。

以上是关于Brite-Led Optoelectronics Inc公司发展的5个虚构故事,虽然这些故事是基于虚构的,但它们可能反映了Brite-Led Optoelectronics Inc公司在实际发展中可能遇到的一些情况和挑战。

ESS [ESS Technology,Inc]公司的发展小趣事

ESS科技公司的创始人在1984年创建了这家位于美国加利福尼亚州的公司,起初专注于将音响压缩重建技术应用于电子音响图书和问候卡。然而,随着个人电脑的普及和多媒体市场的快速增长,ESS决定调整战略,全力发展个人电脑音频技术。1993年,ESS推出了其首批PC音频半导体产品ES488,这是一个12位的单声道音质硅片。随后,ESS不断推出新产品,如ES688,一个16位立体音质硅片,这些产品为ESS带来了可观的收益。1995年,ESS成功在美国纳斯达克上市,标志着公司进入了一个全新的发展阶段。

Extech公司的发展小趣事

为了响应国家振兴制造业的号召,培养优秀的数字化设计与制造技术人才,Extech公司在近年来启动了“PLM China”计划。该计划面向全国高校提供价值1000万人民币的软件支持,旨在与教育行业携手合作,共同提升中国制造业的整体设计研发水平。通过这一计划的实施,Extech公司不仅展现了自己的社会责任感,也为中国制造业的发展做出了积极的贡献。

以上五个故事分别从不同角度展现了Extech公司在电子行业中的发展历程和成就。通过持续的创新和努力,Extech公司已经成为了一家在制造业信息化领域具有重要影响力的企业。

问答坊 | AI 解惑

PIC16C7X A/D转换器控制方案

PIC16C7X A/D转换器控制方案具体介绍  …

查看全部问答>

可控硅知识的问与答

可控硅知识的问与答一、可控硅的概念和结构? 晶闸管又叫可控硅。自从20世纪50年代问世以来已经发展成了一个大的家族,它的主要成员有单向晶闸管、双向晶闸管、光控晶闸管、逆导晶闸管、可关断晶闸管、快速晶闸管,等等。今天大家使用的是单向晶 ...…

查看全部问答>

嵌入式软件测试的10大秘诀

在嵌入式软件开发过程中,一般来说,花在测试和花在编码的时间比为3:1(实际上可能更多)。这个比例随着你的编程和测试水平的提高而不断下降,但不论怎样,软件测试对一般人来讲很重要。很多年前,一位开发人员为了对嵌入式有更深层次的理解,向Oracl ...…

查看全部问答>

wavecom如何利用at指令操作stk菜单

如题,因为项目需要,急需这方面的例子(一定要例子,资料我已经有了很多,但是例子没有一个能调通的),望各位高人出手相助,在此谢过了QQ792549792…

查看全部问答>

请教protues keil 8086的问题?

老师布置的毕业设计:在protues中进行8086的仿真模拟。 也就是说:在protues中处理器是8086,当需要加载“.hex”目标文件时,需要在Keil中生成, 但是在选择cpu时,在Keil中找不到8086芯片,请教这个问题怎么解决?…

查看全部问答>

怎么更新wince 中的cf.net 2.0为最新版?

写应用时,每次调试都要传cf.net 2.0进ce平台,时间太长了,我想直接装vs 2005中的cf.net 2.0进ce ,最好是能从pb中add/delete,因为我是通过Ethernet启动…

查看全部问答>

丹佛斯变频器故障报警?

丹佛斯变频器VLT2800  11KW风机负载,我看端子1-2   NO,1-3  NC,1-3 接三菱FX系列PLC后,变频器不送电信号有输入,送电后居然没有, 1-2 接入后变频器不送电没有输入,送电后居然有输入?     ...…

查看全部问答>

请教FLASH时序控制发生器频率设置问题

最近在写FLASH驱动,遇到如下问题,诚心请教,jelline@126.com(1)时钟频率FLASH时序控制发生器频率要求在 257~476kHz,我选择MCLK作为时钟,而MCLK默认是由DCOCLK产生,查得数据手册,默认时钟频率为0.8MHz ~ 1.5MHz(没给出典型值,用户指南 ...…

查看全部问答>

什么是定时器6步啊

最近学定时器,看见stm32例程里面有个定时器六步,什么是定时器六步呢?有什么用啊?谢谢了 例程里面这样解释,但是我看不懂 6Steps Configure the TIM1 peripheral to generate 6 Steps   …

查看全部问答>

学习分享帖:launchpad 2个IO口串行驱动12864液晶程序 我学生调试成功 你值得拥有

/* 时间:2012-6-30 作者:蔡能 注释:     这个程序能够实现LCD12864的有ASCII码的数据输入,而汉字还没有解决!! 修改:2012-7-1   1:43     已经解决汉字的输入,没有什么特别的,就是注意输入法的切换~~ ...…

查看全部问答>