(SKU:DFR0177)中文语音识别模块Voice Recognition

来自DFRobot Product Wiki
跳转至: 导航搜索
中文语音识别模块Voice Recognition(SKU:DFR0177)

目录

概 述

Voice Recognition语音识别模块是一款只需要在主控MCU的程序中设定好要识别的关键词语列表,并动态地把这些关键词语以字符的形式传送到芯片内部,就可以对用户说出的关键词语进行识别,不需要用户事先训练和录音的非特定人语音识别模块。该模块可以设置50项候选识别句,每个识别句可以是单字,词组或短句,长度为不超过10个汉字或者79个字母的拼音串,可由一个系统支持多种场景。

Voice Recognition语音识别模块采用叠层设计,可以直接插接到Arduino控制器上,用户使用Arduino便可以快速设计产品原型,例如电磁炉/微波炉/洗衣机/智能家电操作,导航仪,MP3/MP4,数码像框,机顶盒/彩电遥控器,智能玩具/对话玩具,PMP/游戏机,自动售货机,地铁自动售票机,导游机,楼宇电视的广告点播,照明系统的声控等等。


性能描述

1.工作电压:5V

2.兼容Arduino和Arduino MEGA控制板

3.具有板载MIC,支持单声道输入

4.具有DFRuino Player模块接口

5.具有DFRuino Player模块UART/I2C接口切换开关(MEGA只能使用UART接口)

6.尺寸:长54mm× 宽47mm


Voice Recognition的使用

Voice Recognition V1.0 1.jpg

Voice Recognition模块说明

开关按钮说明

Voice Recognition V1.0 2.jpg

LED指示灯说明

Voice Recognition V1.0 3.jpg

接口端说明

Voice Recognition V1.0 4.jpg

占用Arduino端口说明

Voice Recognition V1.0 5.jpg

Voice Recognition模块语音识别

语音识别,识别的是“语音”。对于非特定人语音识别来说,在描述关键词语时,是用音标标注出要识别的关键词语。

对于Voice Recognition模块支持的中文识别来说,就是用拼音来描述出关键词语。

也就是说,只要是拼音可以拼出的发音,都是可以进行识别的。

因此,在某些场合需要识别一些简单的外文或者纯方言发音的时候,可以用拼音标注的方法来实现。

例如,有些场合需要识别一些简单的英文单词,可以用拼音标注:

one → wan

two → tu

three → si rui

例如,有些场合需要识别一些纯方言发音的词汇,也可以用拼音标注:

上海话的“晚”发音是“ya”,那么“晚报”这个词汇,用普通话标注是“wan bao”,如果要标注成上海话发音,就是“ya bao”,这样上海话说的“晚报”也就可以被识别了。

值得注意的是:模块支持的是中文普通话,有些外文或者方言发音无法用拼音描述,所以模块不一定能够完成所有需要的外文或者方言任务。

Voice Recognition模块识别中的常见问题

1)改变使用环境,或许在某些环境中的噪声或者回声会影响到判断说话结束。

2)说话人自己的音量,如果声音很低,也会导致判断人说话是否结束比较困难。

3)改变命令词语内容,比较好念,开口音响亮等,方便使用者连续清晰念出语音命令。

Voice Recognition模块语音识别应用场景

1.在识别精度要求高的场景中,使用“触发识别”模式

在识别精度要求高的场景中,应该采用“触发识别”模式。原因是:

1) 用户在每次按热键后,精神处于最集中的状态,此时用户说的语音命令会比较认真,清晰。避免了用户过于随意的发音导致的识别误差。

2) 每次按热键后,产品应该给以一个明显的开始信号,比如发出“当”的一声或者其他提示信号,可以给用户一个明确开始的提示,方便用户掌握说语音命令的时间。

3) 由于按键触发后,用户就会贴近麦克风并说出语音命令,避免了其他环境声音被录入模块芯片导致的误识别。

另:这种方式还是一种省电的方式,在不识别时,彻底不让芯片工作以省电。

2.增添 “垃圾关键词语”——吸收错误识别

在设定好要识别的关键词语后,为了进一步降低误识别率,可以再添加一些其他的任意词汇进识别列表,用来吸收错误识别,从而达到降低误识别率的目的。

可以把这些关键词语称之为“垃圾关键词语”。

比如,某个应用场景中,需要识别的关键词语是 4 条,“前进”,“后退”,“开门”,“关门”。在把这 4 个关键词语设置进芯片后,可以再另外设置 10~30 个词语进模块芯片,比如“前门”,“后门”,“阿阿阿”,“呜呜”等等。

