芯片开放社区
直播中

王萍

7年用户 1272经验值
私信 关注
[技术讨论]

【1024平头哥开发套件开发体验】- sc5654 高级使用步骤

【1024平头哥开发套件开发体验】- sc5654 高级使用

  • SC5654语音识别流程介绍

    • 语音转文字:asr使用MIT云


函数:void aui_asr_register_mit(aui_t *aui, aui_asr_cb_t cb, void *priv);

位置:Packegs ->aui_aliyunnls

  • 文字转语音:tts使用MIT云

函数:void aui_tts_register_mit(aui_t *aui, aui_tts_cb_t cb, void *priv);

位置:Packegs ->aui_aliyunnls


  • 调用:在main函数中调用了app_aui_nlp_init();

    • app_aui_nlp_init();

      • 实现了KV命令解析
      • 实现了ASR和 TTS函数的调用
      • ASR(语音转文字)TTS(文字转语音)




  • 文字解析NLP

    • mit_asr_handle被前方函数调用,实现文字解析


i: 解析方式:使用json解析函数解读返回数据

ii: 解析函数:cJSON_Parse

iii: 解析后调用相关处理函数,实现功能

(int aui_nlp_proc_mit(cJSON *js, const char *json_text);)

  • aui_nlp_proc_mit介绍

i: 文件位置:aui_nlp_proc_mit.c


       函数主要对语音转化的文字获取后经行读取,识别,然后根据识别到的内容进行判断,执行相应的功能,主要分为获取返回内容或者获取内容中的动词进而实现相应的动作。

       比如:

                     if (strcmp(action->valuestring, "Action://audio/set_volumn") == 0) {

                ret = aui_nlp_action_set_volume(js, &need_resume);

                done = 1;

           } else if (strcmp(action->valuestring, "Action://audio/pause") == 0) {

                need_resume = 0;

                done = 1;

              判断返回的json数据中action值,实现音量控制

  • 文字转语音 TTS

    • 主要函数:mit_tts_handle

      • 函数位置:src -> aui_cloud -> aliyunnls -> aui_nlp.c
      • 函数内容:




  • 内容简述:

函数主要实现了将从阿里云TTS 服务中获取到json的语音包,然后解析出json中的重要数据,传给TTS语音播放函数,实现云端语音处理,将文字转化为语音。

函数中最主要的就是mit_tts_audio(); 函数主要实现了将云端语音数据转化为语音播放而出。

二. 工程实现语音控制设备

       1. 主要思想:

唤醒设备后,使用阿里云NLP将语音转化为文字,如果不考虑复杂语义,可直接将需要判断的内容和词条比较,实现功能

唤醒设备,如果语义复杂,可使用阿里云语义解析,解析出动词,名词,属性,进而实现复杂判断,笼统判断。



结束任务可调用阿里云TTS服务,将想要播放的文字转化为语音。

       2. 注意事项:

              a) 不同任务之间需要队列来传递消息,不能直接传递

              b) 如果功能简单,不想使用队列来实现可直接使用gpio等驱动函数直接控制

       3. 实现具体方法:

              a) 思考需要控制的类型,建立任务函数,任务消息队列

              

              

              b) 创建任务函数,实现任务功能(控制3色LED,和一个舵机或电机)

                     i:舵机的控制:2根电源线一根接3.3v,一根接gnd   1根数据线(pwm信号控制,控制时序如下图)

                     注意:如果使用pwm任务优先级需要开高一点。

                     舵机的控制时序


                     i+:电机控制:

注意事项:

需要使用驱动来控制电机,驱动和主控需要隔离,防止电机反冲电流烧坏芯片。

                     ii: led 控制:直接使用gpio控制

                     iii:控制函数:

                           

                            PWM:

                           

                            电机:

                           

              c) 语音识别函数处理

                     i:获取识别的内容

在int aui_nlp_proc_mit(cJSON *js, const char *json_text)函数中修改,读取识别到的关键字

                           

                     ii:比较内容和关键字(PWM)

                           

                            电机:

                           

                     iii: 将对比消息传递给消息队列函数,控制任务函数

                           

                            注意:此函数需要包含头文件:#include "kernel.h"

                     最后就是编译,下载,演示效果

三. 效果展示


文章转载自:平头哥芯片开放社区 作者:辰玖

24694765127045850725255425904

更多回帖

发帖
×
20
完善资料,
赚取积分