61011118基于摄像头的自动识别系统

发布者:系统管理员发布时间:2013-10-10浏览次数:2

基于摄像头的自动识别系统
         学号:61011118
          姓名:李臻
1、申请题目:
n      题目,命题描述
    以XILINX公司的FPGA开发板为平台,配以OV7620摄像头外设,使用Verilog—HDL语言进行编程,实现一个基于摄像头的自动识别系统。此系统可以实现两种模式:1. 当有人进入摄像头的监控范围内时,摄像头会自动识别出来,LED灯会闪烁报警;2. 当有人在摄像头范围内时,照明灯会一直在照明(LED灯模拟),当人离开摄像头范围之后,照明灯会自动关闭。
 
2、课题背景:
n      存在问题、应用背景
    为了适应现代电子技术飞速发展的需要,更好地培养21世纪的应用型电子技术人才,在自动化技术日趋成熟的今天,如何以比较低的成本实现对区域环境照明电路的控制,这就是我们现在研究的课题了。照明电路不仅用在工业生产中而且已渗入到人们工作和生活的各个角落。几乎是从小到生活照明,大到工业控制,照明电路都起到了举足轻重的作用。自动感应照明控制系统有力地推动了各行业的技术改造和产品的更新换代,应用前景非常广阔.
目前,在各类学校教室的照明灯由于管理不善,经常是教室空无一人,却灯火通明,极大的浪费电源。而各类电子设施有时因为某些因素(例如安全)而设置地不易进行操作。为了更好更方便地利用起教室,同时节省资源,我们设计了这个关于教室照明系统的自动控制装置。具体而言就是通过判断教室中有没有人,发出电信号来控制开关以达到教室智能化管理来节省能源。这样的系统开发在诸如家庭防盗等其它地方也大有用处,因此意义重大。
 
 
3、项目规划:
n      功能,指标、规模
对于项目的功能来说,主要有以下几点:
1.      摄像头自动采集图像。供电后摄像头可以自动采集图像,然后根据帧中断、行中断以及像素中断来采集所需的图像信号。
2.      自动比较识别。系统可以自动的识别摄像范围内的移动物体(主要是人)。
3.     可调性。可以根据设备所处环境的具体情况来调节系统参数,以达到最好效果。
4.     两用性。设备的人机交互主要是通过LED灯来实现的。所以对于系统来说就可以有两种应用了:LED灯作为报警灯,但凡有人进入便进行报警;LED灯作为教室中的照明灯,但凡有人从摄像头区域离开,便自动关闭LED灯。
对于指标来说,主要就是系统自动识别的灵敏性与稳健性。灵敏性是指针对报警器来说的,但凡有人进入,便会立刻报警,识别时间一定要短。稳健性是指此系统是针对人来设计的,比如进入一只猫就可以不报警,这就需要对外界的干扰有足够的抗干扰性。
规模来说,主要是基于XILINX公司的FPGA开发板与OV7620摄像头。
n      面板(显示)、操作、规则
面板显示:主要是用LED灯来模拟的。在实际情况中,作为报警器要使用功率较大的报警灯,作为智能教室来说要使用日光灯。由于条件有限,所以均使用FPGA开发板上的LED灯来模拟了。
操作:由于此系统为一个自动识别,自动控制系统,所以系统工作的全过程中均不需要人为的操作。需要操作的知识系统的使能开关(开发板上的滑动开关模拟)。
规则:系统为自动识别系统,全自动化,不需要用户考虑太多。
n      输入、输出接口
    对于输入,输出接口来说,本系统只用到了输入接口。主要是使用开发板侧面的JC接口,直接输入图像数字信号。
4、实现方案:
n      核心问题
核心问题主要有以下几点:
1.      图像数据的采集。众所周知图像信号的数据量是非常大的。次自动识别系统要求能够很快的进行快速识别,所以就要求在很短的时间内完成数据的采集。这就涉及到两个问题的:开发板的系统时钟频率能否达得到要求?如此大的数据量能否有足够的存储器来存储?
    另外,如何采集也是一个很大的问题。由于之前没有接触过任何有关摄像头的信息,所以对摄像头的工作方式,输出信号的方式等等都一无所知,所以在一开始这就成为的最大的问题。
