Skip to content
This repository has been archived by the owner on Nov 26, 2024. It is now read-only.

安装和调整µSpeech

Arjo Chakravarty edited this page Jun 10, 2014 · 8 revisions

µSpeech 是个语音识别软件为8bit微控制器来做的。µSpeech不是完美:有时候µSpeech会发出错的音素。

警告:µSpeech是很难用的。

安装

安装 µSpeech 是很简单。 从这个网站下载 µSpeech 4.1.1. 让后从 Arduino IDE 内选址你刚刚下载的文件或把下载的文件取消归档在你的arduino/libraries夹内。

调整µSpeech

你开始用µSpeech的时后要先把你的微控制器的麦克风调整。这是应为每一个麦克风和放大机有它自己的特点。从最基本的方面不同麦克风和放大机会发出不同的电压。你的arduino会把你的放大机的电压翻译到一个号码从0(0v)到1023(5v)。uSpeech会用这些来算一些东西。第一个东西是声音的力量是多大。所以,我在signal类内加了这个成员:

     int minVolume; 

如果声音比int minVolume; uSpeech会返回' '。 这是因为声音太小了,所以uSpeech不会处理其他东西。你可以用 debug_uspeech 来查你的麦克风的音量。你会看到如果你不说什么, debug_uspeech 会发出比较小的号码。如果在你麦克风前面说东西,你会看到 debug_uspeech 发出的号码都是比较大的。 int minVolume; 应该在那些大的号码和小的号码中间。例如说我没说什么东西 debug_uspeech 会发出500-900和我在麦克风面前说东西的时候 ```debug_uspeech`` `会发出1500-2000, 我就应该在我Arduino Sketch的前面写这些东西:

#include <uspeech.h>
signal voice(A0)//如果你是用其他的analog_in针脚,那就把A0改变整你自己的analog_in针脚。
void setup(){
      voice.minVolume = 1200; //在900-1500的中间。
}

µSpeech可以检测六种音素:/f/,/s/,/e/,/sh/,/z/,/v/。 如果有其它的音素, signal.getPhoneme(); 会返回'o'。signal.getPhoneme(); 的算法会用一些阈值把音素分成对的团体。每一个 signal 对象内有这些成员:

	int econstant;  /*!< This is the threshold for /ee/, /i/, configure it yourself */
	int aconstant;  /*!< This is the threshold for /a/ /o/ /r/ /l/, configure it yourself */
 	int vconstant;  /*!< This is the threshold for /z/ /v/ /w/, configure it yourself */
	int shconstant; /*!< This is the threshold for /sh/ /ch/, above this everything else is regarded as /s/ */

如果声音的力量是比——大, uSpeech会算一个东西交"coeff"。"coeff"会代表你说的音素。如果你说/e/,"coeff" 会比 int econstant; 小,如果有别的音素“coeff”会比 int econstant; 大。你可以用debug_uspeech来检查“coeff”。例如我说/e/的时候“coeff”是1-2和我说其他东西的时候“coeff”是2-3,int econstant; 应该是2。所以应该在void setup()加这些东西:

#include <uspeech.h>
signal voice(A0)//如果你是用其他的analog_in针脚,那就把A0改变整你自己的analog_in针脚。
void setup(){
      voice.minVolume = 1200; //在900-1500的中间。
      //这些号码是你自己调整的。
      voice.econstant = 2;
}

如果你想检测/sh/,/z/,/v/, /a/你要调整其他的成员。如果你把int shconstant;调整好了,那就可以检测/sh/和/s/。调整上面说过的阈值是跟调整int econstant;一样。如果你要调整int shconstant;,用debug_uspeech来检查“coeff”。你说/sh/的时候“coeff”会比一个号码小,如果你说/s/那“coeff”应该比这个号码大。你调整好了“coeff”以后,你的void setup()应该像:

#include <uspeech.h>
signal voice(A0)//如果你是用其他的analog_in针脚,那就把A0改变整你自己的analog_in针脚。
void setup(){
      voice.minVolume = 1200; //在900-1500的中间。
      //这些数字是你自己调整的。
      voice.econstant = 2;
      voice.aconstant = 3;
      voice.vconstant = 4;
      voice.shconstant = 5;
}

如果要用为/f/做的算法,你要用debug_uspeech来检查“f algorithm”。这是因为/f/的算法会用一个低通滤波器。 /f/的算法不会用“coeff”。你说/f/的时候debug_uspeech会发出比较高的数字。 我说/f/的时候这些数字是在370-500内。我说其他的东西,这些号码是在400低下,所以:

#include <uspeech.h>
signal voice(A0)//如果你是用其他的analog_in针脚,那就把A0改变整你自己的analog_in针脚。
void setup(){
      voice.minVolume = 1200; //在900-1500的中间。
      //这些数字是你自己调整的。
      voice.econstant = 2;
      voice.aconstant = 3; //必须比voice.econstant大。
      voice.vconstant = 4; //必须比voice.aconstant大。
      voice.shconstant = 5; //必须比voice.vconstant大。
    voice.fconstant = 400;
}

为了/f/的算法不是很正确,所以uspeech会把它关掉。如果你想把它开,你要在void setup()在加一行 voice.f_enabled = true;。现在你的void setup()应该是这样的:

#include <uspeech.h>
signal voice(A0)//如果你是用其他的analog_in针脚,那就把A0改变整你自己的analog_in针脚。
void setup(){
      voice.minVolume = 1200; //在900-1500的中间。
      //这些数字是你自己调整的。
      voice.econstant = 2;
      voice.aconstant = 3;
      voice.vconstant = 4;
      voice.shconstant = 5;
      voice.fconstant = 400;
      voice.f_enabled = true;
}

debug_uspeech

这是一个小程序你可以用来检查好多东西。这个程序的源代码是在installation/examples夹内。你开始用µSpeech的时候都要用debug_uspeech来调整µSpeech。 你用debug_uspeech的时候要从 Arduino IDE 内编译和上转到你的微控制器上,让后要开Arduino IDE的串行控制台。串行控制台上你会看到这些选项:

uSpeech debug tool--------
 Press 'a' if you wish to calibrate/check the f algorithm
 Press 'b' if you wish to calibrate/check the getPhoneme
 Press 'c' if you wish to calibrate/check the volume of your microphone
 Press 'd' if you wish to calibrate/check the coeff

用你的键盘来选你要用的东西。

Clone this wiki locally