tag 标签: 车牌识别

相关博文
  • 热度 6
    2023-12-16 20:41
    933 次阅读|
    0 个评论
    在上周,笔者收到了这本来自北京大学出版社的MATLAB科学计算入门书籍,笔者也是参照书中所写的例程写了些效果;先讲下笔者的情况,笔者现工作的领域为嵌入式AI软件开发工程师,在MATLAB上除了曾在大学大一那阵浅学了一段时间,而后再无接触过因此在读这本书之前,笔者正属于尚未入门的小白,但笔者一直对MATLAB颇有兴趣,便也是接由本次试读活动将MATLAB这一工具重新拾起,那也是在开篇先说总结,这本书无论是从内容深度还是浅显易懂上都是令人拍案叫绝的程度,以至于笔者仅仅只是浅读一阵便对MATLAB的编码方式了然于胸。 笔者既然是嵌入式与AI领域的从业者,那么本着看书先读目录的原则,笔者一下就锁定了两个关键章节-神经网络与图像处理,那么倘若你与笔者同属一个行业那么脑海中一定也同笔者一样浮现了如目标检测 手写识别 车牌识别等等非常经典的实现案例 那么咱们先来看图像处理的部分,在AI时代数据比算法更重要: 书中介绍了imread的图像读取方式与imshow的图片显示方式,咱们得先看到能不能正常读取才能座进一步处理,那么我们仿照实现一下: 那么可以看到imread接受一个路径的参数传入,imshow接受一个图像的参数传入,这与Python非常相像的,当然啦,仅仅是相像,还是有很多编码细节差异是相当大的,既然咱们已经可以读了,那咱们就试试简单的处理: 书中展示了一个rgb2gray(好接地气的函数名啊 )的函数用于实现将图像转换成灰度图的形式,效果如下: 嗯,非常的成功 再试试转二值化,它接受一个图像的传入和一个阈值的传入0-1区间,那我们给它个0.5试试: 文字上的提取非常干净利落,但是基板上就存在一些小问题了,咱们提高一下阈值: 不错,这次就非常干净了,后面我就不配书图了,会把文字都挤走显得难看,只会贴上程序运行与函数讲解: 那么既然实现了车牌的完美二值化,不将它提取出来做个车牌识别那不是太浪费了?那么怎么拆字符呢?我们都知道图像的行是第一个维度,列是第二个维度,对行的求和能得出图像水平上的投影,对列的求和能得出图在垂直方向上的投影,当我们得到了一个图像的投影,就可以找寻规律进行裁切了,那也是通过翻阅查找,得到了sum这个函数,这个函数不止能够接受数字类型的求和,还能传入图像类型的数据进行求和,所得的结果便是我们需要的投影数值,函数规则如下:sum(图像数据, 维度) 但是仅仅计算我们还看不到效果,在Python中有个第三方库matplotlib,这个库可以创建一系列可视化图表,那么在书中29页这有MATLAB自带的plot函数可以实现相同的功能,效果如下: 那么既然已经有了投影我们就可以找到规则并按照规则让其裁剪出我们需要的数据了: 其实也简单,图片中有很多从0到高值的上升沿和从高值骤降到0的下降沿,我们要给定一个规则,比方说我们能从100到0的终点,从0到100的起点就可以提取出文字的边缘了,判断方式如下: 这用了俩函数,一个diff一个find,diff呢是用来计算向量元素之间的差异或数组中相邻元素之间差值的,而find呢是在一个数组里面找到对应满足条件的函数 这下听懂了也听不懂了,说白了,咱们把一张图像的行和列都变成了一堆数组,事实上在MATLAB里面把所有读到的内容都可以当作一堆数组来进行处理(很有数学的风格,不愧是理科的”物理学圣剑”) 前面两个是水平投影的上升沿和下降沿,由于车牌上面的文字通常是等高居中的,因此只需要提取一个值即可,后面则有16个值,对应车牌上的一个点和7个字符的上升沿和下降沿,光说没演示谁懂啊!!!那么咱们还要判断它有没有选对,我们还要做一个事:画框,既然我们从上升沿和下降沿中得到了各个字符的边界,那么咱们只要根据这些值在图上对应的位置画上直线就能很清晰看到框没框对 当然啦,我没找到能在图中画线的函数,但是呢,咱们想一想,既然sum能将图片直接视为数值读入并计算求和,那么我们是不是可以直接在图中改对应区域的颜色数值呢,查了一下还真行! 哈哈,试错了几次还真就给我整成了,那咱们再把其他的都加上,有一个变量多个值的就用for循环(这跟Python还真是相似) 可以看到,除了我的车牌截图有点歪以外,裁剪的那是正正好好啊,那啥也甭说了,给它裁咯! 裁剪其实也简单跟刚刚将对应区域的数值改成白色一样,给它标注好区间就能直接下来咯,咱们先从简单的上下边缘来: 嗯,刚刚好,然后是字符的左右边缘,,咱们是8个字符16个边,对应之前设的变量:verticalRisingEdges和verticalFallingEdges各8个,那么我们只要取其一循环裁切即可: 在这里length是计算verticalRisingEdges的长度,8个数据对应循环8次,从1到8,并创建了一个图像窗口,根据长度显示在子图中,图中的第三个点还是有点太多余了,把它删掉: 这个函数就是把垂直方向的上升沿和下降沿的第三个数据设置为空 这样就好看多了 那么既然我们提取了字符就要做识别了,怎么识别,用CNN啊,怎么实现,先找数据定义网络模型啊,其实跟Python一样,在机器学习上MATLAB也是相当强大方便的,咱们先来找数据,这里我用的是开源数据集characterData,这个数据集是一堆车牌相关字符的二值化数据集,图片大小均为20x20 那么既然有了数据集咱们就把他们先读取进来,这里用到了imageDatastore函数,这是个图像数据读取器: 数据集读取进来了那就要分配训练集和验证集了: 还是28比例 那么数据集既然都有了,咱们也要定义个模型网络,写一写学习率这些参数,模型网络定义如下: 一个输入层 接受一个20 x 20 的图像传入 一个卷积层 hidden1_1,具有1个输入通道,28个输出通道,卷积核大小为5x5。 一个最大池化层 hidden1_2,池化窗口大小为2x2,步幅为1。 一个卷积层 hidden2_1,具有28个输入通道,32个输出通道,卷积核大小为3x3。 一个最大池化层 hidden2_2,池化窗口大小为2x2,步幅为1。 一个卷积层 hidden3,具有32个输入通道,32个输出通道,卷积核大小为3x3。 一个全连接层 hidden4,输入大小为321010,输出大小为65,使用softmax激活函数。 定义完了网络就能开始训练了,还要记得,训练完后保存模型与网络定义: 训练过程,这个训练过程的GUI可不是我实现的,MATLAB自带的,非常酷炫非常直观: 既然训练好并保存了,咱们还要加载模型并推理: 在推理之前,咱们还要对之前车牌截取的图片做一下处理,要知道我们的图可不符合模型需要的20 x 20的需求,倘若直接传入,则会大小不匹配,倘若直接压缩,那么识别精度就会骤降,这就失去价值了,最简单和最实用的办法就是,先扩再缩 先扩是目前咱们的图像是高大宽小: 将它的图像扩成这样: 然后再压缩成这样: 这就不会出先整个字符被压扁无法识别的情况了,代码如下: 既然图像数据处理好了,咱们就可以推理了: 可以看到正确识别了各个字符的属性,只要再加个字典匹配中文字符,这个车牌识别就算成功了 以上是笔者通过阅读《 MATLAB科学计算从入门到精通》后实践结果,该书笔者仅阅读了1个上午,便是在不断试错的情况下实现了这个车牌识别的基础Demo,可见这本书在对新手入门的指导作用还是相当有效用的,也是再次感谢北京大学出版社与面包板社区寄测该书于笔者,使得笔者能够入门掌握该工具的用法,为笔者日后工作添砖加瓦(不瞒各位说,学MATLAB就是防止失业,还能去当个教师教下MATLAB编程哈哈) 这里也是给出作者完整的源代码: 训练代码: % 设置图像文件夹路径 images_folder = '数据集路径'; % 读取图像文件夹列表 folders = dir(images_folder); folders = folders( & ~ismember({folders.name}, {'.', '..'})); % 初始化存储图像和标签的数组 X_train = ; % 遍历图像文件夹列表 for i = 1:length(folders) folder_name = folders(i).name; % 获取文件夹内的图像文件列表 image_files = dir(fullfile(images_folder, folder_name, '*.jpg')); % 遍历图像文件列表 for j = 1:length(image_files) % 读取和调整图像大小 img = imread(fullfile(images_folder, folder_name, image_files(j).name)); img = imresize(img, ); % 将图像添加到训练集 X_train = cat(2, X_train, img); % 将文件夹名作为标签 label = folder_name; % 将标签添加到标签数组 y_train = ; % 输出标签值以检查是否有异常 disp( ); end end % 转换标签为categorical类型 y_train = categorical(y_train); % 显示读取的图像数量和类别数量 disp( ); disp( ); % 定义网络结构 layers = ) convolution2dLayer(5, 28, 'Padding', 2, 'Name', 'hidden1_1') reluLayer('Name', 'relu1_1') maxPooling2dLayer(2, 'Stride', 1, 'Name', 'hidden1_2') convolution2dLayer(3, 32, 'Padding', 1, 'Name', 'hidden2_1') reluLayer('Name', 'relu2_1') maxPooling2dLayer(2, 'Stride', 1, 'Name', 'hidden2_2') convolution2dLayer(3, 32, 'Padding', 1, 'Name', 'hidden3') reluLayer('Name', 'relu3') fullyConnectedLayer(65, 'Name', 'hidden4') softmaxLayer('Name', 'softmax') classificationLayer('Name', 'output') ]; % 定义训练选项 options = trainingOptions('sgdm', ... 'MaxEpochs', 10, ... 'MiniBatchSize', 64, ... 'Shuffle', 'every-epoch', ... 'InitialLearnRate', 0.001, ... 'Plots', 'training-progress'); % 训练网络 net = trainNetwork(X_train, y_train, layers, options); 推理代码: % 加载保存的模型 loadedData = load('trainedModelInfo.mat'); % 获取神经网络模型和训练选项 loadedNet = loadedData.modelInfo.net; loadedOptions = loadedData.modelInfo.options; % 数据处理代码 image = imread('推理图片路径'); image = rgb2gray(image); binaryImage = imbinarize(x, 0.8); % 计算水平和垂直投影 horizontalProjection = sum(binaryImage, 2); verticalProjection = sum(binaryImage, 1); % 判断投影的上升沿和下降沿 3) == 1); 100) == -1); verticalRisingEdges = find(diff(verticalProjection <= 3) == 1); verticalFallingEdges = find(diff(verticalProjection <= 3) == -1); verticalRisingEdges(3) = ; figure; % 循环遍历裁剪区域 for i = 1:length(verticalRisingEdges) croppedImageY = binaryImage(horizontalRisingEdges:horizontalFallingEdges, :); croppedImageX = croppedImageY(:, verticalFallingEdges(i):verticalRisingEdges(i)); width = size(croppedImageX, 2); height = size(croppedImageX, 1); % 计算需要填充的额外像素数量 paddingSize = abs(width - height) / 2; % 如果宽度大于高度,向上下方向填充黑色像素 height paddedImage = padarray(croppedImageX, , 0, 'both'); % 如果高度大于宽度,向左右方向填充黑色像素 else paddedImage = padarray(croppedImageX, , 0, 'both'); end processedImage = imresize(paddedImage, ); image2_uint8 = uint8(processedImage) * 255; % 数据预处理 processedImage = imresize(image2_uint8, ); % 调整大小 % 使用训练好的模型进行预测 predictedLabel = classify(loadedNet, image2_uint8); subplot(1, length(verticalRisingEdges), i); imshow(processedImage); title(char(predictedLabel)); end
  • 热度 14
    2012-8-6 11:36
    1510 次阅读|
    0 个评论
    1.产品概述                                                  海龙威科技长期以来专业于LED频闪灯、LED补光灯、闪光灯的研发与制造,并在LED补光领域取得一流的水平。通过不断的努力和创新,公司在高流明定向照明LED封装技术和光学系统领域取得先进成果,先后获得多项国家专利。并将所取得的成果应用到智能交通补光灯产品中。ITS-CR32xx系列LED频闪灯具备多种触发信号接口,能够自适倍频插帧与相机帧同步频闪,高速频闪防眩目设计,有效的避免氙气闪光灯的炫目现象,消除对驾驶员的干扰,产品有防长亮,防浪涌等保护功能。兼容多种控制信号,几乎可与市面上所有智能交通相机完美同步频闪,同时还可以通过软件与PC或相机远程控制,快捷配置设备的各种参数。精确控制LED频闪灯的有效脉冲宽度,时间精度可以精确到微秒级,能够精确控制辅助光源的亮度、频闪周期、亮度级别等参数。具有断电记忆功能,良好的散热设计,大大提高LED光源寿命,提高光源的工作效率。是电子警察系统、治安卡口系统、收费站监控系统、车牌识别等智能交通高清摄像机理想的补光设备。http://www.herowei.com 2.功能特点                                                  ●经实测,ITS-CR32xx系列LED频闪灯与输出能量为300J的氙气爆闪灯具有相同的亮度,但ITS-CR32xx系列LED频闪灯克服了氙气爆闪灯寿命短闪光次灯有限,回电时间慢,不能配合摄像机录像补光的缺点 ●采用高性能ARM处理器,设备响应时间≤6us ●支持以频闪频率0-100Hz范围内,占空比≤40%连续工作。 ●ITS-CR32xx系列LED频闪灯在视频模式下可以进行频闪补光,在触发抓拍模式下可以进行强亮补光,适用于单、双码流相机,支持地感线圈、视频检测、地磁、雷达等车辆检测方式 ●光偶隔离无源同步输出能联动多台补光灯频闪补光,当单台补光灯无法满足补光效果或用于多车道补光时,特别是针对夜间监控高速行驶的车辆的高清卡口项目,由于相机的电子快门速度较快,曝光时间较短,联动多台补光灯频闪补光是非常有用的 ●高速频闪防眩目设计,消除光污染,节能环保,工作寿命可达5年以上 3. 技术规格                                                 3.1基本参数   设备型号 ITS-CR3210 ITS-CR3225 光照角度 支持10度(单车道) 支持25度(双车道) 日夜功能 支持环境亮度检测,低照度下自动开启 同步接口 1路抓拍触发输入,1路频闪触发输入,1路频闪同步输出(开关量) 视频同步 支持视频帧同步补光功能 抓拍同步 支持抓拍同步曝闪补光功能 用户接口 USB接口1路,RS485串口1路,支持PC或相机连接 参数配置 支持内部参数设置,如日夜功能开启阈值、频闪延时、闪光频率、有效脉冲占空比等 在线升级 支持USB或RS485串口软件升级 处理器 SAMSUNG S3C2440  ARM9,400MHz 响应时间 ≤6us 供电 支持市电AC110-220V供电 峰值功率 400W 平均功率 默认40W,实际功率和控制方式相关 工作环境 工作温度-35℃-60℃,工作湿度10%-90% 防护等级 IP65 整机重量 4.0KG 安装方式 支持多种安装方式(护罩、支架选配) 3.2 LED频闪灯瞬时照度分布                                                 4. ITS-CR32xx系列LED频闪灯接口电路原理图                                                                                   5.接线说明                                                  5.1供电接线   功能 棕 蓝 黄 AC220V 火线 零线 接地 5.2触发接线   功能 黄 蓝 橙 棕 红 黑 绿 白 无源开关量触发频闪 开关+ 开关-             电平触发频闪     电平+ 电平-         电平触发暴闪         电平+ 电平-     无源同步输出             开关+ 开关- 5.3接线注意事项 a.不同品牌、不同型号的智能交通相机的触发方式不尽相同,我公司均可配套相应的接口电路。 b.无源同步输出功能用于同步一台或多台补光灯,当单台补光灯无法满足补光效果或用于多车道补光时,需要应用该功能,接线的方法是用与摄像机或与外部触发源相连接补光灯的绿线、白线,分别与独立补光灯的黄线、蓝线相连接(绿——黄,白——蓝)。 6.参数配置                                                  6.1软件安装与硬件连接 在PC上安装设备配套的《ITS-CR32xx系列LED频闪灯参数配置软件》,通过USB或RS485与PC连接。 6.2参数配置软件介绍                                           a. 串口设置: ■可以更改选择合适的COM口和波特率 b. 参数设置: ■ 频闪频率的设置: 通过软件可设置LED频闪灯在1-100Hz频率范围内倍频补光。 设置要求: ●频闪频率应为相机帧率的整数倍 ●应高于40Hz频闪,以消除对人眼的刺激,设备默认是50Hz闪光 ●为消除对驾驶员的光照刺激和降低LED频闪灯的发热量,延长LED频闪灯的使用寿命,建议取等于或接近50Hz频率闪光 ■占空比设置:能设置LED频闪灯每次亮灯的时长,支持1-40%占空比设置,设备默认为20%,占空比的设置必须结合相机的电子快门时间。为达到与相机电子快门时间相同,建议采用以下公式进行设置: ●计算公式:电子快门时间/每个频闪脉冲波长=占空比 ■频闪延时设置: 当LED频闪灯检测到相机给出的频闪信号后,通过设置该项,能按需要延时频闪,支持0-5000微秒频闪延时,设备默认为无延时 ■曝闪时间设置: 能调节抓拍所需爆闪的时长,支持1-1000毫秒时长设置,设备默认是4ms ■开启所需照度设置: LED频闪灯支持环境亮度检测,在0-1000000Lux照度范围内可设置LED频闪灯开启所需的照度环境,设备默认不检测照度环境,由相机直接控制 c.参数显示: ■频闪脉冲有效时间: 指LED频闪灯每次闪光的时间,点击“刷新显示”即可显示出来。 ●计算公式:1/频闪频率×占空比=每次闪光时间 ●通过设置“频闪频率”和“占空比”可以改变频闪脉冲有效时间,一般取值与相机电子快门时间相同 ■频闪脉冲间隔时间: 指相邻两次闪光的间隔时间,点击“刷新显示”即可显示出来。 计算公式:1÷频闪频率=频闪脉冲间隔时间 7.结构外形尺寸                                                                   单位:mm a:290  b:200  c:80  d:95  e:120   8.安装方法                                                                                             LED频闪灯建议安装杆件高度在5.0米至6.5米之间,照射距离为距停止线12至30米为效果最佳。 9.有毒有害物质参照表                                          部件名称 有毒有害物质或元素 铅(Pb) 汞(Hg) 镉(Cd) 六价铬 (Cr VI) 多溴联(PBB) 多溴二苯醚(PBDE) 机构材 ○ ○ ○ ○ ○ ○ 电路板组件 ○ ○ ○ ○ ○ ○ 线材/AC适配器 ○ ○ ○ ○ ○ ○ 附件/包装 ○ ○ ○ ○ ○ ○   说明: ○:标示该有毒有害物质在该部件所有均质材料中的含量均在SJ/T11363-2006标准规定的限量要求以下; ×:标示该有毒有害物质至少在该部件的某一均质材料中的含量超出SJ/T11363-2006标准规定的限量要求。    
  • 热度 20
    2012-4-18 11:32
    856 次阅读|
    0 个评论
    型号:QY-LPR200A 产品简介:        QY-LPR200A嵌入式车牌识别仪,是我公司自主研发的高科技产品,采用德州仪器(TI)达芬奇双核架构,支持linux2.6操作系统, 采用了具有业界先进水平的牌照识别核心软件、先进的图像分析、处理及控制技术,是智能交通系统前端系统的核心基石。        QY-LPR200A嵌入式车牌识别仪,前端接入摄像机设备可对通过监控路段的机动车辆进行独立完成图像采集、车牌识别、车辆检测、车辆信息记录、识别结果存储、识别结果网络上传等工作,同时我们提供完善的PC端应用软件,信息记录、信息查询、手动识别方便快捷,被广泛的应用于治安卡口、车辆收费、移动稽查、计重收费和超限治理、停车场管理等领域,为实现交通管理自动化、智能化提供了极大的支持和有力的保障。 产品特点: a、嵌入式系统设计 LINUX2.6嵌入式操作系统,高速ARM、DSP双核处理核心,速度快,系统稳定可靠,数据高度安全;b、优秀的识别算法 系统采用世界先进的物体检测及特征提取技术,识别速度快、识别率高,支持识别国家标准全部车辆牌照,同时可以识别车牌号码、车牌颜色、车型等;c、超高捕获率和识别率、超短识别时间 捕获率≥99%,识别正确率≥95%,识别时间小于10ms,能够实现逐帧识别;   d、信息处理功能强大 单系统可实现图像抓拍、牌照识别、图像压缩、车牌切分、图像本地存储、图像远程传输等多种功能;e、数据前端存储 支持本地存储功能,当网络中断时将数据暂存到识别仪携带的存储设备(SD卡、U盘),避免丢失,网络恢复后,自动或通过指令上传本地数据f、模块化硬件和软件 支持客户端软件二次开发,独立工作,不干扰收费计算机,保障了收费系统的稳定性,同时模块化设计故障时可快速更换,系统迅速恢复正常。g、快速专业的服务 自主知识产权保障快速响应,满足客户订制需求,专业服务团队良好配合、高效服务客户。h、安装简单、成本低 配置专业金属外壳,体积小可以安装在系统中的任何位置,与工控机识别系统相比更稳定,成本更低。   产品外部接口: ◆视频输入及输出接口 ◆3路RS232串口 ◆4路报警输入接口 ◆2路报警输出接口, 可支持摄像补光设备控制 ◆标准10/100以太网接口 ◆高速USB 2.0 Host接口 ◆大容量SD卡本地存储接口 ◆电源接口 技术指标: 号牌识别范围 “GA36-92”(92式牌照)和“GA36.1-2001”(02式牌照)标准的民用车牌照和97式、04式新军车牌照与07式新武警车牌照的汉字、字母、数字、颜色等信息。支持标准双层牌、摩托车尾牌、粤港澳两地牌识别 号牌识别率 白天≥98% 夜间≥95% 识别正确率 白天≥95% 夜间≥90% 标准距离 摄像机到到触发点的车辆之间的距离为4.5米为佳 晚间照明 夜间抓拍需200W或以上的泛光灯 图片大小 704x576 像素JPG格式 牌照尺寸  最佳牌照尺寸  输出信息 车辆特征图像、全景图像、车牌图像          牌照号码、颜色、类型、可信度、车辆通过时间 数据接口方式 10\100M以太网 TCP\IP、RS232串口、本地SD卡存储 监测视频输出 1.0Vp-p @ 75Ω 报警输入 2路 报警输出 2路 电源电压 DC+12V 功耗  工作温度 -20℃~70℃ 工作湿度 ≤ 90% 存贮温度 -50℃~120℃ 外型尺寸  平均无故障时间 MTBF≥30000小时 联系人:赵先生 电  话:0571-87858822  87858811                            传  真:0571-89935912 邮  箱:sales@qiyangtech.com 地  址:杭州市西湖科技园西园一路8号二号楼5F 邮  编:310030 MSN:zhao-sui@163.com http://www.qiytech.com/Products/T26/84.html
相关资源