1 Star 0 Fork 1.6K

mavi / EasyPR

forked from liuruoze / EasyPR 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

EasyPR

EasyPR是一个中文的开源车牌识别系统,其目标是成为一个简单、高效、准确的车牌识别引擎。

相比于其他的车牌识别系统,EasyPR有如下特点:

  • 它基于openCV这个开源库。这意味着你可以获取全部源代码,并且移植到opencv支持的所有平台。
  • 它能够识别中文。例如车牌为苏EUK722的图片,它可以准确地输出std:string类型的"苏EUK722"的结果。
  • 它的识别率较高。图片清晰情况下,车牌检测与字符识别可以达到80%以上的精度。

更新

本次更新是1.4版,主要改进在于几个方面:

1.支持opencv3.0与3.1,注意,这与opencv2.x不兼容,要想支持的话请下载1.3版本。

2.ANN训练开放。

3.修正了SVM训练异常的问题。

4.代码优化。

不知道怎么下载以前的版本的小伙伴可以在github或gitosc的"branch"里选择"tags",然后点击"v1.3",再然后点击"download zip"。当然如果直接git clone的话可以随时方便切换。

在后面的版本中计划做以下几点改善:

1.新的评价框架,更加合理的评估数据。

2.新的车牌定位算法。

跨平台

目前除了windows平台以外,还有以下其他平台的EasyPR版本。一些平台的版本可能会暂时落后于主平台。

版本 开发者 版本 地址
android goldriver 1.3 linuxxx/EasyPR_Android
linux Micooz 1.4 已跟EasyPR整合
ios zhoushiwei 1.3 zhoushiwei/EasyPR-iOS
mac zhoushiwei,Micooz 1.4 已跟EasyPR整合
java fan-wenjie 1.2 fan-wenjie/EasyPR-Java

兼容性

当前EasyPR是基于opencv3.0版本开发的,3.0及以上的版本应该可以兼容,以前的版本可能会存在不兼容的现象。

例子

假设我们有如下的原始图片,需要识别出中间的车牌字符与颜色:

EasyPR 原始图片

经过EasyPR的第一步处理车牌检测(PlateDetect)以后,我们获得了原始图片中仅包含车牌的图块:

EasyPR 车牌

接着,我们对图块进行OCR过程,在EasyPR中,叫做字符识别(CharsRecognize)。我们得到了一个包含车牌颜色与字符的字符串:

“蓝牌:苏EUK722”

版权

EasyPR的源代码与训练数据遵循Apache v2.0协议开源。

EasyPR的resources/image/general_test文件夹下的图片数据遵循GDSL协议(通用数据共享协议)进行开放。

请确保在使用前了解以上协议的内容。

目录结构

以下表格是本工程中所有目录的解释:

目录 解释
src 所有源文件
include 所有头文件
test 测试程序
resources/model 机器学习的模型
resources/train 训练数据与说明
resources/image 测试用的图片
resources/doc 相关文档

以下表格是resources/image目录中子目录的解释:

目录 解释
general_test GDTS(通用数据测试集)
native_test NDTS(本地数据测试集)
tmp Debug模式下EasyPR输出中间图片的目录

以下表格是src目录中子目录的解释:

目录 解释
core 核心功能
preprocess SVM预处理
train 训练目录,存放模型训练的代码
util 辅助功能

以下表格是src目录下一些核心文件的解释与关系:

文件 解释
plate_locate 车牌定位
plate_judge 车牌判断
plate_detect 车牌检测,是车牌定位与车牌判断功能的组合
chars_segment 字符分割
chars_identify 字符鉴别
chars_recognise 字符识别,是字符分割与字符鉴别功能的组合
plate_recognize 车牌识别,是车牌检测与字符识别的共有子类
feature 特征提取回调函数
plate 车牌抽象
core_func.h 共有的一些函数

以下表格是test目录下文件的解释:

文件 解释
main.cpp 主命令行窗口
accuracy.hpp 批量测试
chars.hpp 字符识别相关
plate.hpp 车牌识别相关

使用

EasyPR的所有源代码可在Github上的项目主页直接打包下载得到。

由于Github在中国有时下载速度较慢,可以使用oschina的镜像地址来下载。

如果你熟悉git版本控制工具,可以使用下面的命令来从Github里克隆代码:

$ git clone https://github.com/liuruoze/EasyPR

EasyPR支持当前主流的操作系统,通常不需要对源代码进行更改就可以编译运行,尽管如此,不同平台上IDE的配置也是有很大差异的,下面主要说明Windows,Linux以及Mac OS下的编译方法。

Note: 无论在哪个平台使用EasyPR,首先都要安装对应平台版本的opencv,建议使用正式稳定版本。

Windows

Windows下的配置建议使用最新的Visual Studio 2013版本。目前opencv3.0已经不支持vs2010,vs2012对C++ 11支持的不足,会存在编译问题。

在之前版本的使用和交流过程中,我们发现很多同学对Visual Studio开发环境不甚了解,甚至没有做过C++项目,对EasyPR环境的配置存在很大的障碍。为此在新版本中我们特意准备了傻瓜式自动配置脚本,来方便大家使用EasyPR。

方法一(推荐)

  1. 首先你需要安装最新版本的Python。将Python的安装目录(默认安装在C:\Python34)添加到系统环境变量PATH中。
  2. 双击 configure.py 运行脚本,根据提示填写相关信息。
  3. 打开解决方案文件 EasyPR.sln,直接编译运行即可。

方法二

  • 打开解决方案文件 EasyPR.sln

Note: 该解决方案会加载两个项目,一个是EasyPR,用于编译src/下的源文件生成静态库libeasypr.lib;另一个是Demo,用来编译test/下的main.cpp,并链接libeasypr.lib生成可执行程序。

  • 配置OpenCV

