AL422B的读时序如图7所示。图中RCK为AL422B的读出时钟,周期最大为1 000 ns,最小为20 ns当/RE和/OE有效时,在RCK上升沿数据有效,随着该时钟输人,其内部的读指针自动增加。当单片机的主频为12 MHz,可以用单片机中的ALE/WR/RD合成RCK信号。再利用图像芯片的数据输出特性和单片机的中断功能及AL422B的特点加以解决。对于容量问题,利用AL422B的大存储容量(3M位)就可以满足要求。
3.3下位机程序设计
下位机程序基于AVR Studio环境开发,运行于AVR芯片ATMEGA16L,主要实现配置OV7670Z作参数,读取并传输图像数据的功能。首先对AL422B, OV7670进行初始化,通过SCCB总线配置OV7670的寄存器,使其输出RGB565格式图像数据,存储到缓存芯片AL422B,由ATMEGA 16L将图像数据传送到车载PC,下位机程序流程如图8所示。
4系统调试与试验
采用帧率CMOS摄像头OV7670采集驾驶员的脸部图像,并以6s作为一个检测周期(时间取太短,误警率会增加;时间取太长,则不能及时报警),并每隔0.33s取1帧图像(即每秒取3帧图像)进行疲劳检测,每个检测周期中包含18帧图像。由于已经实现了对驾驶员眼睛状态的识别,则可以通过统计一个检测周期内,驾驶员眼睛闭合状态的帧数和周期内总的帧数,得到驾驶员的疲劳指数,即:PERCLOS=闭眼帧数/总帧数X 100%。开眼帧与闭眼帧的二值图与灰度投影如图9所示。
根据前面介绍过的PERCLOS方法,当PERC-LOS大于指定阈值40%时,则判定驾驶员处于疲劳驾驶状态,并给予驾驶员预警信息。
5结束语
基于以上硬件与软件的设计,实现了AVR单片机对CMOS摄像头OV7670的配置,用AL422B存储并转发图像数据,将图像数据传送到车载PC,并利用上位机软件实现了图像数据的处理。系统运行良好,很好地识别了人眼的位置及状态,并能够根据图像信息判断驾驶员的疲劳状态,给出有效的预警。