NAO机器人语音识别(三):自定义模块快速调用

前言

由于 nao 机器人自带的模块的对于中文的识别率不是特别理想,而且自带的对话剧本太少,所以自己写了一个 nao 的模块来替换自带的语音识别模块。

模块介绍

ALSoundRecognition 是适用于 NAO 机器人的语音识别模块。
该模块调用了科大讯飞的语音识别和语义理解功能。
相对于系统自带的模块有对中文识别准确率更高,识别反应速度更快的优势。
github 地址:https://github.com/zyqzyq/ALSoundRecognition

demo

1
根据github上的文档说明将模块拷入nao机器人后可以运行以下python demo进行简单的测试。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#coding:utf-8
from naoqi import ALProxy
import chardet
import json
'''/*
* isr_status参数说明
* 0:未开始语音识别
* 1:初始化成功
* 2:正在识别中
* 3:识别中止
* 4:识别失败,请对照错误进行处理
* 5:识别成功
*/'''
def main():
asr = ALProxy("ALSoundRecognition", "192.168.3.13", 9559)
tts = ALProxy("ALTextToSpeech", "192.168.3.13", 9559)
rec = asr.getStatus()
print rec
if rec == 0:
print u"未初始化成功"
elif rec == 4:
asr.restart()
while 1:
print "start recognition"
asr.startSession()
while 1:
rec = asr.getStatus()
if rec == 2:
continue
else:
break
if rec == 5:
result = asr.getResult()
print "result:"
if result!='':
result_json = json.loads(result)
print result_json
if result_json["rc"]==0:
tts.say(result_json["answer"]["text"].encode("utf-8"))
else:
#print result_json["text"],type(result_json["text"])
tts.say(result_json["text"].encode("utf-8"))
elif rec == 4:
errorCode = asr.getResult()
print u"error:",errorCode
asr.stopSession()
elif rec == 3:
print "识别中止"

if __name__ == "__main__":
main()