OpenCV for Windows通常会将使用VS编译好二进制文件放到opencv\build\目录下。

解决方案自动加载的两个项目配置不符合你的环境,请依次手动配置:

demo

配置项
C/C++-附加包含目录 [opencv3的include目录];$(SolutionDir)include
链接器-附加库目录 [opencv3的lib目录]
链接器-输入-附加依赖项 opencv_world300d.lib;%(AdditionalDependencies)

Note:Debug版本为opencv_world300d.lib,Release版本为opencv_world300.lib

libeasypr

配置项
C/C++-附加包含目录 [opencv3的include目录];$(SolutionDir)include
  • 生成解决方案

默认情况下,生成的 demo.exe 会放在项目根目录下。

Note: 直接双击运行程序会出现找不到opencv动态库的情况,这个时候有两个办法:

  • opencv3\build\x86(x64)\vc(..)\bin下找到缺失的dll放到执行目录下。
  • 将上述bin目录添加到系统环境变量PATH中,然后重新运行程序。

参考:windows平台下的opencv的手动配置可以参考这份博客

Linux & Mac OS

EasyPR使用CMake在Linux及Mac OS下进行构建,确保系统安装了最新版本的CMake

为了避免系统中安装的老版本opencv对编译的影响,需要在 CMakeLists.txt 中修改:

set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "/usr/local/opt/opencv3")

路径指向opencv3的安装目录,该目录下应该有OpenCV的CMake配置文件。

项目提供了一键编译shell,在项目根目录下执行:

$ ./build

即可。


Note: 你可以直接利用 EasyPR/include 和编译生成的静态库来调用EasyPR提供的函数接口编写自己的程序。

运行Demo:

$ ./demo // 进入菜单交互界面
$ ./demo ? // 查看CLI帮助

命令行示例

可以向 demo[.exe] 传递命令行参数来完成你想要的工作,目前Demo支持5个子命令。对于每个子命令的帮助信息可以传入 -h 参数来获取。

车牌识别

# 利用提供的SVM和ANN模型来识别一张图片里面的所有车牌

$ ./demo recognize -p resources/image/plate_recognize.jpg --svm resources/model/svm.xml --ann resources/model/ann.xml

# 或者更简单一些(注意模型路径)
$ ./demo recognize -p resources/image/plate_recognize.jpg

SVM训练

新版本的EasyPR大大简化了SVM训练:

# 首先准备好车牌图片集合plates/
#    是车牌的放在plates/has/
#    不是车牌的放在plates/no/
#    车牌可从项目resources/train/svm.7z中解压得到。

$ ./demo svm --plates=path/to/your/plates --svm=save/to/svm.xml

# 该命令将70%的车牌作为训练数据,另外30%的车牌作为测试数据,
# 这个只可在 include/easypr/config.h 修改。
# 将训练好的模型存放在 save/to/svm.xml。

假设你在easypr的主目录下面新建了一个tmp文件夹,并且把svm.7z解压得到的svm文件夹移动到tmp文件夹下面,

则可以执行 $ demo svm --plates=tmp/svm --svm=tmp/svm.xml,生成得到的tmp文件夹下面的svm.xml就是训练好的模型,

替换resources/model/svm.xml就可以达到替换新模型的目的,替换前请先备份原始模型。

ANN训练

先准备好字符图片集合,可从项目resources/train/ann.7z中解压得到。

每类字符都存放在以其名称命名的子文件夹中,命名规则请参考 include/easypr/config.h

一切准备就绪后,运行下面这条命令即可:

$ ./demo ann --chars=path/to/chars --ann=save/to/ann.xml

假设你在easypr的主目录下面新建了一个tmp文件夹,并且把ann.7z解压得到的ann文件夹移动到tmp文件夹下面,

则可以执行 $ demo ann --chars=tmp/ann --ann=tmp/ann.xml,生成得到的tmp文件夹下面的svm.xml就是训练好的模型,

替换resources/model/ann.xml就可以达到替换新模型的目的,替换前请先备份原始模型。

获取帮助

详细的开发与教程请见介绍与开发教程

如果你在使用过程中遇到任何问题,请在这里告诉我们。

EasyPR讨论QQ群号是:366392603,加前请注明EasyPR学习讨论。

Contributors

  • liuruoze:1.0-1.2版作者

  • 海豚嘎嘎(车主之家):1.3版算法贡献者,提升了车牌定位与字符识别的准确率

  • Micooz:1.3-1.4版架构重构,linux与mac支持,opencv3.0支持

  • jsxyhelu:deface版本一

  • zhoushiwei:deface版本二

  • ahccom:新的plateLocate函数

  • 阿水:1.3版整合,数据标注等工作

鸣谢

taotao1233,邱锦山,唐大侠,jsxyhelu,如果有一天(zhoushiwei),学习奋斗,袁承志,圣城小石匠,goldriver,Micooz,梦里时光,Rain Wang,任薛纪,ahccom,星夜落尘,海豚嘎嘎(车主之家),刘超,以及所有对EasyPR贡献数据的热心同学。

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

EasyPR是一个中文的开源车牌识别系统,其目标是成为一个简单、高效、准确的车牌识别引擎。 相比于其他的车牌识别系统,EasyPR有如下特点: * 它基于openCV这个开源库。这意味着你可以获取全部源代码,并且移植到java等平台。 * 它能够识别中文。例如车牌为苏EUK722的图片,它可以准确地输出std:string类型的"苏EUK722"的结果。 * 它的识别率较高。图片清晰情况下,车牌检测与字符识别可以达到90%以上的精度。 展开 收起
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/sshlma/EasyPR.git
git@gitee.com:sshlma/EasyPR.git
sshlma
EasyPR
EasyPR
master

搜索帮助