2.      图像数据的处理。采集到图像数据之后,采用什么样的方式进行处理?是一个一个数据点进行比较,还是比较一段时间数据的平均值?怎样才能够做到才保证可以顺利完成数据处理的情况下尽量减轻系统负担,提高系统运行的速率。
3.      比较晚图像信号之后后续的电路应当怎样设计?系统终端怎样设计才是合理的?
n      解决方案
针对核心问题,实现方案主要有以下几点:
1.    对于摄像头的研究。
由于之前并未了解过摄像头,而此次系统设计的最关键的部分就在于摄像头的使用,所以用好摄像头就成为了重中之重。
首先,市场上摄像头种类繁多,优缺点各异,选择哪种摄像头呢?经过查阅资料,最后划定了OV7620与OV7670两种型号。再经过仔细研究得知,OV7670和OV7620都是彩色摄像头,其感光像素为640*480的数字摄像头。他们之间有很多相似的参数,但是最大的不同就是,OV7670的像素输出格式为RGB565,而OV7620的像素输出格式为YUV422。具体来说,RGB是组成彩色的三基色,要想显示一个像素的颜色,每个像素都需要3个BYTE数据的R、G、B来表示,显然这是不利于我们处理数据的,过于复杂了。对于YUY来说,Y为灰度,UV为色差。如果是表示一副彩色图像,同样的道理,YUV444是无损的存储方式,但是需要3个字节,存储空间开销很大。由于Y分量比UV分量重要的多,因此人们用YUV422来表示。这样一来图像被压缩了很多,一个字节就可以表示其彩色的信息。对于OV7620,它有2 组并行的数据口Y[7..0]和UV[7..0],其中对于数据口Y[7..0],输出的是灰度值Y,对于UV[7..0]输出的色度信号UV。下图给出了k 个像素(K 个字节)输出的格式。
 
                             图1
                  显而易见,对于此系统的数据处理,由于灰度值是从0到255变化的数值(白色为255,黑色为0),所以使用灰度值是最佳的方案了。也就是说,我们只需要使用OV7620的Y输出口。
                  
                                  图三:ov7620实物图
     由此,我便确定了使用OV7620。下面具体讨论OV7620的工作原理。
             OV7620使用的是NTSC制,其图像输出频率是60HZ,即每秒60帧。然后再利用行、列的扫描。来完成图像数据的采集。具体来说图像输出的控制是采用场中断信号VSYN行中断信号HREF、像素中断信号PCLK来控制的,每秒60场,每场240行,每行640个像素点。所以可以看出数据输出频率是非常高的,所以搞清楚其中时序关系是关键。下图是三个中断信号的时序关系图:
 
 
     
                                    4
              其中,VSYN 的周期是16.64ms,高电平时间为换场时间,约80us;低电平时间内像素输出。我们在采集VSYN脉冲时,既可以采集上升沿,也可以采集下降沿,采集下降沿更准确些,这也是一场的开始。从VSYN的周期可以算出,1s/16.64ms=60帧,OV7620的帧率是60/s HREF的周期63.6us,高电平时间为像素输出时间,约47us;低电平时间为换行时间,因此采集HREF一定要采集其上升沿,下降沿后的数据是无效的。从HREF的周期可以算出,16.64ms/63.6us261,除去期间的间隙时间,可以算出每场图像有240行。 PCLK的周期是73ns,高电平输出像素,低电平像素无效。PCLK是一直输出的,因此一定要在触发VSYN并且触发HREF以后,再去捕捉PCLK才能捕捉到像素数据。从PCLK的周期可以算出,47us/73ns640,可以算出每行图像中有640个像素点。
 
 
