Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
网络学习营
【网络编程学习】百度语音识别的初步实现---二牛哥
发布于 2018-08-26 23:43:52 浏览:1411
订阅该版
* 本帖最后由 二牛哥 于 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.4k
关于作者
二牛哥
这家伙很懒,什么也没写!
提问
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
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
a1012112796
13
个答案
1
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部