基于STM32的车牌识别系统外文翻译资料
2022-12-28 16:53:58
基于STM32的车牌识别系统
摘要
本文设计了一种基于STM32的手持式车牌识别系统。在本系统中,以STM32F103RBT单片机为主要控制芯片,OV7670摄像机用于图像采集,通过分析确定车牌区域以二进制方式的跳转点,然后通过字符的分割和匹配获得车牌识别结果。最后,通过Keil软件编程实现手持式的车牌识别系统。
关键字词
车牌识别;嵌入式;字符分割
1.简介
目前,随着私家车的数量逐年增加,经过有时会发生违反法规的情况。只依靠现有的人流设施与交通运输系统,解决当前复杂的道路交通事故还很遥远[1]。车牌识别是智能交通系统中的一项关键技术。车牌识别在道路监测和道路控制中起着至关重要的作用。本文设计了一种基于STM32F103的车牌识别系统。识别原理对车牌图像采集和字符分割进行了详细的分析,设计了一个完整的系统并通过Keil软件实现。最后,验证了该方法的可行性。[2]。
2.系统方案
整个车牌识别系统主要包括图像采集,二值图像处理,车牌区域识别,车牌字符分割,字符匹配。本文设计的系统具有三个设备:图像采集设备,图像处理设备和图像显示设备。本文采用基于ARM Cortex-M3内核的STM32F103芯片为核心的设计平台。它具有较高的处理能力,并且可以执行相对复杂的操作计算,基本满足设计需求,显示设备采用TFT_ILI9341 2.8显示屏。基于以上框架,本文研究了车牌的研究与实现。基于STM32的识别系统[3]。在此之前,我阅读了各种与算法有关的文献关于车牌识别和字符识别的知识,我对STM32芯片非常熟悉并能够熟练地应用它。最后,获得了成功的车牌识别信息传输到TFT显示屏。车牌区域识别和字符分割都是基于跳点划线的方法确定字符边界和车牌区域。软件流程图显示在图2.1。
图2.1软件流程图
3.系统硬件设计
3.1最小系统设计
系统的电源为DC5V,与STM32核心板的5V引脚相连。STM32核心板通过稳压芯片AMS1117将电压从5V变为3.3v,并输出电源。3.3v能量是STM32芯片、摄像头模块和TFT彩屏的电源电压。焊接电路时将摄像头模块和TFT彩色屏幕连接到3.3V引脚而不是5V引脚[4]。
图3.1系统电源设计示意图
本文的处理器是STM32F103RBT,这是一种32位高性能嵌入式具有ARM Cortex-M3内核的微控制器芯片,具有成本低、资源丰富、功耗低、模块化电路设计等优点。图3.2和图3.3分别为STM32主板和单片机的原理图。
图3.2 STM32主板
图3.3单片机示意图
3.2图像采集电路的设计
与其他相机相比,OV7670具有优异的优势。OV7670是由OV(OmniVision)设计的1/6英寸VGA CMOS图像采集传感器。它不仅具有体积小、功耗低的优点;而且具有图像处理器和VGA摄像头的全部功能,可以弥补甚至完全修复尾托、色散等光电缺陷。
本文所设计的主控芯片STM32由SCCB总线控制,能够以子采样、窗口采集、全帧等多种方式输出多分辨率的8bit图像信息。它可以以每秒30帧的速度输出VGA图像。图3.4是OV7670摄像机。图3.5是摄像机示意图。
3.3系统显示设计
本系统显示部分采用2.8英寸TFT模块,支持8/16位数据长度,支持240times;320像素的RGB565格式。此模块的数据长度默认设置为8位。16位数据长度可在叶片背面的R11缩短或用0欧姆焊接后使用电阻器,在驱动程序部分,您只需要在类似的LCD驱动程序中更改相应的宏定义。与黑白图像相比,彩色图像的特点是数据量巨大。如果选择8位接口,传输速度将比16位并行接口慢得多。
图3.4摄像机的物理图像
图3.5摄像机示意图
图3.6 TFT显示屏
4.系统软件的设计与实现
4.1 STM32开发环境简介
本文以Keil为arm开发平台,对系统的软件部分进行了集成开发。这是美国Keil软件公司推出的一个针对各种嵌入式ARM单片机和微处理器的C语言集成开发环境,包括C/C 编译器、项目管理器、ARM汇编程序和连接器,开发人员可以从Keil中选择编译器和其他编辑器。然后分别由Keil和Keil编译器编译目标文件。标准十六进制文件由ABS文件通过oh51转换,因为在源代码级调试时,调试器scope 51或scope 51需要使用十六进制文件。它还支持直接使用仿真器或直接下载到程序内存。与其他arm开发环境相比,Keil不仅具有操作简单、界面友好、目标代码效率高、汇编代码简单等优点,而且在编译大量代码时体现了高级语言的可维护性。
4.2 STM32 ARM-Cortex软件架构
STM32是一种基于ARM cortex内核的嵌入式微控制器,其微控制器软件接口标准为m cortex处理器,不受厂商间差异的影响。使用CMSIS,可以在处理器和外设之间提供一致、直观的软件接口,减少软件的重用,显著降低ARM皮层编程和操作系统移植的难度。
4.3车牌识别系统的软件设计
图像由OV7670摄像机采集。采集的图像大小为320*240像素,像素格式为RGB565。STM32单片机读取图像,对数据进行特殊处理,然后显示在TFT显示器上[5]。ov7670摄像头模块
配有FIFO芯片,用于临时存储图像。它可以高速获取图像数据,减轻CPU的负担。因此,本文采用先进先出的方式读取ov7670的数据。图像采集过程的主要功能如下:
OV7670_Gpio_Init();//OV7670
Data_Image_Capture();
直方图分析:在采集数据的过程中,ov6670摄像机对图像中的每个像素进行二值化,即设置R、G、B三个阈值,通过二值化处理,将像素值分为两种:全黑0x0000和全白0xffff。同时,利用该程序对每一条直线的跳变点进行了分析。分析跳变点的目的是识别车牌面积。大部分程序如下:
if((Rgt;R_a) amp;amp; (Ggt;=G_a) amp;amp; (Bgt;=B_a))//
{
color=0xffff;
}
else
{
color=0x0000;
}
if(color!=color_1)
{
TableChangePoint_240[a] ;
}
目前,有两种技术可以解决车牌定位问题。首先对二值黑白图像进行一系列处理。第二种方法利用颜色空间距离和相似度对车牌底色进行分割,并对车牌进行定位基于边缘颜色对的图像,本文通过对每一行的跳变点进行二值化分析,由于车牌区域的字符较多,跳变点较为明显,约有15个以上。通过对跳变点的分析判断,可以确定车牌区域的位置。如下图所示,左边的红色标记点是每行的跳转点数。在本系统程序中,跳转点数超过15个。当连续线上有15个以上跳车点时,起始位置设为车牌区域的上边界,结束位置设为车牌区域的下边界。然后通过RGB-HSV颜色转换,识别出车牌区域的左边界和右边界。这样就可以得到车辆区域的精确边缘。一些程序如下:
void ChangePoint_Show_240(); // 240
for(a=0;alt;240;a )//
{
//
LCD_DrawPoint(TableChangePoint_240[a],a,0xf800);
//
if(TableChangePoint_240[a]gt;=15)
{
//
for(b=35;blt;40;b )
{
LCD_DrawPoint(b,a,0x6666);//Green
}
}
}
}
对于240方向跳转点的显示功能,先建立一条参考线,在水平坐标10、20、30处分别在垂直方向画三条绿线,以后再画点。如果这条线上有十个跳转点,在这条线上画一个红点。引入绿线的程序如下:
void ChangePoint_Analysis_240()//240
{
Min_ChangePoint_240=240;Max_ChangePoint_240=0;
for(a=0;alt;240;a )//240:Min_ChangePoint_240,
Max_ChangePoint_240
{
while(TableChangePoint_240[a]lt;=15)
{
a ;
}
Min_ChangePoint_240=a;
while(TableChangePoint_240[a]gt;15)
{
a ;
}
Max_ChangePoint_240=a;
if(Max_ChangePoint_240-Min_ChangePoint_240gt;=15)
{ a=240;}
Min_ChangePoint_240=Min_ChangePoint_240-3;
Max_ChangePoint_240=Max_ChangePoint_240 2;
for(a=30;alt;280;a )
{
LCD_DrawPoint(a,Max_ChangePoint_240,0x001f);
}
for(a=30;alt;280;a )
{
// Normalization
for(a=30;alt;280;a )
{
LCD_DrawPoint(a,Min_ChangePoint_240 50,0xf800);
}
flag_MaxMinCompare=1;
if(Min_ChangePoint_240gt;Max_ChangePoint_240)
{
flag_MaxMinCompare=0;
}
if(Min_ChangePoint_240==240||Max_ChangePoint_240==0)
{
flag_MaxMinCompare=0;
}
if(Max_ChangePoint_240-Min_ChangePoint_240lt;15)
{
flag_MaxMinCompare=0;
}
}
在处理过程中,得到每个字符的左边界K和右边界K。如果字符数为8,则分割更准确。分割后,进行归一化处理。逐个匹配字符。首先提取字符模板并存储在该程序通过模块化的取数软件,其尺寸为单像素的24*50。匹配后,将最大相似度值对应的字符作为输出结果显示出来。车牌识别中的一些主要数组和函数如下:
Stm32_Clock_Init(16);
Data_LCD_ColorChange();
u8 MoShiShiBie_All(u8 begin,u8 end)
{
u16 Compare_num,num_save;
u8 a,b,e,a_save,st1,st2,s1,s2;
int num1;
for(a=begin;alt;end;a ) //36
{
num1=0;
for(b=0;blt;150;b )
{
st1=table_picture[b];
st2=Table[150*a b];
for(e=0;elt;8;e )<!--
剩余内容已隐藏,支付完成后下载完整资料
英语原文共 9 页,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[269888],资料为PDF文档或Word文档,PDF文档可免费转换为Word