2.    图像数据采集方案
搞清楚了摄像头的工作原理之后,就是设计图像数据采集方案了。摄像头的
         功能是比较强大的,要全部利用好是非常不容易的。但是,对于此数字系统,我们需要全盘利用吗?为此我在FPGA开发板上设计了一个测速表。具体就是用分频器将输入信号进行分频,然后把每一个数量级(每秒100个数据到十的八次方个数据)的数据输出都绑定到一个LED灯上,由此来估算数据量。作为测试,我一开始只把图像数据的最高位接到了输入端。我们知道,对于8位灰度值来说,纯白是255,纯黑是0,而在我们的大环境中,无论是白天还是黑夜(有日光灯),都是亮色为主,所以就最高位来说,大部分的像素点对应的数值都是1。利用测速表进行试验之后发现,在室内环境下,一旦摄像头范围内出现人这样大小的移动物体,最高位出现1的频率会有较为明显的下降,这就完全达到了设计要求,于是就暂定采取这种方式来继续设计。
 
 
3.    图像数据处理方案:
在上一个部分提到过,通过在开发板上设计的测速表,我了解到通过对像素灰度值最高位的处理是完全可以识别出一个人所带来的灰度值变化的。所以不需要使用全部8位灰度值。要识别出灰度值的变化,就需要将前后获得的图像数据进行对比,这就带来了几个问题:通过怎样的形式来对比得到的图像数据?间隔多久获取一次数据?一次采集多少数据?这些问题都是很关键的,对于这些问题的处理直接影响到了系统的性能与复杂度。
首先是图像数据的对比方式。如何进行对比呢?吧每一个像素点的数据都加以对比吗?这样做是不可能的,每一帧都有数百万的数据进来,将他们一一对比是不可能做到的。况且,我们需要如此的精确吗?我们要识别的是一个人,不是一直小虫子。所以就考虑了一种近似的做法:求和。
具体来说,就是将一段时间的灰度值最高位的值进行求和。在本系统的最终方案中是每隔3秒采集一次数据,每一次采集一秒钟。从上面的分析我们可以知道,每一秒中会有60帧图像,将60帧的图像的灰度值最高位进行求和,大致上就完全可以反映图像黑白分布情况,也就是白的区域占了多少,亦或黑的区域占了多少。我们并不需要关系这黑、白区域都在哪里。
分析到这一步,很明显我们要对比的就是每一个采样周期内所得到的和。对此,首先设计了一个变量count,让其在采样时间段内不断地坐着count=count+y这样一个操作,其中Y为灰度值最高位的值。再将其赋给count1,也就是说,上一个周期的和值就储存在了count1中,储存完毕就就将count清零,在这一个周期重新求和。然后在这个采样周期的最后一刻,求出差值D=count1-count;在处理这个D值就可以了。
很显然,如果图像中没有人进入,这个D值是基本保持稳定的。对于每一个固定的环境,就会有一个特有的D值。这个可以由用户进行一次测试来获取。然后处理这个D值。去一个正整数A,如果D的绝对值大于A的话,我们就认为图像有较大的改变,就认为图像中有人进入,反之摄像头范围内就没有人。那么这个A值是如何确定的呢?这个A值也是可以根据用户的需要来设定的。很显然的道理,A值设的较大,误差容限就大,如果人距离摄像头较远,图像灰度值改变较小,故摄像头就难以识别出人的存在。所以要想使摄像头识别的灵敏度提高,就适当地降低A值,扩大监测范围与监测距离。值得注意的是,A值不能取的过小,因为在没有人进入的情况下每一个采样周期的count值也都是有细微变化的,所以D值是大于零的,如果A值取得过小,就很容易使D值大于A值,从而在人没有出现的情况下也做出人出现的反映。
以上的A值,D值都是因环境而异的,用户可以在使用的环境内做一两次小实验,根据自己的需求来获取。开发板上设计的粗略的测速表就是这个用意。
       
 
4.     后续电路处理
对于后续的电路,有了前面信号处理的基础,处理起来就非常容易了。由于条件有限,所以后续的报警灯与日光灯用LED灯来模拟。作为报警器的时候,LED亮表示有人进入摄像头区域;作为智能教室设备时,LED灯亮则表示有人出于教室之中。
5、系统结构:
n      系统框图
 
 
 
 

摄像头
图像信号采集控制
图像信号对比处理
LED灯控制电路
图像数据测速
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
n      模块功能描述
1. 摄像头
采集图像
2. 图像信号采集模块
通过控制时钟来控制采样周期,采样时间
3. 图像数据测速模块
粗略测量一个采样周期中白色像素分布的情况,方便用户调节系统参数。
4. 图像信号对比模块
判断摄像头范围内是否有人
5. LED灯控制系统
控制LED灯
 
