tag 标签: ov2640

相关博文
  • 热度 21
    2014-9-2 12:01
    1227 次阅读|
    0 个评论
    作者: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):     继续阅读: http://www.iwiznet.cn/blog/?p=6408   WIZnet官方网站: http://www.iwiznet.cn WIZnet官方微博:http://weibo.com/wiznet2012
  • 热度 18
    2014-9-1 16:41
    2234 次阅读|
    0 个评论
    作者: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) { u8 temp; EXTI_ClearITPendingBit(EXTI_Line0);     //清除EXTI0线路挂起位  if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)==0)return;//HREF管脚为低  temp=(u8)((GPIOC-IDR)8 0x00ff);    //读取一个字节图像数据 switch(jpg_flag)  { case 0:       if(temp==0xff)                      //图像数据以0xff 0xd8开头       {   JPEGBuffer =0xff; jpg_flag=1;       } break; case 1: if(temp==0xd8)       { JPEGBuffer =0xd8; jpg_flag=2; JPEGCnt=2;       } else if(temp!=0xff) jpg_flag=0; break; case 2: JPEGBuffer =temp;  //存储数据 if(temp==0xff)jpg_flag=3; break; case 3: JPEGBuffer =temp;  //图像数据以0xff0xd9结尾 if(temp==0xd9)       { jpg_flag=4;       } else if(temp!=0xff) jpg_flag=2; break; case 4: break;  } } 在中断函数中通过以上程序即可正确读取每一帧图像的数据了。程序思想已经在拍摄照片流程图中体现。 JPEGBuffer 为一个全局的图像缓存区, 在主函数中, 检测到缓存区数据准备完毕后,就可以将图像发送给新浪微博了。 LD3320添加词条程序(摘至LD3320_main.c)   继续阅读: http://www.iwiznet.cn/blog/?p=6408   WIZnet官方网站: http://www.iwiznet.cn WIZnet官方微博:http://weibo.com/wiznet2012
  • 热度 28
    2014-6-5 15:37
    960 次阅读|
    0 个评论
    *本文已刊登在《无线电》2014年第6期 《搭建属于你的在线实时采集系统》中已经对HTML5平台有了初步的认识,并基于此向大家展示了如何将采集到的数据上传至网络,实现实时观测。HTML 5是近十年来Web开发标准最巨大的飞跃。想必你已经体会到了HTML5的便捷之处,为了帮助大家更好在此平台上拓展应用,本文更加深入的探析“智能家居”与HTML5的完美结合,让家庭网络实时监控轻松实现。 关于智能家居  2013年,太多公司包括三星和飞利浦在内都对智能家居动了念头,在CES的展览上三星展示了他们的新型智能清洁机器人,飞利浦的Hue智能LED灯泡,遭众多模仿的Nest的智能恒温器,结合智能控制、智能终端、智能显示的智能家居,将迎来更多创意。 所有这些,都让我们感受到智能家居已经脱离一种概念,进入到了下一个产品化阶段。但从用户的角度出发,更多人还是希望体验智能家居最基本的安全保障,便捷、经济、实用依然是多数人关注的主题,所以家庭远程监护无疑得到更多青睐,特别是家中有老人、孩子,或者是你的宠物,发生了紧急状况,怎样才能第一时间得知情况并避免事故的发生?    图1 家庭监控系统示意图 (图片来自:http://dynews.zjol.com.cn/pic/0/11/43/44/11434423_934000.jpg) 从此角度出发,我想到DIY一个家庭网络实时监控系统,用手机或电脑连接网络,就能看到家中各个角落的情况。今天我们介绍的内容就是,用一个摄像头 + 一块单片机就可以搞定的家居网络实时监控,搭载html5平台,实现更佳效果。 关于HTML5—WebSocket数据传输 网络实时访问,图像画质是否能够达到理想值呢? 以前的web界面在数据采集显示方面,都是采用的轮询方式,数据及时性不好,如果轮询过快,不但加大浏览器的负担,而且可能达不到你想要的效果。这次之所以选择HTML5,由于新增的websocket API函数,几乎完美的解决了实时性的问题。 那么介于我们是采用单片机,将采集到的数据上传至网页,所以可负载的数据量收到缓存大小的限制,为解决此问题, 我们将采集到的视频数据直接输出JPEG格式的图片,暂设播放速率设置为5帧/秒,即画面每秒切换5幅,如此我们就可以实现视频的观看了。   网络摄像头系统演示 系统环境 a) 单片机:STM32F103RC,256K字节Flash,48K字节SRAM,2K字节EEPROM b) 以太网控制器:W5500,SPI接口与单片机相连 c) 电源:USB供电 d) 硬件外设:OV2640摄像头 图2 W5500EVB与OV2640摄像头连接图 开发工具: IAR for ARM v5.41,这是我们工程所使用的版本。如果使用不同版本的IAR,请对STM的库稍作调整。 看代码之前,我们还是先来了解一下整个的程序流程,流程图由一个主流程图和两个子流程图组成。如下图所示,程序采用轮询机制来处理请求和图像数据。在硬件初始化完成之后,将进行网络参数配置,这是要根据自己网络的情况来配置W5500的IP地址等网络参数,确保W5500能连接外网;本程序中,我们会使用W5500的两个socket资源,一个用来创建Http Server,这样在浏览器上输入配置的IP地址,浏览器作为客户端就能远程访问我们的硬件了;另一个用来创建Web Socket Server,与网页端建立通信链路,用来传输我们的摄像头图像数据。   图3 系统主流程图                                   图4a Http处理函数流程图              图4b WebSocket处理函数流程图   当我们在浏览器**问硬件的IP地址,会向W5500发送http请求,W5500在收到请求后将html5的网页程序发送给浏览器,在网页程序中,浏览器会主动与硬件建立WebSocket连接。在完成握手操作后,图像传输的数据通道即建立了。这样每当硬件轮询到新的图像准备好后,就会通过WebSocket将图像数据发送给浏览器,浏览器收到数据后,在界面上绘制图像。实际效果图请见图5。接下来将对摄像头的初始化和图像数据缓存程序,html5中在画布上绘制图像的程序以及WebSocket数据传输程序做详细介绍。 图5 系统浏览器端效果图 OV2640 介绍 1.OV2640 硬件简介 图7 OV2640摄像头 OV2640像素输出最大支持200万像素,支持QCIF(176*144)、QVGA(320*240)、VGA(640*480)、1027*768、1600*1200等像素输出。 继续阅读:http://blog.iwiznet.cn/?p=6289 程序下载地址:http://wizwiki.net/forum/viewtopi c.php?f=91t=733
相关资源