Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
网络学习营
【网络编程学习】百度语音识别的初步实现---二牛哥
发布于 2018-08-26 23:43:52 浏览:1327
订阅该版
* 本帖最后由 二牛哥 于 2018-8-27 07:01 编辑 * 百度语音识别的初步实现 本程序功能: 将 “ *url_fil ” 所指向的pmc语音文件上传到百度语音服务器并在RTT Shell中显示转换后的结果。 使用方法: 1、分别将const char *p_voice_url 和 const char *url_fil 指针中填入相应的地址即可,分别是百度的url和本地语音文件的 " pathname "。 详情请参考:[https://ai.baidu.com/docs#/ASR-API/top](https://ai.baidu.com/docs#/ASR-API/top) 2、将本文件添加到项目,通过编译后,在RTT Shell中输入“ wpost ”命令即可运行。 声明: 本程序参考自RTT webclient 相关程序,另外网友 "zppsky"的程序给了我一些启发。 #include
#include
#include
#include "webclient.h" #include "webclient_internal.h" #ifdef RT_USING_FINSH #include
#endif #ifdef RT_USING_DFS #include
const char *p_voice_url = “此处填写百度语音服务器的url” const char *url_fil = "此处填写语音文件的pathname"; //p_voice_url //url_fil int post_voice_file(const char* URI, const char* filename, const char* form_data) { size_t length; char boundary[60]; int fd = -1, rc = WEBCLIENT_OK; char *header = NULL, *header_ptr; unsigned char *buffer = NULL, *buffer_ptr; struct webclient_session* session = NULL; fd = open(filename, O_RDONLY, 0); if (fd < 0) { rc = -WEBCLIENT_FILE_ERROR; goto __exit; } /* get the size of file */ length = lseek(fd, 0, SEEK_END); rt_kprintf("watch dot 1 length = %d
",length); lseek(fd, 0, SEEK_SET); buffer = web_malloc(WEBCLIENT_RESPONSE_BUFSZ); if (buffer == NULL) { rc = -WEBCLIENT_NOMEM; goto __exit; } session = (struct webclient_session*) web_malloc(sizeof(struct webclient_session)); if (!session) { rc = -WEBCLIENT_NOMEM; goto __exit; } memset(session, 0x0, sizeof(struct webclient_session)); rc = webclient_connect(session, URI); if (rc < 0) goto __exit; /************************ send voice data *********************************/ rt_kprintf("Start upload voice file to baidu tts...
"); header = (char*) web_malloc(WEBCLIENT_HEADER_BUFSZ); if (header == NULL) { rc = -WEBCLIENT_NOMEM; goto __exit; } header_ptr = header; /* build boundary */ rt_snprintf(boundary, sizeof(boundary), "----------------------------%012d", rt_tick_get()); /* build encapsulated mime_multipart information*/ buffer_ptr = buffer; /* first boundary */ buffer_ptr += rt_snprintf((char*) buffer_ptr, WEBCLIENT_RESPONSE_BUFSZ - (buffer_ptr - buffer), "--%s
", boundary); buffer_ptr += rt_snprintf((char*) buffer_ptr, WEBCLIENT_RESPONSE_BUFSZ - (buffer_ptr - buffer), "Content-Disposition: form-data; %s
", form_data); // "Content-Disposition: form-data; NULL
"); buffer_ptr += rt_snprintf((char*) buffer_ptr, WEBCLIENT_RESPONSE_BUFSZ - (buffer_ptr - buffer), "Content-Type: application/octet-stream
"); /* calculate content-length */ length += buffer_ptr - buffer; length += strlen(boundary) + 6; /* add the last boundary */ /* build header for upload */ header_ptr += rt_snprintf(header_ptr, WEBCLIENT_HEADER_BUFSZ - (header_ptr - header), "Content-Length: %d
", length); header_ptr += rt_snprintf(header_ptr, WEBCLIENT_HEADER_BUFSZ - (header_ptr - header), "Content-Type:%s
", form_data); rc = webclient_send_header(session, WEBCLIENT_POST, header, header_ptr - header); if (rc < 0) goto __exit; /* send mime_multipart */ webclient_write(session, buffer, buffer_ptr - buffer); /* send file data */ while (1) { length = read(fd, buffer, WEBCLIENT_RESPONSE_BUFSZ); if (length <= 0) break; webclient_write(session, buffer, length); } /* send last boundary */ rt_snprintf((char*) buffer, WEBCLIENT_RESPONSE_BUFSZ, "
--%s--
", boundary); webclient_write(session, buffer, strlen(boundary) + 6); close(fd); //---------------------------------------------------------- int bytes_read,index; #define POST_RESP_BUFSZ 1024 #define POST_HEADER_BUFSZ 1024 rt_kprintf("webclient POST request response data :
"); do { bytes_read = webclient_read(session, buffer, POST_RESP_BUFSZ); if (bytes_read <= 0) { break; } for (index = 0; index < bytes_read; index++) { rt_kprintf("%c", buffer[index]); } } while (1); rt_kprintf("
"); //---------------------------------------------------------- __exit: if (fd >= 0) close(fd); if (session != NULL) webclient_close(session); if (buffer != NULL) web_free(buffer); if (header != NULL) web_free(header); return 0; } int wpost(void) { post_voice_file(p_voice_url,url_fil,"audio/pcm;rate=16000" ); return 0; } MSH_CMD_EXPORT(wpost, web post voice file to baidu); #endif [attach]5865[/attach] 参考结果: ![50.png](https://oss-club.rt-thread.org/uploads/201808/27/064244lasnsxnmgspsfcs2.png)
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
1.3k
关于作者
二牛哥
这家伙很懒,什么也没写!
提问
10
回答
4
被采纳
0
关注TA
发私信
相关问题
1
【LWIP学习营】第一关开发环境搭建
2
LWIP学习营第一周入门移植问题汇总贴
3
【LWIP学习营】f407+lan8720A小结
4
【LwIP学习营】【第一周】仅零散记录,无主题
5
【LWIP学习营】正点原子探索者F407+LAN8720第一周小结
6
【LwIP学习营】【第一周】网络通信基础及实现TCP 聊天客户端
7
【LwIP学习营】【第一周】LWIP移植
8
【LwIP学习营】【第一周】LWIP移植
9
【LwIP学习营】【第一周】开发板适配
10
【LwIP学习营】【第一周】环境搭建和配置验证
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
五分钟玩转RT-Thread新社区
5
国产MCU移植系列教程汇总,欢迎查看!
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
恩智浦FRDM-MCX947上的 IIC(硬件) 实践
2
栈溢出及中断向量偏移BUG记录与分析
3
NXP MCXN947测评之 adc
4
NXP MCXN947测评: rt-thread中配置启动PWM
5
八、恩智浦FRDM-MCX947上的 IIC(软件) 实践
热门标签
RT-Thread Studio
串口
LWIP
Env
SPI
Bootloader
AT
ART-Pi
CAN总线
Hardfault
FinSH
USB
文件系统
RT-Thread
DMA
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
cubemx
flash
I2C
UART
packages_软件包
freemodbus
潘多拉开发板_Pandora
PWM
定时器
BSP
ADC
keil_MDK
socket
中断
编译报错
MicroPython
Debug
SDIO总线
GD32
rt_mq_消息队列_msg_queue
ulog
C++_cpp
SFUD
flashDB
本月问答贡献
xiaorui
20
个答案
3
次被采纳
Juggernaut
12
个答案
3
次被采纳
踩姑娘的小蘑菇
11
个答案
2
次被采纳
小小李sunny
10
个答案
2
次被采纳
a1012112796
8
个答案
1
次被采纳
本月文章贡献
ZVML_9668
4
篇文章
6
次点赞
Lu_盼盼
4
篇文章
3
次点赞
Z_Y
3
篇文章
5
次点赞
ThinkCode
2
篇文章
2
次点赞
oxlm
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部