只有识别结果是 4 个关键词语之内的,才认为识别有效。如果识别结果是“垃圾关键词语”,则说明是其他的声音导致的误识别,产品应该重新开始一次识别过程。

这样,可以非常非常有效地降低误识别率。极大地提高终端用户的主观使用体验。

“垃圾关键词语”的选取,最好可以选择一些字数和关键词语一样的词语,用来吸收可能发生的错误识别。

3.口令触发模式

在一些应用场合,希望识别精度高,但是又无法要求用户每次都用手按键来“触发识别”。此时,可以采用“口令触发模式”。

产品定义一句短语,作为触发口令。比如,可以定义“芝麻开门”作为触发口令。

产品在等待用户触发时,启动一个“循环识别”模式,把触发口令“芝麻开门”和其他几十个用来吸收错误的词汇设置进芯片。只有当检测到识别出的结果是触发口令时,才认为是终端用户叫了这个口令。此时,给出提示音,

并启动一个“触发识别模式”,并且把相应的识别列表设置进模块芯片,提示用户在提示音后几秒钟内说出要执行的操作。

在等待用户的过程时,如果识别的结果是那些用来吸收错误的词汇,则认为是误识别,或者其他的声音干扰,而不进行任何的处理,直接再次进入“循环识别”模式。

这种口令触发模式,融合了其他两种模式的优点,并且结合提到的“垃圾关键词语”的方法,可以为产品提供更加方便实用的语音操作特性。

4.应用场景

电磁炉/微波炉/洗衣机/智能家电操作,导航仪,MP3/MP4,数码像框,机顶盒/彩电遥控器,智能玩具/对话玩具,PMP/游戏机,自动售货机,地铁自动售票机,导游机,楼宇电视的广告点播,照明系统的声控等等。

5. 应用实例

用语音控制开灯关灯,并具有语音提示,实现人机互动操作。需要器材有:Arduino控制器,Arduino扩展板,语音识别模块,MP3模块,喇叭,LED灯,电源适配器,USB电缆。

Voice Recognition V1.0 6.jpg

如果没有LLed模块,可以用直接通过串口观察。打开串口,设置好波特率,等到串口提示ASR_RUNING.....的时候,请用用标准的普通话说开~~灯~~,PS:不要把嘴巴凑在话筒上..ԅ(¯ㅂ¯ԅ)

Arduino语音控制LED演示代码


#include <Voice.h>

#define SUM 2 //SUM识别关键词的个数,最大不超过50个
uint8  nAsrStatus=0;

char sRecog[SUM][80] = {"kai deng", "guan deng"};//每个关键词拼音字母个数不超过79个,用户可以自行修改       ? 

int state=7;  //状态指示灯
int led=8;    //受控制数字口


void finally (unsigned char n)
{
switch(n)  //n为数组中对应关键词的序列号,例如数组sRecog中的第一个关键词为“kai deng”则对应的序列号为0;

	{
	case 0:
		Serial.println( "kai deng");
              Serial.println( " ");
              digitalWrite(led,LOW);
		break;
	case 1:
		Serial.println( "guan deng");
              digitalWrite(led,HIGH);
		break;

	default:
	        Serial.println( "error");
                Serial.println( " ");
		break;	
	}
}

void ExtInt0Handler ()
{
  Voice.ProcessInt0();	//芯片送出中断信号				
}

void setup()
{
  Serial.begin(9600);
  Voice.Initialise(MIC,VoiceRecognitionV1);//Initialise mode MIC or MONO,default is MIC
                                           //VoiceRecognitionV1 is VoiceRecognitionV1.0 shield
                                           //VoiceRecognitionV2 is VoiceRecognitionV2.1 module
  attachInterrupt(0,ExtInt0Handler,LOW);
  pinMode(led,OUTPUT);
  pinMode(state,OUTPUT);
  digitalWrite(state,HIGH);
  digitalWrite(led,HIGH);
}
void loop()
{  
        uint8 nAsrRes;
	nAsrStatus = LD_ASR_NONE;

	while(1)
	{
		switch(nAsrStatus)
		{
			case LD_ASR_RUNING:
			case LD_ASR_ERROR:		
				break;
			case LD_ASR_NONE:
			{
				nAsrStatus=LD_ASR_RUNING;
                            if (Voice.RunASR(SUM,80,sRecog)==0)  //识别不正确
				{      
					nAsrStatus= LD_ASR_ERROR;
                                        Serial.println( "ASR_ERROR"); 
				}
                              digitalWrite(state,LOW);
                              Serial.println( "ASR_RUNING.....");
				break;
			}
			case LD_ASR_FOUNDOK:
			{
                                digitalWrite(state,HIGH);
				nAsrRes =Voice. LD_GetResult();//一次ASR识别流程结束,去取ASR识别结果
                                finally(nAsrRes); 
				nAsrStatus = LD_ASR_NONE;
				break;
			}
			case LD_ASR_FOUNDZERO:
			default:
			{
				
				nAsrStatus = LD_ASR_NONE;
				break;
			}
	         }// switch
              delay(500);
	}// while
}



