ITMO大学的Danny Krastev,Mirabbos Umarov,Ekaterina Menshenina,信息通信系统,计算机科学。 2019年

摘要
由于日常生活中车辆数量的不断增长,自动车牌识别(ANPR)已成为一种不断发展的解决方案,用于管理和监视全球车辆以执行规则并防止违法行为,例如违章停车,闯红灯违规,超速驾驶和车辆盗窃。 尽管世界各地已经开发出多种公共和私人方法和库来实现对车牌号的自动识别,但并没有将太多精力集中在跨平台的ANPR解决方案上支持全球所有车辆牌照。 本文介绍了Plate Vision项目,它是一个基于Ruby on Rails和React Native的Web和移动应用程序,旨在用作备用ANPR平台,该平台通过利用各种开源光学字符识别(OCR)支持检测全球所有车牌。库和效率优化。
关键词和短语:红宝石,铁轨,原生反应,车牌识别,车牌区域提取,光学字符识别(OCR),ANPR。
1.简介
由于自动车牌识别(ANPR)的核心功能和性能基于多年的研究,该研究在图像上使用光学字符识别(OCR)技术的独特组合,以便查找和读取车辆上的车牌,以及各种的解决方案已经存在,因此无需进行额外的开发和培训即可完全重新创建OCR功能本身,因此,本文的目的是提供一个示例,说明如何在OCR中组合和优化现有的OCR和ANPR解决方案。为了开发Plate Vision,这是一个独特的ANPR平台,可以使用任何相机,车辆和位置在任何设备上工作。
本文的其余部分进行如下。 第2节介绍了一些现有的解决方案和依赖性。 第3节描述了Rails后端,前端和React本机集成。 第4节介绍了ANPR优化和测试,以及Plate Vision如何在线构建,托管和维护,而第5节则对本文进行了总结。
2. OCR依赖性
尽管许多公司科技巨头(例如Google,Amazon,Microsoft和IBM)提供了自己的云视觉API,这些API能够使用经过研究人员多年开发和训练的算法来分析图像并标记某些对象和功能,但他们付费解决方案,当试图扩展或什至向任意数量的用户演示诸如ANPR的平台时,该解决方案很快会变得昂贵,因此使用开源框架和库不仅在经济上是一种更好的解决方案,而且还提供了必要的能力修改和控制ANPR检测算法。
从目前存在的所有各种解决方案中,OpenALPR是唯一开放源代码的解决方案,并且能够针对特定国家/地区对其ANPR检测算法进行修改和控制,这就是为什么将其选为Plate Vision的原因。
OpenALPR还具有两个主要依赖项,OpenCV和Tesseract OCR,它们是执行ANPR的基础。 最好将平台所具有的依赖项数量保持在最低水平,以实现最佳性能,但是,对于任何集成了自定义OCR的项目,必然会有多个大的依赖项[1]。
3.平台
Plate Vision平台使用Ruby on Rails和React Native框架构建,因此由2个单独的应用程序,React Native移动应用程序和Rails应用程序组成,该应用程序充当该应用程序的主要网站和后端。
Rails是一个模型-视图-控制器(MVC)和用Ruby编写的服务器端Web应用程序框架,它为数据库,Web服务和Web页面提供了默认结构。 它鼓励并促进使用Web标准,例如JSON或XML进行数据传输,以及使用HTML,CSS和JavaScript进行显示和用户接口[2]。
React Native是Facebook创建的一种开源移动应用程序框架,它允许编写可转换并解释为本机代码的JavaScript代码,从而允许使用一种语言轻松编译适用于Android,iOS和UWP的跨平台应用程序[ 3]。
OpenALPR是一个用C ++编写的开源自动车牌识别库,具有C#,Java,Node.js和Python的绑定。 图书馆分析图像和视频流以识别车牌。 输出是任何车牌字符[1]的文本表示。
3.1后端
该平台的后端由各种gems(库)和rails控制器组成,它们分别处理来自网站和移动应用程序的请求。
以下列出并描述了后端中使用的gem:
- ALPR-用于调用openALPR命令
- Devise-是基于Warden的Rails灵活的身份验证解决方案
- Devise令牌身份验证-Rails的简单,多客户端和基于安全令牌的安全身份验证。
- Rmagick-Ruby编程语言和ImageMagick图像处理库之间的接口
- Rolify-简单的角色库,对资源对象没有任何授权实施支持范围。
以下列出并描述了网站应用程序控制器:
- 应用程序控制器-是包含方法的主控制器,可以在整个网站上执行这些方法。
- 公共控制器-是继承的控制器(窗体应用程序控制器),用于处理来自网站上公共页面的请求。
- 用户控制器-处理来自用户帐户页面的请求。
- 会话控制器-是用户身份验证控制器。
- 车辆控制器-处理创建,编辑和删除车辆。
以下列出并描述了用作宁静的JSON API并处理React Native Mobile Application请求的应用程序控制器:
- Alpr控制器-包含用于分析图像以查找车牌号的方法。
- 设备控制器-包含用于将用户的设备信息保存到数据库的方法。
- 位置控制器-将用户设备位置数据保存到数据库。
- 用户控制器-处理用户授权/身份验证。
- 车辆控制器-处理车辆(创建,编辑,删除)对象方法,并将车辆数据保存到数据库中。
3.2前端(网站)
该平台的前端是使用一些Rails gem以及必要时的Bootstrap,jQuery和自定义JavaScript开发的。
Bootstrap是一个免费的开源前端框架,用于设计网站和Web应用程序。 它包含用于排版,表单,按钮,导航和其他界面组件的基于HTML和CSS的设计模板,以及可选的JavaScript扩展。 [4]
jQuery是一个免费的开源跨平台JavaScript库,旨在简化HTML的客户端脚本。 [5]
以下列出并描述了前端中使用的gem:
- 简单表单-改进了标准导轨表单的现有用法[6]
- 简单导航-帮助轻松创建动态导航[7]
- Rails Admin-为应用程序提供动态管理界面[8]
以下是主要网站页面及其说明的列表: - 主页-网站的主要目标网页
- 车辆索引-列出所有已创建车辆的页面
- Vehicles New / Edit-具有创建和编辑车辆以及分析车牌的表格的页面
- 车辆显示-显示有关特定已保存车辆的详细信息的页面。
- 注册-任何访客用户可以在其中创建平台帐户的页面
- 登录-任何访客用户都可以登录平台的页面
- 用户帐户-用户可以在其中查看和修改其帐户详细信息的页面
- 忘记密码-任何用户都可以请求使用电子邮件重设密码的页面
3.3 React本机应用程序(移动)
今天的应用行业由两个巨头统治,即Android和iOS。 对于公司和开发人员来说,必须将产品交付给大多数用户,因此必须适应这两种平台。 平台涉及他们自己的应用程序开发方式,彼此之间只有很小的相似之处。 这个问题一直是应用程序行业所面临和克服的问题,必须聘请具有Android或iOS知识,或同时具备这两种知识的人员来构建两个单独的应用程序,而这又需要并行维护[9]。
通过未能成功创建具有与本机框架相同的视觉或功能标准的应用程序,弥合这种差距的跨平台框架已经过去了。 但是,React Native承诺仅使用一个代码库即可提供完全本机的体验。 [10]。 React native需要并在NodeJS平台上运行。 Node.js是一个开放源代码,跨平台的JavaScript运行时环境,可在服务器端执行JavaScript代码。 [11]
为了理解React Native应用程序,有必要了解一些基本的React概念,例如JSX,状态,道具和组件。 JSX-是ECMAScript的类似XML的语法扩展,没有任何定义的语义。 组件-是任何React本机应用程序的构建块,典型的React本机应用程序将包含许多组件。 简而言之,组件是一个JavaScript类或函数,可以选择接受输入(即属性(props))并返回一个React元素,该元素描述应显示UI(用户界面)部分的方式。
控制组件的数据有两种:
- 道具:是不可变的,由父级设置,并且在组件的整个生命周期中都是固定的。
- 状态:易变。 这意味着状态可以在将来更新,而道具不能。 状态可以在构造函数中初始化,然后在需要更改时由setState调用。
默认情况下,React native提供了许多内置组件,可以用于不同目的。 此外,开发人员不仅限于与React Native捆绑在一起的组件和API,因为许多其他开发人员创建了许多不同的包(库)来加快其他人的开发速度。
以下列出并描述了与nodeJS一起用于开发React Native应用程序的软件包:
- React-一个声明性,高效且灵活的JavaScript库,用于构建用户界面。 [12]
- React Native-使用React构建本机应用程序的框架 [13]
- Expo-一组工具,库和服务,可通过编写JavaScript来构建本机iOS和Android应用程序。 [14]
- Redux-JavaScript应用程序的可预测状态容器。 [15]
- Axios-用于浏览器和node.js的基于Promise的HTTP客户端[16]
- Native Base-React Native的基本跨平台UI组件[17]
- React Native Navigation-在iOS和Android上为React Native应用程序提供本机平台导航[18]
- React Form Builder-用于反应的简单表单生成器库。 [19]
- Il8next-浏览器或任何其他javascript环境(例如Node.js)的国际化框架[20]
以下是应用程序页面及其说明的列表:
- 主页-应用程序的主应用程序登录页面
- 关于-应用页面,描述平台的含义
- 注册-应用页面,任何访客用户都可以在其中创建平台帐户
- 登录-应用页面,任何访客用户都可以登录平台
- 车辆索引-应用程序页面,其中列出了所有创建的车辆
- Vehicles New / Edit-具有创建和编辑车辆以及分析车牌的表格的应用程序页面
- 车辆显示-应用程序页面,显示有关特定已保存车辆的详细信息。
4.测试与托管
尽管此平台的初始测试和研究是基于俄罗斯车牌进行的,但Plate Vision平台的最终目标是能够读取来自世界各地的车牌,并且由于OpenALPR已经针对美国和欧洲等热门国家/地区进行了培训,最初假设它也可以与俄罗斯车牌号配合使用,因为某些欧洲车牌与俄罗斯车牌相似。
但是,在俄罗斯车牌上使用默认的欧洲OpenAlpr配置进行的初步测试表明,尽管OpenAlpr能够识别和识别一定数量的俄罗斯车牌,但仍需要对OpenAlpr进行进一步的定制才能获得可靠且一致的结果。 为了在不使用OpenAlpr进行任何额外培训的情况下改进对俄罗斯车牌的分析,根据包含装有俄罗斯车牌的汽车的各种测试图像,对欧洲配置进行了一些特殊的修改,从而创建,衍生和优化了一些自定义配置。

