如何安装智能语音服务提供的JavaSDK
示例中使用SDK内置的默认语音合成服务的外网访问服务URL,如果您使用位于阿里云上海地域的ECS,且需要通过内网访问服务URL,则在创建NlsClient对象时,设置内网访问的URL:client=newNlsClient("wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1",accessToken);示例中将合成的音频保存在文件中,如果您需要播放音频且对实时性要求较高,建议使用流式播放,即边接收语音数据边播放,减少延时。语音助手开发教程
注:本教程属于功能验证性质思维导图:
1、搭建MQTT服务器(腾讯云为例)购买云服务器,镜像选择为ubuntu系统,服务器的概要页面的网络信息栏中点击管理规则,自行添加8083、1883、18083端口,(详情查看EMQX的文档说明:链接,其中18083为web控制端:链接)。设置云服务器的登陆密码,腾讯云的ubuntu默认不能使用root用户,需修改(参考:链接))。ssh连接云服务器,在emqx的文档中找到shell脚本安装命令(链接))安装完成后启动EMQX服务(后台启动:链接)。浏览器中输入服务器公网ip+:18083访问,默认账户admin,密码public在设置中更换中文显示,点击工具栏的Websocket,点击连接。打开MQTT.fx,新建连接,测试发送消息是否能成功接收。2、购买域名并配置SSL证书到MQTT服务器(该部分参考emqx的文档说明)
购买域名后添加域名解析(mqtt.域名),再在域名解析中添加解析记录,类型为TXT,验证…下载证书,选择“其他”,解压出后缀为.key和.pem的两个文件,修改为mqtt.key,mqtt.pem,将两个文件复制到服务器的/bin/etc/emqx/certs目录下。修改nano/etc/emqx/emqx.conf文件,在emqx文档中找到要修改的配置项(链接)):listener.ssl.external.keyfile:指定SSL的私钥文件。listener.ssl.external.certfile:指定SSL的证书文件。listener.ssl.external.cacertfile:指定SSL的CA证书文件。将文件名修改为mqtt.key,mqtt.pem,然后重启emqx服务。
3、esp8266测试arduino代码:
#include#include//WiFiconstchar*ssid="luobo";//WiFinameconstchar*password="88888888";//WiFipassword//MQTTBrokerconstchar*mqtt_broker="mqtt.luomingxiong.xyz";//域名或IP地址constchar*topic="esp8266/led";//topicconstchar*mqtt_username="admin";//默认为adminconstchar*mqtt_password="public";constintmqtt_port=1883;//1883端口WiFiClientespClient;PubSubClientclient(espClient);voidsetup(){//Setsoftwareserialbaudto115200;Serial.begin(115200);pinMode(LED_BUILTIN,OUTPUT);//connectingtoaWiFinetworkWiFi.begin(ssid,password);while(WiFi.status()!=WL_CONNECTED){delay(500);Serial.println("ConnectingtoWiFi..");}Serial.println("ConnectedtotheWiFinetwork");//connectingtoamqttbrokerclient.setServer(mqtt_broker,mqtt_port);client.setCallback(callback);while(!client.connected()){Stringclient_id="esp8266-client-";client_id+=String(WiFi.macAddress());Serial.printf("Theclient%sconnectstothepublicmqttbroker ",client_id.c_str());if(client.connect(client_id.c_str(),mqtt_username,mqtt_password)){Serial.println("Publicemqxmqttbrokerconnected");}else{Serial.print("failedwithstate");Serial.print(client.state());delay(2000);}}//publishandsubscribeclient.publish(topic,"helloemqx");client.subscribe(topic);}voidcallback(char*topic,byte*payload,unsignedintlength){Serial.print("Messagearrivedintopic:");Serial.println(topic);Serial.print("Message:");Stringmessage;for(inti=0;ihostLe->text())),ui->portLe->text().toInt());connect(mqtt,SIGNAL(connected()),this,SLOT(mqtt_connect_success()));connect(mqtt,SIGNAL(disconnected()),this,SLOT(mqtt_disconnect()));connect(mqtt,SIGNAL(subscribed(QString,quint8)),this,SLOT(mqtt_sub_success()));connect(mqtt,SIGNAL(received(QMQTT::Message)),this,SLOT(mqtt_recv_msg(QMQTT::Message)));mqtt->setClientId("Qt-test0x10");//客户端ID,任取mqtt->setUsername("admin");//EMQx的默认用户名mqtt->setPassword("public");//EMQx的默认密码mqtt->setCleanSession(true);mqtt->connectToHost();//连接mqtt}测试输入云服务器的ip地址、端口、主题,点击连接,订阅,发布:EMQx的后台连接:成功接收到“hello”完整工程代码:5、Linux安装QTforAndroid安装参考链接
需要注意的地方:
版本尽量与参考链接里的保持一致,否则会有很多问题,特别是QT的版本多次尝试均失败后(一直报错:”Allessentialpackagesinstalled…“)。百度了一圈链接,原来是在某个文件中显示安装的安卓环境是只支持Qt5.12.[0-5]以及5.13.[0-1]的,而我原来用的版本是5.12.9,这点在官方文档中并没有说明。
在配置环境变量的时候,如果修改后仍有问题,就在~/.bashrc中同样配置一次,并且执行source~/.bashrc命令让配置生效。
如果在打开安卓模拟器时提示/dev/kvmdevice:permissiondenied,参考链接解决。
6、esp8266与手机APP通信手机APP测试:手机APP的订阅主题与esp8266代码中保持一致,即可通过手机APP发送”on“,”off“控制LED灯亮灭。
7、语音唤醒及识别硬件部分:使用夸克开发板(全志H3芯片,也可使用树莓派或者其他能运行ubuntu的开发板)。软件部分:参考开源项目wukong-robot(链接)8、“小爱同学”离线唤醒关键词训练离线唤醒关键词的识别使用的是一个开源引擎叫snowboy,但官方在2021年之后就关闭了线上训练功能,因此需要把源码下载到自己的ubuntu系统中进行本地训练关键词模型。snowboy源码地址,详细步骤可参考github中的文档说明。
注意:在开发板上搭建训练的环境可能会报错,因此建议在电脑的ubuntu系统中搭建(一定要是16版本的)。搭建好后用开发板录制音频,然后通过电脑训练出模型。[参考链接](snowboy本地模型训练基于树莓派4b|Never的个人博客(gitee.io))
9、wukong通过mqtt控制esp8266wukong-robot的安装与配置参考文档。esp8266的代码参考wukong-robot文档。10、wukong-robot与app控制esp8266将订阅主题和发布主题修改为“开发板一”,发送“开灯”,“关灯”或者“on”,“off”即可控制esp8266的灯亮灭通过语音识别“开灯”,“关灯”也可控制灯亮灭。11、通过hass控制小米、华为、苹果等智能家居设备待补充。。。