2017百度图片怎么上传的图片上怎么上传上去的

基于LD3320的非特定人语音识别方案
> 基于LD3320的非特定人语音识别方案
基于LD3320的非特定人语音识别方案
0 引言本文引用地址:
随着高新技术在军事领域的广泛运用,武器装备逐步向高、精、尖方向发展。传统的军事训练由于训练时间长、训练费用高、训练空间窄,常常不能达到预期的训练效果,已不能满足现代军事训练的需要。为解决上述问题,模拟训练应运而生。
为进一步提高训练效果,本文利用智能语音交互芯片设计了某模拟训练器的示教与回放系统。示教系统为操作人员生动的演示标准操作流程及相应的操作现象,极大地缩短了对操作人员的培训时间,提高了培训效果。回放系统通过记录操作训练过程中各操作人员的口令、声音强度、动作、时间、操作现象等,待操作训练结束后通过重演训练过程,以便操作者及时纠正自己的问题。示教系统也可理解为对标准操作训练过程的回放。该系统不需要虚拟现实技术的支持,在小型的嵌入式系统上就可以实现。
1 系统原理
该模拟训练器由一台测控计算机和多台从设备组成。如图1所示。在此仅对一台从设备进行介绍,其硬件系统主要由测控计算机、Arduino mega2560 控制器、语音识别单元、声强检测单元、语音合成单元、面板控制单元、仪器面板等组成。面板控制单元较为复杂,包含多种控制电路,在模拟训练中负责该从设备在Arduinomega2560 控制器的控制下完成整个训练过程,在示教与回放系统中完成对刚才操作训练操作现象的重演,其具体电路设计在此不做介绍。
语音识别单元负责识别操作人员的操作口令;声强检测单元负责检测声强大小并以此作为判断是哪台从设备操作人员口令的依据;Arduino mega2560控制器负责监视仪器面板各元件的状态来识别操作人员的动作,从而完成对操作训练过程的记录。各仪器的操作现象根据操作动作事先编制无需记录。在操作回放过程中,测控计算机根据所记录的数据,通过控制相应从设备的Arduino mega2560控制器重现所记录的操作过程。
2 单元系统设计
2.1 语音识别单元设计
目前,语音识别技术的发展十分迅速,按照识别对象的类型可以分为特定人和非特定人语音识别。特定人是指识别对象为专门的人,非特定人是指识别对象是针对大多数用户,一般需要采集多个人的语音进行录音和训练,经过学习,从而达到较高的识别率。
本文采用的语音识别芯片是一颗基于非特定人语音识别(Speaker?Independent Automatic SpeechRecognition,SI?ASR)技术的芯片。该芯片上集成了高精度的A/D 和D/A 接口,不再需要外接辅助的FLASH 和RAM,即可以实现语音识别、声控、人机对话功能,提供了真正的单芯片语音识别解决方案。并且,识别的关键词语列表是可以动态编辑的。其语音识别过程如图2所示。
语音识别单元采用ATmega168 作为MCU,负责控制完成所有和语音识别相关的工作,并将识别结果通过串口上传至Arduino mega2560 控制器。对芯片的各种操作,都必须通过寄存器的操作来完成,寄存器读写操作有2种方式(标准并行方式和串行SPI方式)。在此采用并行方式,将LD3320的数据端口与MCU的I/O口相连。其硬件连接图如图3所示。
语音识别流程采用中断方式工作,其工作流程分为初始化、写入关键词、开始识别和响应中断等。MCU的程序采用ARDUINO IDE编写[5],调试完成后通过串口进行烧录,控制LD3320完成语音识别,并将识别结果上传至Arduino mega2560控制器。其软件流程如图4所示。
2.2 声强检测单元设计
在进行语音识别时需要判断是某一台从设备操作人员的口令,为此设计声强检测单元电路,该电路仅需能够判断出相对声强的大小,无需检测声级,对检测精度要求较低。
电容式MIC声音传感器将外部声音信号转换成电信号,经NE5532放大电路进行放大,将输入的微弱音频信号转换为具有一定幅值的电压信号,该电压信号经AC/DC有效值转换电路进行装换后进行再次放大,最终由Arduino mega2560控制器的A/D进行采样。图5给出了声强检测单元的电路原理图,其中D1 端接Arduinomega2560控制器的A/D,INT1端接Arduino mega2560控制器的外部中断1.当外界声音信号大于预设的阈值时,三极管导通INT1端由高电平变为低电平产生外部中断,控制器响应中断并进行A/D 采样,采样数据经均值滤波后保存,待测控计算机查询时上传该声强数据。
2.3 语音合成单元设计
TTS(Text To Speech)文本转语音技术是人机智能对话发展的趋势。基于TTS技术的语音系统无需事先录音就能够随时根据查询条件查出并合成语音进行播报,从而大大减少了系统维护的工作量。利用此技术,通过MCU或者PC机就能控制语音芯片发音[4]。
本文采用中文语音合成芯片进行语音合成。 通过UART 接口或SPI接口通信方式,接收待合成的文本数据,实现文本到语音(或TTS语音)的转换[6]。控制器和 语音合成芯片之间通过UART接口连接,控制器通过串口通信向SYN6658语音合成芯片发送控制命令和文本,SYN6658语音合成芯片把接收到的文本合成为语音信号输出,输出的信号经LM386 功率放大器进行放大后连接到喇叭进行播放。
如图6所示。
手机电池相关文章:
pa相关文章:
声控灯相关文章:
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一有没有玩过LD3320语音识别模块的??求助。。。
30分,无满意结帖,结帖人zuchgi]
有没有玩过LD3320语音识别模块的??求助。。。
30分,无满意结帖,结帖人zuchgi]
发布时间: 22:54:16
编辑:www.fx114.net
本篇文章主要介绍了"有没有玩过LD3320语音识别模块的??求助。。。
30分,无满意结帖,结帖人zuchgi]",主要涉及到有没有玩过LD3320语音识别模块的??求助。。。
30分,无满意结帖,结帖人zuchgi]方面的内容,对于有没有玩过LD3320语音识别模块的??求助。。。
30分,无满意结帖,结帖人zuchgi]感兴趣的同学可以参考一下。
前几天买了一个LD3320的模块,这几天抽空写写程序,试了挺多次一直没工作。看看了,发现一个比较奇怪的问题,就是寄存器的读写。用的单片机是STM32,引脚工作方式是:控制线推挽输出,数据写推挽,数据读上拉输入
这是测试的读写小程序
&&&&&&&&for(j=0;j&255;j++)
&&&&&&&&&&{
&&&&&&&&&&&&&&&&&LD_WriteReg(0x1e,&j);&&&&&//寄存器写入数据(红色的是寄存器地址)
&&&&&&&&&&&&&&&&delay_ms(1);
&&&&&&&&&&&&&&&&&&i=LD_ReadReg(0x1e);&&&&&//读寄存器数据
&&&&&&&&&&&&&&&&&display(100,100,i,0xffff,0);&&&&//显示数据
&&&&&&&&&&&}
结果发现其他的寄存器读写都正常,关于PLL相关的寄存器如:0x1B,0X1D这两个寄存器读写错误。&LD3320的详细资料也没有,不知道哪出了错。
有没有那个朋友调好的程序,发过来瞧瞧,先谢谢了,呵呵。。。。有很多的资料可以参考的呢&最好的就是开发手册了
LD3320开发手册
LD3320相关资料您好,我最近在写STM32得LD3320的程序,但是一直读不了寄存器,找了几天一直没找到原因,不知道您能否把您的程序发给我一份我借鉴借鉴啊,非常感谢啊!我的邮箱:我最近也在调LD3320模块,按照调试步骤那个PDF文档上,读取寄存器初值,就一直为零,读不到值,硬件连接没问题,我看了下那程序就是官网里面的相关驱动函数,别人说是可以的。主程序里面就写了时钟端口相关配置,然后让LD3320复位,后读取寄存器初值查看初值是否正常,但一直读到的是0。读取寄存器初值之前还需不需要调用,LD_Common_Init()函数,是不是因为没调用这个函数,所以这样。楼主,我最近在用stm32调ld3320&模块&,遇到好多问题,不知您跳出来了吗?要是调出来了,能让我借鉴一下代码吗?邮箱&&
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:1880人阅读
W5500热门应用(11)
产品应用(36)
W5500(27)
作者:Catherine
语音识别与签到系统
近年来,语音识别在语音导航,室内设备控制,人际对话等方面得到了广泛的应用。
我们在今年第1期杂志《为设备添加社交网络功能》中,实现了W5500EVB自己发微博功能。试想如果我们把语音识别与微博签到结合起来,我们上班时,报上姓名,经识别后,摄像头为我们拍张照片,传到新浪微博,这样既能得到我们签到的时间,又能保证是本人签到,可靠高效,同时朋友通过微博能了解到我们上班时的状态,这样是不是很有意思呢?
今天要介绍的就是上面提到的,基于语音识别的微博签到系统,我们用摄像头ov2640拍照,LD3320做语音识别,然后W5500EVB把我们想说的话,以及照片发送到新浪微博。
基于语音识别的微博签到系统设计
(1)&&&开发板基本情况
a)&&&&&&&&单片机:STM32F103RCT6,256K字节Flash,48K字节SRAM,2K字节EEPROM
b)&&&&&&&以太网控制器:W5500,SPI接口与单片机相连
c)&&&&&&&&电源:USB供电
(2)&&&开发工具: IARfor ARM v5.41,这是我们工程所使用的版本。如果使用不同版本的IAR,请对STM的库稍作调整。
(3)&&&语音识别:LD3320语音识别模块。
(4)&&&图像生成:OV2640摄像头。
(5)&&&其他
a)&&&&&&&&新浪微博用户名和密码;如若没有,就赶快给你的设备申请一个吧!
b)&&&&&&&一根Mini接口的USB线,如图1所示。
c)&&&&&&&&一根网线。
d)&&&&&&&STM32芯片的串口程序烧录工具,STM官方提供的程序名为:Flash Loader Demo。
图1是系统实物图。
图1系统实物图
首先,我们了解一下整个程序流程,流程图由一个主流程图(见图2)和四个子流程图(图3,图4,图5,图6)组成。在STM32及ov2640初始化完成之后,将进行网络参数配置,根据自己网络的情况配置W5500的IP地址等网络参数,确保W5500能连接外网。然后配置LD3320语音模块,语音模块处于初始状态,将进行写入识别列表,启动语音识别过程,当我们对着麦克风说话的时候,LD3320检测到有语音输入,LD3320将进入中断,在中断中将把我们说的内容与寄存器里的词条比较,如果找到1-4个候选答案,返回“找到识别结果”状态,如果没有找到候选答案,返回“未找到识别结果”状态。在下一次循环中,LD3320如果是“找到识别结果”状态,将拍摄照片及发送微博,如果是“未找到识别结果”状态,将进入初始状态,如果是“正在识别”或者“识别错误”将重新检查LD3320的状态。各个子流程图描述的比较详尽,这里不再一一赘述。对于拍摄照片子流程图,我们需要了解jpg图片的数据格式,图片的前两个字节是0xff,0xd8,最后两个字节是0xff,0xd9,在中断程序接收图片数据的过程中,首先判断数据是不是前两个字节,如果是,保存数据,后面的数据是先保存,然后判断是不是数据结尾,直到接收成功。
图2系统主流程图
图3写入识别列表函数流程图 & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & 图4启动语音识别模式流程图
图5拍摄照片流程图
图6发送微博流程图
以上四个子流程图,已清晰地给大家展示语音识别微博签到系统的整个工作流程,那么接下来就为大家揭开详细的制作过程。
LD3320介绍
1 通过快速而稳定的优化算法,完成非特定人语音识别,识别准确率95%。
2 不需要外接任何辅助的Flash芯片,RAM芯片和AD芯片,就可以完成语音识别功能。
3 每次识别最多可以设置50项候选识别句,每个识别句可以是单字,词组或短句,长度为不超过10个汉字或者79个字节的拼音串。识别句内容还可以动态编辑修改。
4 芯片内部已经准备了16位A/D转换器、16位D/A转换器和功放电路,麦克风、立体声耳机和单声道喇叭可以很方便地和芯片管脚连接。
5 支持并行和串行接口,串行方式可以简化与其他模块的连接。
在本系统中采用的LD3320模块如图7,LD3320芯片外部已经连接了麦克风,耳机接口,基本电路,只引出了我们需要的引脚。本系统采用串行方式,串行接口通过SPI协议和外部主CPU连接,首先要将MD接高电平,将SPIS接地,选定LD3320工作在串行模式,此时使用的管脚有:片选(SCS*)、SPI时钟(SDCK)、SPI输入(SDI)和SPI输出(SDO),中断引脚(INT),复位引脚(RST),时钟引脚(CLK),通过SPI接口,配置LD3320的工作模式,读取识别结果,图8,图9为SPI读写时序。当LD3320识别到有语音输入,INT引脚将产生中断,在中断处理函数中,读取识别结果,改变LD3320状态。
图7LD3320语音模块
图8& SPI方式读时序
图9 SPI方式写时序
在本系统中,OV2640输出JPEG压缩图像格式。MCU与OV2640的通信采用串行与并行结合,OV2640带有SCCB(Serial Camera Control Bus)双线串行接口,MCU通过SCCB接口配置和读取OV2640的信息;MCU通过并行总线的方式来接收OV2640的图像数据。Y(2..9)为8位MSB(MostSignificant Bit,最高有效位模式)并行总线,SDIO、SCLK为SCCB接口,PCLK为像素时钟输出管脚(每个周期从并行总线上输出一个像素),VSYNC为列同步输出管脚(每帧图像发生一次跳变),HERF为行参考输出管脚(每个周期总线从并行总线上输出一行图像数据)。系统的硬件电路连接简图如图10。
图10系统硬件电路连接简图
系统上电后,MCU配置OV2640的工作方式,初始化LD3320,然后检查LD3320的状态,当LD3320的状态是“找到识别结果”,开启OV2640中断,在OV2640准备好图像后,VSYNC会被拉高一段时间,MCU通过PCLK上升沿中断按字节接收图像数据,接收数据完成,关闭OV2640中断。然后向新浪微博发送已经写进程序里的自己想说的话和接收到的图片。接下来将对主要的程序块做介绍。
在《为你的设备添加社交网络功能》中,已经详细介绍了OV2640的初始化配置程序,本篇文章就不再赘述,图像数据缓存程序与本文稍有不同,这里简单介绍图像数据缓存程序。本文对LD3320的写入词条列表,启动语音识别,中断处理程序,发送微博程序做主要介绍。
图像数据缓存程序(摘至stm32f10x_it.c):
void EXTI0_IRQHandler(void)
EXTI_ClearITPendingBit(EXTI_Line0);&&&& //清除EXTI0线路挂起位
&if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)==0)//HREF管脚为低
&temp=(u8)((GPIOC-&IDR)&&8 & 0x00ff);&&& //读取一个字节图像数据
switch(jpg_flag)
&&&&& if(temp==0xff)&&&&&&&&&&&&&&&&&&&&& //图像数据以0xff 0xd8开头
JPEGBuffer[0]=0
jpg_flag=1;
if(temp==0xd8)
JPEGBuffer[1]=0xd8;
jpg_flag=2;
JPEGCnt=2;
else if(temp!=0xff)
jpg_flag=0;
JPEGBuffer[JPEGCnt++] =& //存储数据
if(temp==0xff)jpg_flag=3;
JPEGBuffer[JPEGCnt++]=& //图像数据以0xff0xd9结尾
if(temp==0xd9)
jpg_flag=4;
else if(temp!=0xff)
jpg_flag=2;
在中断函数中通过以上程序即可正确读取每一帧图像的数据了。程序思想已经在拍摄照片流程图中体现。JPEGBuffer为一个全局的图像缓存区,在主函数中,检测到缓存区数据准备完毕后,就可以将图像发送给新浪微博了。
LD3320添加词条程序(摘至LD3320_main.c)
uint8 LD_AsrAddFixed(void)
uint8nAsrAddL
#define DATE_A&4&&& /*数组二维数值*/
#define DATE_B& 20&&&& /*数组一维数值*/
uint8&sRecog[DATE_A][DATE_B] = {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &wenjuan&,\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &guocui&,\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&jierui&,\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& & &chenge&\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&& };&&& /*添加关键词*/
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& uint8& pCode[DATE_A] = {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CODE_wenjuan,\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CODE_guocui,\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CODE_jierui,\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CODE_chenge\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& };&&& /*添加识别码*/
for (k=0; k&DATE_A; k++)
{&&&&&&&&&&&&&&&&&&&&&&&&&&&
if(LD_Check_ASRBusyFlag_b2() == 0)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& flag= 0;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
LD_WriteReg(0xc1, pCode[k] );
LD_WriteReg(0xc3, 0 );
LD_WriteReg(0x08, 0x04);
LD3320_delay(1);
LD_WriteReg(0x08, 0x00);
LD3320_delay(1);
for (nAsrAddLength=0; nAsrAddLength&DATE_B;nAsrAddLength++)
if (sRecog[k][nAsrAddLength] == 0)
LD_WriteReg(0x5, sRecog[k][nAsrAddLength]);
LD_WriteReg(0xb9, nAsrAddLength);
LD_WriteReg(0xb2, 0xff);
LD_WriteReg(0x37, 0x04);
LD_WriteReg(0x37, 0x04);
列表的规则是,每个识别条目对应一个特定的编号(1个字节),不同的识别条目的编号可以相同,而且不用连续。本芯片最多支持50个识别条目,每个识别条目是标准普通话的汉语拼音(小写),每2个字(汉语拼音)之间用一个空格间隔。首先把识别条目的编号写入0xc1寄存器,其次,将字符串中的字符按顺序写入寄存器0x05,然后将字符串长度写入寄存器0xB9,向寄存器0xB2写入0xFF,向寄存器0x37写入0x04,通知DSP要添加一项识别句。
LD3320启动语音识别程序(摘至LD3320_main.c)
uint8 LD_AsrRun(void)
1&&&& LD_WriteReg(0x35,MIC_VOL);& &//ADC增益设置
2&&&& LD_WriteReg(0x1C,0x09);&&&&& //ADC开关控制,写09H为保留命令字。
3&&&& LD_WriteReg(0xBD,0x20);&&&&& //初始化控制寄存器,写入20H,保留命令字。
4&& LD_WriteReg(0x08, 0x01);&&&& //清除FIFO内容,第0位:写入1→清除FIFO_DATA。
&&&&&& LD3320_delay( 5);&
5&&&& LD_WriteReg(0x08,0x00);&&&&&&
&&&&&& LD3320_delay( 5);
6&&&& if(LD_Check_ASRBusyFlag_b2()== 0)& //检查b2寄存器是否为空闲
&&&&&&&&&&&&& return 0;
&&&&&& LD_WriteReg(0xB2,0xff);&&
7&& LD_WriteReg(0x37, 0x06); //语音识别控制命令下发寄存器,写06H:通知DSP开始识别语音。
&&&&&& LD_WriteReg(0x37,0x06);
&&&&&& LD3320_delay( 5);
8& LD_WriteReg(0x1C, 0x0b); // ADC开关控制写0BH
麦克风输入ADC通道可用
LD_WriteReg(0x29, 0x10); // 中断允许(可读写)第4位:同步中断允许,1表示允许;0表示不允许。
LD_WriteReg(0xBD, 0x00);&&&&&&&&&& // 初始化控制寄存器写入00H;然后启动;为ASR模块;
&&&&&& return 1;
第1行,ADC增益设置,或可以理解为麦克风(MIC)音量。可以设置为00H-7FH。建议设置值为40H-55H:值越大代表MIC音量越大,识别启动越敏感,但可能带来更多误识别;值越小代表MIC音量越小,需要近距离说话才能启动识别功能,好处是对远处的干扰语音没有反应。第6行检查LD3320是否为空闲状态,如果为空闲状态,在第7行向0x37寄存器写入0x06,通知DSP开始语音识别。第8行,向寄存器0x1c写入0x0b,表示麦克风输入ADC通道可用。
LD3320中断处理程序(摘至LDChip.c)
voidProcessInt0(void)
uint8nAsrResCount=0;
1& ucRegVal = LD_ReadReg(0x2B);& // 读取中断请求编号寄存器
2&& LD_WriteReg(0x29,0);& // 第2位:FIFO 中断允许,1表示允许;0表示不允许。第4位:同步中断允许,1表示允许;0表示不允许。
3&& LD_WriteReg(0x02,0);& // FIFO中断允许第0位:允许FIFO_DATA中断;第2位:允许FIFO_EXT中断;
4&& If((ucRegVal& 0x10)&&LD_ReadReg(0xb2)==0x21 &&LD_ReadReg(0xbf)==0x35)& &&&&&&// 中断请求编号寄存器0x2B第4位:读取值为1表示语音识别有结果产生;MCU可清零。ASR过程中DSP忙闲状态寄存器0xb2,读取到0x21 表示闲,查询到为闲状态可以进行下一步ASR动作。ASR状态报告寄存器0xbf 读到数值为0x35,可以确定是一次语音识别流程正常结束.
&&&&&&&&&&&& {&&&
5&&&&&&&&&&&&&&&&& nAsrResCount= LD_ReadReg(0xba); //中断辅助信息寄存器,其中的数值表示语音识别有几个识别候选
6&&&&&&&&&&&&&&&&& if(nAsrResCount&0&&nAsrResCount&=4)
&&&&&&&&&&&&&& {
nAsrStatus=LD_ASR_FOUNDOK;&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&& }
&&&&&&&&&&&&&& {
7nAsrStatus=LD_ASR_FOUNDZERO;
&&&&&&&&&&&&&& }&&&&&
8& nAsrStatus=LD_ASR_FOUNDZERO;&&& //执行没有识别
LD_WriteReg(0x2b,0);
LD_WriteReg(0x1C,0);/*写0:ADC不可用*/
LD_WriteReg(0x29,0);
LD_WriteReg(0x02,0);
LD_WriteReg(0x2B,0);
LD_WriteReg(0xBA,0);&
LD_WriteReg(0xBC,0);&&
LD_WriteReg(0x08,1);&&& /*清除FIFO_DATA*/
LD_WriteReg(0x08,0);&&& /*清除FIFO_DATA后再次写0*/
中断处理函数的第1行读取中断请求编号寄存器0x2B的值,第4位:读取值为1表示语音识别有结果产生;MCU可清零。第2位:读取值为1表示芯片内部FIFO中断发生。MP3播放时会产生中断标志请求外部MCU向FIFO_DATA中Reload数据。第3位:读取值为1表示芯片内部已经出现错误。值得注意的是:如果在中断响应时读到这位为1,需要对芯片进行重启Reset,才可以继续工作。第2,3行关闭LD3320的中断。第4行,读取中断请求编号寄存器0x2B的值,当第4位读取值为1表示语音识别有结果产生,其次读取语音识别过程中DSP忙闲状态寄存器0xb2,读取到0x21
表示闲,然后读取语音识别状态报告寄存器0xbf的值,读到数值为0x35,可以确定是一次语音识别流程正常结束,当这三个寄存器的数值不满足以上要求的时候,返回“LD_ASR_FOUNDZERO”,表示未找到识别结果。当满足以上要求时,第5行,读取中断辅助信息寄存器,其中的数值表示语音识别有几个识别候选,当数值为1
– 4: 表示有N个识别候选,数值为0或者大于4表示没有识别候选,当有识别候选的时候,返回“LD_ASR_FOUNDOK”,表示找到语音识别结果。
发送微博程序(摘至weibo.c)
unsigned char post_weibo_upload(char* weibo, uint8* pic,uint32 picLen)
unsigned char ret=0;
unsignedintlen=0;
1 &if(socket(SOCK_WEIBO,Sn_MR_TCP,any_local_port++,0)!=1)& //to initialize a TCP socket
printf(&Socket initialization failed.\r\n&);
printf(&Connect with Weibo server.\r\n&);
2&&&ret=connect(SOCK_WEIBO,weibo_server_ip,80);&&&& &&//connect to the weibo server, default TCPport is 80
if(ret!=1)
printf(&Connect Weibo server failed.\r\n&);
3while(getSn_SR(SOCK_WEIBO)!=SOCK_ESTABLISHED);& //wait for the TCP connection established!
printf(&Connected with Weiboserver.\r\n&);
4&& sprintf(post_data,&\r\n--%s\r\nContent-Disposition:form- name=\&id\&\r\n\r\n%s&\
&\r\n--%s\r\nContent-Disposition:form- name=\&pw\&\r\n\r\n%s&\
&\r\n--%s\r\nContent-Disposition:form- name=\&cmd\&\r\n\r\nupload&\
&\r\n--%s\r\nContent-Disposition:form- name=\&status\&\r\n\r\n%s&\
&\r\n--%s\r\nContent-Disposition:form- name=\&file\&; filename=\&pic.jpg\&\r\nContent-Type:application/octet-stream\r\n\r\n&,(char*)BOUNDARY,(char*)WEIBO_ID,(char*)BOUNDARY,(char*)WEIBO_PWD,(char*)BOUNDARY,(char*)BOUNDARY,weibo,(char*)BOUNDARY);//&\r\n--%s--\r\n&
5&& sprintf(tmp_buf,&POST %sHTTP/1.1\r\nHost: %s\r\nUser-Agent: w5500\r\nContent-Type: multipart/form-boundary=%s\r\nConnection:close\r\nContent-Length:%d\r\n\r\n%s&,(char*)HTTP_PATH,(char*)WEIBO_SERVER,(char*)BOUNDARY,strlen(post_data)+picLen+strlen((char*)BOUNDARY)+8,post_data);
6&& len=send(SOCK_WEIBO,(unsignedchar*)tmp_buf,strlen(tmp_buf)); //upload your weibo content
&&&&& uint16 file_len=picL
&&&& uint16 send_len=0;
while(file_len)
if(file_len&PACKET_LEN)
if(getSn_SR(SOCK_WEIBO)!=SOCK_ESTABLISHED)
&&&&&&&&& {
&&&&&&&&& }
7send(SOCK_WEIBO, (uint8*)(pic+send_len), PACKET_LEN);& // upload picture
send_len+=PACKET_LEN;
file_len-=PACKET_LEN;
8send(SOCK_WEIBO, (uint8*)(pic+send_len), file_len);// uploadpicture
send_len+=file_
file_len-=file_
sprintf(tmp_buf,&\r\n--%s--\r\n&,(char*)BOUNDARY);
send(SOCK_WEIBO,(unsigned char*)tmp_buf,strlen(tmp_buf));
9len=getSn_RX_RSR(SOCK_WEIBO);
memset(tmp_buf,0x00,MAX_BUF_SIZE);
10len=recv(SOCK_WEIBO,(unsigned char*)tmp_buf, len);&&//receive thereturn result from weibo server
11char*p=strstr(tmp_buf,(char*)&\r\n\r\n&)+4;& &//gethttp payload without http headerprintf(&%s\r\n&,p);
disconnect(SOCK_WEIBO);&&//disconnect with weibo server
close(SOCK_WEIBO);&&&&&&&//close the socket
return 1;&&&&&&&&&&&&&&&&//sucess! return 1
发送微博函数的第1行,初始化一个socket,第2行,对服务器发出连接请求,第3行一直等待连接的建立。与服务器建立连接后,第4,5行负责组建带有微博内容和图片长度的HTTP数据包,第6行负责发送微博内容,第7,8行发送图片数据。第9行是读取W5500接收到的数据长度,第10行从W5500的接收缓存中把接收到的数据读到tmp_buf中。由于接收到的数据包含了HTTP头,第11行是把HTTP头去掉,得到服务器的返回结果。服务器返回结果的类型请参看《为你的设备添加社交网络功能》一文。
好了,代码就这么多,赶快编译烧到单片机里面吧,上电,对着麦克风说出一句已经写到LD3320里的话,当对应的指示灯亮或者闪烁,说明已经识别成功,然后对着摄像头微笑吧,这时摄像头为我们拍张照片,上传微博,然后看串口调试信息,如果收到“255:ok”,那就成功了,登录到微博看看,写进程序里的话以及自己的照片出现在微博上面。如图11。
图11系统发送微博效果图
至此,我们的基于语音识别的微博签到系统已经大功告成,你心动了吗?赶快制作你自己的微博签到系统吧。
欢迎与我们更多交流:wiznetbj@wiznet.co.kr
WIZnet官方网站:
WIZnet官方微博:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1219366次
积分:17858
积分:17858
排名:第419名
原创:590篇
转载:66篇
译文:39篇
评论:146条
(3)(1)(1)(5)(8)(7)(8)(5)(5)(4)(3)(9)(14)(9)(5)(3)(7)(7)(4)(6)(8)(6)(3)(7)(8)(5)(9)(11)(15)(20)(19)(27)(18)(23)(15)(47)(57)(45)(19)(22)(25)(22)(20)(22)(24)(27)(32)(11)(10)

我要回帖

更多关于 百度图片是怎么上传的 的文章

 

随机推荐