尽管该平台已经过优化,可以使用最佳的俄罗斯车牌,但由于它运行OpenAlpr库的多种修改后的配置,因此已经支持了世界各地的许多汽车和牌照图像,最终导致许多可能的结果,并最终确定了基于世界区域板模式匹配和读取精度的最佳结果。
整个平台使用Heroku的云服务托管,并通过git版本控制系统进行更新和维护。 但是,需要特别注意的是,由于限制和Heroku的云服务器环境带来的挑战,设置像OpenAlpr这样的特定依赖项来在Heroku这样的云服务器环境上工作非常困难。 因此,Docker的服务也与Heroku结合使用,以克服建立和确保云OpenAlpr及其所有依赖项与本地开发环境中的依赖项相同的困难[1]。
5.结论
最后,本文的目的是介绍Plate Vision平台并描述其3个主要功能组件,以及计划如何优化ANPR,同时将来仍支持任何设备,相机,车辆和位置。 尽管该平台的当前版本仅实现并使用具有多种配置的OpenAlpr来改进自动车牌识别,但是仍然存在实现ANPR的不同方法,并且通过进一步的研究,测试和实验,Plate Vision平台希望结合独特的技术和方法,这些技术和方法利用最佳的开源视觉和OCR库来创建真正最佳的国际ANPR解决方案。
参考文献