当前位置:   article > 正文

ESP32S3IDF在线语音识别

esp32s3idf

一、开发原因:
1.目前大部分的语音识别都是基于本地离线的识别,常见的简单设计方案有:
在这里插入图片描述
这种的话局限性很大,如果更换指令需要修改离线语音模块的内部代码工作量大大增加趣味性比较低那有没有一种可能将我们实时说的话识别出来?
这样我只需要更改STM32部分代码就行?肯定是有的下面听听兰花君的设计方案
二、方案设计
1.识别
使用百度语音API他接口丰富支持识别的语言种类多
在这里插入图片描述
当然也可以使用阿里云的有免费次数
百度云识别文档:https://ai.baidu.com/ai-doc/SPEECH/Hk38lxo4u
2.声音采集和上传
上传这方面可以用WIFI模块,和4G模块(4G没必要)声音采集有两种方案:
方案一:
在这里插入图片描述
方案二:
在这里插入图片描述
这里首选方案二成本低而且ESP32S3官方有语音例程,也有官方的语音开发板,所以只需要搞定上传部分就OK了、本次使用到的开发板:
在这里插入图片描述
当然后期会出比较迷你的小板板配合圆形屏幕当然这是以后的事情了
三、代码框架实现
1.开发环境:IDF4.4这个自己配置
2.代码框架
在这里插入图片描述
3.主要代码

        esp_http_client_config_t config = 
        {
            
            .url = "百度API",
            .event_handler = _http_event_handler,
        };      
        esp_http_client_handle_t client = esp_http_client_init(&config);
        esp_http_client_set_method(client, HTTP_METHOD_POST);     
        esp_http_client_set_post_field(client, (const char *)buff,  wav_size* 1024);
        esp_http_client_set_header(client, "Content-Type", "audio/pcm;rate=16000");  
        esp_err_t err = esp_http_client_perform(client);
        if (err == ESP_OK) 
        {
                    // printf("HTTP POST Status = %d, content_length = %d\r\n",
                    // esp_http_client_get_status_code(client),
                    // esp_http_client_get_content_length(client));
        } 
        else 
        {
            printf( "HTTP POST request failed: %s", esp_err_to_name(err));
        }
        esp_http_client_cleanup(client);

        free(buff);
        buff = NULL; 
  • 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

录音在官方例程有,录制好声音用上面就可以使用看看效果采集10秒录音:
在这里插入图片描述
最后为了这个助手更加的具有灵动性特意加了机器人自动对话:

void http_test_task(char *str)
{
    char cOutp[100]={0};
    char sp[200]="http://api.yunke.com/api.php?key=?&appid=0&msg=";
    UrlEncode(cOutp,80,str);
    printf("URL==========%s===========\r\n",cOutp);
    strcat(sp,cOutp);
    esp_http_client_config_t config = {
          .method = HTTP_METHOD_GET,           //get请求
          .url =sp,
         .event_handler = _http_event_handle,
        };
        esp_http_client_handle_t client = esp_http_client_init(&config);

        // GET
        esp_err_t err = esp_http_client_perform(client);
        if (err == ESP_OK) {
            ESP_LOGI(TAG, "HTTP GET Status = %d, content_length = %d",
                    esp_http_client_get_status_code(client),
                    esp_http_client_get_content_length(client));
        } else {
            ESP_LOGE(TAG, "HTTP GET request failed: %s", esp_err_to_name(err));
        }
        
        esp_http_client_cleanup(client);  
}
  • 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

效果:下个版本会加个播报模块上去
在这里插入图片描述
四、期待下次更新
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/669972
推荐阅读
相关标签
  

闽ICP备14008679号