百度语音识别,发送语音数据宕机

manyxu
Posts: 5
Joined: Thu Jun 03, 2021 3:19 am

百度语音识别,发送语音数据宕机

Postby manyxu » Mon Aug 02, 2021 3:56 am

使用ESP32-LyraTD-MSC做文字转语音,
再上传语音buffer时,总是宕机。困扰一天也不能解决。
1.分配内存
int num = 3;
int sz = 8 * num * 1024 * sizeof(char);
int sz1 = 8 * (num+1) * 1024 * sizeof(char);
char *buff = (char *)malloc(sz);
if (NULL == buff) {
ESP_LOGE(TAG, "Memory allocation failed!");
}
memset(buff, 0, sz);

int max_len = 1 * 1024;
char *data = (char *)malloc(max_len);
memset(data, 0, max_len);

2.在语音唤醒后,启动录音
while (1)
{
if (enable_wn) {
raw_stream_read(raw_read, (char *)buffer, size * sizeof(short));

if (wakenet->detect(model_wn_data, (int16_t *)buffer) == WAKE_UP) {
ESP_LOGI(TAG, "wake up");
enable_wn = false;
}
}
else
{
ESP_LOGI(TAG, "get voice begin!");

esp_http_client_config_t config = {
.url = baidu_asr_url,
.event_handler = _http_event_handler,
.buffer_size = sz1,
.buffer_size_tx = sz1,
};
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, sz);
esp_http_client_set_header(client, "Content-Type", "audio/pcm;rate=16000");
memset(temp, 0, 128);
snprintf(temp, 128, "%d", sz);
esp_http_client_set_header(client, "Content-Length", temp);
while (1) {
err = esp_http_client_perform(client);
if (err != ESP_ERR_HTTP_EAGAIN) {
break;
}
}
if (err == ESP_OK) {
ESP_LOGI(TAG, "HTTPS Status = %d, content_length = %d",
esp_http_client_get_status_code(client),
esp_http_client_get_content_length(client));
} else {
ESP_LOGE(TAG, "Error perform http request %s", esp_err_to_name(err));
}
esp_http_client_cleanup(client);

enable_wn = true;
memset(buff, 0, sz);
}
}

3.困惑:
变量num 决定了要录音的时间长短,数值为3可以运行,结果如附件3

改为6无法运行,内存分配首先失败了,结果如附件2

4.问题:
如何做一个大的buffer的Post请求?官方如何解决上传语音数据,文字转语音的问题。(网上的有的教程基于早期版本,代码已经无法运行了)
Attachments
2.png
2.png (35.99 KiB) Viewed 8310 times
3.png
3.png (52.35 KiB) Viewed 8310 times

manyxu
Posts: 5
Joined: Thu Jun 03, 2021 3:19 am

Re: 百度语音识别,发送语音数据宕机

Postby manyxu » Mon Aug 02, 2021 7:25 am

经过千辛万苦努力,终于可以了。
esp_http_client_config_t config = {
.url = baidu_asr_url,
.event_handler = _http_event_handler,
.buffer_size = 2048,
.buffer_size_tx = 2048,
};
这里参数之前填错了。
终于可以玩远洋,语音识别了。这个产品好!

manyxu
Posts: 5
Joined: Thu Jun 03, 2021 3:19 am

Re: 百度语音识别,发送语音数据宕机

Postby manyxu » Mon Aug 02, 2021 7:42 am

目前遇到的问题,发送的buf不能大。
一次性发送数据,超过就失败了。
int num = 10;
int sz = 8 * num * 1024 * sizeof(char);
不知道什么原因了!这样差不多只能录音3秒,不知道官方怎么做的

ESP_HengYC
Posts: 184
Joined: Fri Dec 15, 2017 2:45 am

Re: 百度语音识别,发送语音数据宕机

Postby ESP_HengYC » Wed Aug 04, 2021 3:01 am

你是一次性发送这么大的数据吗? 我们官方是使用 流的方式, 每次 1-2k数据。 你可以尝试下这个方式。

manyxu
Posts: 5
Joined: Thu Jun 03, 2021 3:19 am

Re: 百度语音识别,发送语音数据宕机

Postby manyxu » Thu Aug 12, 2021 8:51 am

因为是调用的百度语音识别API,语音识别转文字,无法做到流式发送,除非先发到上位机了,再由上位机中转了。
过程就多了一步

manyxu
Posts: 5
Joined: Thu Jun 03, 2021 3:19 am

Re: 百度语音识别,发送语音数据宕机

Postby manyxu » Thu Aug 12, 2021 8:53 am

ESP_HengYC wrote:
Wed Aug 04, 2021 3:01 am
你是一次性发送这么大的数据吗? 我们官方是使用 流的方式, 每次 1-2k数据。 你可以尝试下这个方式。
因为是调用的百度语音识别API,语音识别转文字,无法做到流式发送,除非先发到上位机了,再由上位机中转了。
过程就多了一步

Who is online

Users browsing this forum: No registered users and 24 guests