Arduino语音控制MP3模块演示代码


#include <Wire.h>
#include <Voice.h>
#define ArduinoPlayer_address 0x35 //定义ArduinoPlayer 语音播放模块I2C地址 

#define SUM 4  //SUM识别关键词的个数,最大不超过50个

uint8  nAsrStatus=0;

char sRecog[SUM][80] = {"kai deng", "guan deng", "yin yue", "ting zhi"};//每个关键词拼音字母个数不超过79个,用户可以自行修改

int state=7;  //状态指示灯
int led=8;    //受控制数字口

void TwiSend(const char  *cmd)  //I2C发送命令函数
{   
char len = 0;   
len = strlen(cmd); 
Wire.beginTransmission(ArduinoPlayer_address); 
while(len--)   
{     Wire.write(*(cmd++));        }  
Wire.endTransmission();   
}

void finally (unsigned char n)
{
switch(n)  //n为数组中对应关键词的序列号,例如数组sRecog中的第一个关键词为“kai deng”则对应的序列号为0;
	{
	case 0:
		Serial.println( "kai deng");
                Serial.println( " ");
                TwiSend("\\:v 250\r\n");    
                TwiSend("\\kaideng\r\n");    //指定文件名播放语音     
                delay(2000);
                digitalWrite(led,LOW);
		break;
	case 1:
		Serial.println( "guan deng");
                Serial.println( " ");
                TwiSend("\\:v 250\r\n");    
                TwiSend("\\guandeng\r\n");   
                delay(2000);
                digitalWrite(led,HIGH);
		break;
	case 2:
		Serial.println( "muisc ok!");
                Serial.println( " ");
                TwiSend("\\:v 250\r\n");    
                TwiSend("\\:n\r\n");   
		break;
	case 3:
		Serial.println( "muisc stop!");
                Serial.println( " ");
                TwiSend("\\:v 250\r\n");    
                TwiSend("\\:p\r\n");   
		break;
	default:
	        Serial.println( "error");
                Serial.println( " ");
		break;	
	}
}

void ExtInt0Handler ()
{
  Voice.ProcessInt0();	//芯片送出中断信号				
}

void setup()
{
  Wire.begin(); 
  Serial.begin(9600);
  Voice.Initialise(MIC,VoiceRecognitionV1);//Initialise mode MIC or MONO,default is MIC
                                           //VoiceRecognitionV1 is VoiceRecognitionV1.0 shield
                                           //VoiceRecognitionV2 is VoiceRecognitionV2.1 module
  attachInterrupt(0,ExtInt0Handler,LOW);
  pinMode(led,OUTPUT);
  pinMode(state,OUTPUT);
  digitalWrite(state,HIGH);
  digitalWrite(led,HIGH);
}
void loop()
{  
        uint8 nAsrRes;
	nAsrStatus = LD_ASR_NONE;

	while(1)
	{
		switch(nAsrStatus)
		{
			case LD_ASR_RUNING:
			case LD_ASR_ERROR:		
				break;
			case LD_ASR_NONE:
			{
				nAsrStatus=LD_ASR_RUNING;
                            if (Voice.RunASR(SUM,80,sRecog)==0)  //识别不正确
				{      
					nAsrStatus= LD_ASR_ERROR;
                                        Serial.println( "ASR_ERROR"); 
				}
                              digitalWrite(state,LOW);
                              Serial.println( "ASR_RUNING.....");
				break;
			}
			case LD_ASR_FOUNDOK:
			{
                                digitalWrite(state,HIGH);
				nAsrRes =Voice. LD_GetResult();//一次ASR识别流程结束,去取ASR识别结果
                                finally(nAsrRes); 
				nAsrStatus = LD_ASR_NONE;
				break;
			}
			case LD_ASR_FOUNDZERO:
			default:
			{
				
				nAsrStatus = LD_ASR_NONE;
				break;
			}
	         }// switch
              delay(500);
	}// while
}



相关文档



Nextredirectltr.png购买 中文语音识别模块Voice Recognition(SKU:DFR0177)

个人工具
名字空间

变换
操作
导航
工具箱