n      模块接口标注(参数、协议)
FPGA开发板的输入输出的实际连线与管脚表
输入输出名称
芯片引脚号
实验箱标注
钉子线连接
y
AA12
JC7
p
Y11
JC8
clk
D11
CLK
led
R7
LED11
CLR
V5
K0
S
T8
LED10
L
U6
LED9
L1
AA4
LED8
L2
AB3
LED7
L3
W1
LED6
L4
AB4
LED5
L5
Y3
LED4
L6
Y1
LED3
L7
Y4
LED2
L8
W3
LED1
 
 
 
6、状态流程图:
n      系统工作状态流程
        
 
 
7、课程设计总结
n      预期的目标与当前实现功能的差异详细注释
本次课程设计基本完成了项目申请中的全部功能,性能良好。由于硬件条件有限,所以终端的外设,例如报警灯和日光灯均用开发板上的LED灯来模拟了。
n      可以进一步发挥提高的部分
下一步可以做更加详细的识别。例如不仅仅是识别有没有人,而是识别这个人是谁,即通常所说的人脸识别,这样的好处是报警灯可以根据识别结果有选择的报警,而不是遇到人就报警,这样可以扩大产品的应用范围。
n      课程设计体会
可以说,此次的课程设计进行的是有些艰难的。困难重重,所以收获也颇丰,主要有以下几点体会:
1.      对于硬件部分的体会
此次课程设计中我使用了摄像头这一外设。由于在开学初的课题申报时,知识储备还不够全面,也没有来得及做很多的调研,知识天马行空地想到了做摄像头识别方面的内容,盲目地报了这个题目。报完题目之后,我一仔细考虑项目的实现方法就傻眼了:摄像头是怎样用的?如何采集信号的?输出的信号时什么?是什么格式?如何将摄像头输出的数据输入开发板?输入的方式是什么?等等这些问题我都一无所知。摄像头的使用是我的课程设计的关键部分,所以必须搞清楚摄像头的使用。首先要选择合适的摄像头。市场上的摄像头可谓种类繁多,各式各样,要选择适合这次课程设计使用的摄像头着实不易。最终,在多方比较下,在以前做过智能车竞赛的同学的指导下,选择了OV7620摄像头。接下来就是苦苦地钻研摄像头使用方法的过程了。OV7620的数据手册非常的长,还十分难懂,各种各样的同步信号的时序让人眼花缭乱。其他的介绍资料也是非常稀少。本来这学期的课程就非常繁多,任务非常重,所以学习摄像头的过程可以说是非常辛苦。不过,最终我还是完全搞清了摄像头的使用,真的很有成就感。这也锻炼了我的自学能力和自我探究能力。
2.      软件部分的体会
其实这次软件部分并没有遇到很多困难,我想,这主要归功于其中编写大系统的过程中以及完全掌握了Verilog-HDL这门语言。软件部分的编写完成的比较快,出错也很少,比较顺利。
3.      对于课程的建议
我觉得,数字系统这门课是非常好的,可以很好的锻炼学生的自我学习和自主探究的能力。就我自己的感受来说,我觉得我对于我这学期的数字系统这门的课所完成的事情很有成就感,感觉学到了很多,也培养了自己面对困难不屈不挠的精神。但是,一个学期做下来,我也对这门课程有着一些建议。对于吴健雄学院的学生来说,大二下的课程繁多,任务极重,可以说超出一般院系很多。在这样的情况下去完成数字系统设计这样的任务,而且是从一无所知开始自主完成,真的是太不容易。由于不肯能把所有时间都分配给数字系统设计,所以最终设计出的作品多多少少不能完全反应自身的真实水平。所以我建议把这门课放在其他学期,或者短学期,这样我们就有了更充裕的时间,自然也就可以做出更加完美的作品。
            
8、参考文献
[1] 王金明,杨吉赋.数字系统设计与VerilogHDL[M].北京,电子工业出版社,2001
[2] 李辉. 基于VerilogHDL的数字系统设计 [M].西安,西安电子科技大学出版社,2008