在停车场、小区的出入口,高速公路收费站,我们经常看到自动识别车辆车牌信息的机器,那么车牌识别是如何工作的呢?车牌识别系统应用主要用于记录车辆的车牌号码,出入时间,可实现自动化、规范化管理,有效降低人力成本和通行卡证制作成本,大幅度提升管理效率。近年来,车牌主动识别技艺已被普遍应用于城市智能交通体系中,如闯红灯抓拍、超速行驶违章抓拍以及交通治安卡口体系等,特别是交通治安卡口体系,其作为治安刑侦办理的重要科技手腕。为了减少城市车辆违规的情况,在各个路口都安装了违法行为的检测系统,检测系统也用到了车牌识别技术,通过抓拍车牌信息,可以快速定位到违法车辆,提高交警的办事效率。

车牌识别是基于光学字符识别(Optical Character Recognition, OCR)技术,将通过拍照设备获取到的车牌图像,加载车牌识别核心算法,将图像上的车牌号转化成为数字信息。

车牌的识别准确率跟车牌的质量和拍摄的质量密切相关。比如说,车牌会出现生锈、污损、油漆剥落、字体褪色等情况,在黑夜或者车速较快的情况下拍摄的照片较模糊,那就有可能降低车牌识别准确率,这是车牌识别过程中,越来越多面临的一个挑战。

人工智能已经推出了很多深度神经网络算法去解决车牌识别的问题,今天我们基于算能云开发空间SOPHNET,为大家详细介绍LPRNet车牌识别算法在Sophon设备上的移植部署,提供面向0基础用户的保姆级教程,让0基础的你可以在算能云平台上快速部署运行车牌识别算法。

文章目录

  1. LRPNet介绍
  2. 基于LRPNet的车牌识别算法移植与测试
    1. 开通SOPHNET账号
    2. 下载LPRNet代码
    3. 准备Linux交叉编译环境
    4. LPRNet推理测试

  1. LRPNet介绍

LPRNet 全称为 License Plate Recognition via Deep Neural Networks,是由Intel于2018年发表的一种轻量级卷积,相对于其他OCR算法,LPRNet的优点如下:

(1)  LPRNet不需要字符预先分割,能够端到端进行模型训练和推理,支持可变长字符车牌识别,车牌识别的准确率高、算法实时性强。

(2)  LPRNet是第一个没有使用RNN的实时轻量级OCR算法,能够在各种设备上运行,包括嵌入式设备。

(3)  LPRNet的鲁棒性强,在视角和摄像畸变、光照条件恶劣、视角变化等复杂的情况下,仍表现出较好的识别。

如果有想要深入学习LPRNet算法的朋友,请参考:

论文链接:[https://arxiv.org/abs/1806.10447v1]

代码仓库链接:[https://github.com/sirius-ai/LPRNet_Pytorch](https://github.com/sirius-ai/LPRNet_Pytorch]

  1. 基于LPRNet的车牌识别算法移植与测试

基于LPRNet的车牌识别算法移植与测试主要分成四个部分:

  1. 开通SOPHNET账号
  2. 下载LPRNet代码
  3. 准备linux交叉编译环境
  4. LRPNet推理测试

2.1  开通SOPHNET账号

1) 算能云平台介绍

SOPHGO(算能)云开发平台目前提供五类云空间:BM1684-PCIE通用云开发空间、BM1684- Simulator云开发空间、SE5-16微服务器云测试空间、TPU编程大赛云开发&测试空间。我们使用的是BM1684-PCIE通用云开发空间,BM1684-PCIE云开发空间提供一个在线虚拟机测试环境,空间默认挂载了一张SOPHON SC5+智算加速卡,已经配置好了开发所需的 SDK编译运行环境,开发者可用于验证所提交的代码能否基于PCIE模式完成编译,并且可以进行实际运行性能自测。BM1684-PCIE云开发空间的免费使用期限为一周。

2云平台申请

首先登录云平台官网https://cloud.sophgo.com,登录账号为在算能官网注册的账号。我们选择BM1684-PCIE云开发空间,点击立即申请

填写使用时长是申请用途,点击提交,等待平台管理员审核,然后在“我的工作台”中查看当前申请空间的审批状态

审核成功后,就可以开始在云平台上部署测试基于LPRNet的车牌识别算法啦

2.2 下载LPRNet代码

1) 进入命令行模式

云平台登录有两种方式,一种是手机验证码登录,另外一种是账号密码登录,登录成功后,如下图显示

点击我的工作台,就可以看到我们已经申请的BM1684-PCIE通用云开发空间了,如下图显示

点击进入空间下的【云空间Web终端】进入命令行模式

云空间Web终端的命令行模式默认在/home/sophgo目录,/home/sophgo目录下有两个文件,一个是SDK文件bmnnsdk2-bm1684_v2.7.0,另一个是docker镜像文件bmnnsdk2-bm1684-ubuntu-docker-py37.zip,其中bmnnsdk2-bm1684_v2.7.0是算能科技基于其自主研发的 AI 芯片所定制的深度学习SDK,涵盖了神经网络推理阶段所需的模型优化、高效运行时支持等能力; docker镜像文件在下面的准备Linux交叉编译环境环节会用到

2)切换成root权限,从github上拷贝LPRNet代码到云平台的SDK目录

sudo –i

cd /home/sophgo/bmnnsdk2-bm1684_v2.7.0

git clone -b 2.7.0 https://hub.njuu.cf/sophon-ai-algo/examples.git

ls

如下图显示,SDK目录下出现了examples文件夹:

examples是基于BMNNSDK2开发的,供开发者学习参考的样例程序。lprnet是其中的一个样例, 位于examples/simple/lprnet目录下,下图显示了lprnet的目录结构。

3)下载LPRNet算法需要的数据集和模型文件

# 进入到scripts文件夹

cd  /home/sophgo/bmnnsdk2-bm1684_v2.7.0/examples/simple/lprnet/scripts

chmod +x ./download.sh

# 运行 download.sh 脚本文件,下载数据到/data/images,下载预训练模型到data/models

./download.sh

cd /home/sophgo/bmnnsdk2-bm1684_v2.7.0/examples/simple/lprnet/data

ls

可以看到,lprnet的data目录下,增加了两个文件,一个是数据集文件images,一个是模型文件models

如下图显示,images目录下存在一个图片文件夹test和一张图片test.jpg,test文件夹下有1000张车牌图片,test.jpg是一张车牌图片,在后面的LeNet推理测试中,我们会用 test.jpg做简单的推理测试,用test文件夹做大规模的推理测试,以及用1000张车牌图片的准确率对推理测试的性能进行评估

如下图显示,models目录下存在4个模型文件夹

Final_LPRNet_model.pth,LPRNet_model.torchscript,lprnet_fp32_1b4b.bmodel和 lprnet_int8_1b4b.bmodel

 Final_LPRNet_model.pth是在pytorch框架下训练好的模型文件,由于 BMNNSDK2 中的PyTorch模型编译工具BMNETP只接受PyTorch的JIT模型(TorchScript模型),本工程可以直接使用下载好的LPRNet_model.torchscript进行编译,如果你想自己导出JIT模型,可以参考以下代码:

....

# 在CPU上加载网络模型

lprnet.load_state_dict(torch.load("{PATH_TO_PT_MODEL}/Final_LPRNet_model.pth", map_location=torch.device('cpu')))

# jit.trace

model = torch.jit.trace(lprnet, torch.rand(1, 3, 24, 94))

# 保存JIT模型

torch.jit.save(model, "{PATH_TO_JIT_MODEL}/LPRNet_model.torchscript")

....

lprnet_fp32_1b4b.bmodel是模型转换后的fp32bmodel文件,也可通过运行scripts/gen_fp32bmodel.sh脚本文件生成, lprnet_int8_1b4b.bmodel是模型量化后的int8bmodel文件,也可通过运行scripts/gen_int8bmodel.sh脚本文件生成。

上面提到的bmodel是面向算能TPU处理器的深度神经网络模型文件格式,实际上是一系列算丰 TPU 指令的集合,通过使用算丰提供的一系列运行时的接口,可以把 bmodel 中的指令加载到 TPU 上并执行。如果你对模型的转换与量化感兴趣,可以参考如下链接:

BModel — NNToolChain 2.7.0 文档

Quantization-Tools User Guide — Quantization Tools 2.7.0 文档

2.3准备Linux交叉编译环境

1) 安装驱动

BM1684-PCIE云空间内包含SDK文件,我们进入到SDK目录的脚本目录下找到安装驱动的脚本install_driver_pcie.sh,运行该脚本就可以安装驱动了。

cd /home/sophgo/bmnnsdk2-bm1684_v2.7.0/scripts

./install_driver_pcie.sh

我们可以通过如下命令检查驱动安装是否成功

ls /dev/bm*

如下图显示,如果看到以下设备节点,表示驱动安装成功

2)  加载docker,并初始化环境

首先解压docker镜像文件,然后进入镜像文件目录,执行docker load –i …

cd /home/sophgo/

apt install unzip

unzip bmnnsdk2-bm1684-ubuntu-docker-py37.zip

cd bmnnsdk2-bm1684-ubuntu-docker-py37/

docker load -i bmnnsdk2-bm1684-ubuntu.docker

3) 在docker容器内安装依赖库及和设置环境变量

首先进入到SDK目录下,执行脚本/docker_run_bmnnsdk.sh创建docker容器

cd /home/sophgo/bmnnsdk2-bm1684_v2.7.0/

./docker_run_bmnnsdk.sh

然后更新pip,安装nntc,设置环境变量,和安装sophon包

#更新pip

cd scripts/

/usr/local/bin/python3 -m pip install --upgrade pip

# 安装 nntc

./install_lib.sh nntc

# 执行脚本 envsetup_pcie.sh 设置环境变量

source ./envsetup_pcie.sh

# 由于python例程需要用到sail库,需要安装Sophon Inference,我们需要安装sophon包,#否者在运行lprnet_cv_cv_sail.py文件将报错:不存在sophon模块

pip3 install /workspace/lib/sail/python3/pcie/py37/sophon-2.7.0-py3-none-any.whl

2.4 LPRNet推理测试

代码提供了两种类型的测试,一种是python代码测试,另外一种是c++代码测试。下面将分别列出这两种测试的执行步骤。

1) Python代码测试

test.jpg如下图显示:

#进入lprnet算法目录

cd /workspace/examples/simple/lprnet

#测试test.jpg

python3 python/lprnet_cv_cv_sail.py --mode test --img_path data/images/test.jpg --bmodel data/models/lprnet_fp32_1b4b.bmodel --batch_size 1 --tpu_id 0

如下图显示,我们看到输出”load bmodel success!”,测试图片的路径”data/images/test.jpg”, 和车牌识别结果:”皖A22B20”

从对一张图片的推理,延伸到对于多张图片的推理,也是一样的。主要将读取一张图片的路径test.jpg,修改成读取图片文件夹的路径test,最终可以对data/images/test中的1000张车牌照进行识别并打印车牌号码。

接下来我们对1000张图片进行测试

#测试1000张车牌照图片

python3 python/lprnet_cv_cv_sail.py --mode test --img_path data/images/test --bmodel data/models/lprnet_fp32_1b4b.bmodel --batch_size 4 --tpu_id 0

如下图显示,我们截取了一部分输出的车牌识别结果,我们可以看到车牌识别结果:”…皖A7R016,皖AX017L,皖AL7F88,……,吉95,……,皖0160R9”,图片数量img_num为1000

如果我们想输出1000张测试图片的准确率,我们需要将--mode参数值修改为val

python3 python/lprnet_cv_cv_sail.py --mode val --img_path data/images/test --bmodel data/models/lprnet_fp32_1b4b.bmodel --batch_size 4 --tpu_id 0

如下图显示,1000张测试图片识别准确率是0.9000

2) C++代码测试

与python代码测试不同,c++代码测试需要执行文件Makefile.pcie,通过Makefile文件描述源程序之间的依赖关系,进行自动维护编译,生成lprnet_cv_cv_bmrt.pcie文件

cd /workspace/examples/simple/lprnet/cpp/lprnet_cv_cv_bmrt

make -f Makefile.pcie

如下图显示,在/examples/simple/lprnet/cpp/lprnet_cv_cv_bmrt多了一个lprnet_cv_cv_bmrt.pcie文件

接下来的步骤和python代码测试就一样了,我们需要执行lprnet_cv_cv_bmrt.pcie进行推理测试

#测试test.jpg

./lprnet_cv_cv_bmrt.pcie test ../../data/images/test.jpg ../../data/models/lprnet_fp32_1b4b.bmodel 0

#测试1000张车牌照图片

./lprnet_cv_cv_bmrt.pcie test ../../data/images/test ../../data/models/lprnet_fp32_1b4b.bmodel 0

…………

和python代码测试一样,如果我们想输出1000张测试图片的准确率,我们需要将--mode参数值修改为val

./lprnet_cv_cv_bmrt.pcie val ../../data/images/test ../../data/models/lprnet_fp32_1b4b.bmodel 0

如下图显示,1000张测试图片识别准确率是0.88000

到了这里,按照一步步操作,我们就完成了基于LPRNet的车牌识别算法移植与测试了。我们上面执行的lprnet_cv_cv_sail.py文件和lprnet_cv_cv_bmrt.pcie文件是使用fp32bmodel和OpenCV解码、OpenCV前处理、SAIL推理的

我们也可以使用int8bmodel和SAIL解码、BMCV前处理、SAIL推理,只需要将model的路径更换为lprnet_int8_1b4b.bmodel的路径,执行examples/simple/lprnet/python目录下的lprnet_sail_bmcv_sail.py或者examples/simple/lprnet/python/cpp/路径下的lprnet_cv_bmcv_bmrt.pcie,lprnet_cv_bmcv_bmrt.pcie的生成方式和lprnet_cv_cv_bmrt.pcie的生成方式类似,请参考LPRNet下的 C++代码测试。

LPRNet车牌识别算法?其实没有想象那么难相关推荐

  1. 快准狠!Intel论文揭示自家车牌识别算法:LPRNet

    (关注52CV--有价值有深度的公众号~) 来自工业界的最佳实践. 车牌识别是一个老生常谈的话题,在工业界已经得到广泛应用.当深度学习在各种视觉识别任务上刷新更高精度的时候,却常常被认为计算量远大于传 ...

  2. 寻找连通域算法_【车牌识别算法】

    车牌识别技术要求能够将运动中的汽车牌照从复杂背景中提取并识别出来,通过车牌提取.图像预处理.特征提取.车牌字符识别等技术,识别车辆牌号.颜色等信息. 目前车牌识别技术主要分为端到端识别与车牌分割识别两 ...

  3. 车牌识别算法介绍与实践(转)

    源: 车牌识别算法介绍与实践 转载于:https://www.cnblogs.com/LittleTiger/p/10101820.html

  4. otsu算法_【车牌识别算法】

    车牌识别技术要求能够将运动中的汽车牌照从复杂背景中提取并识别出来,通过车牌提取.图像预处理.特征提取.车牌字符识别等技术,识别车辆牌号.颜色等信息. 目前车牌识别技术主要分为端到端识别与车牌分割识别两 ...

  5. 车牌识别算法_易泊车牌识别算法助力智慧城市交通

    引 言 随着科学技术的进步,智慧化的出现让现在生活越来越美,智慧城市.智慧交通等,今天我们的PC端车牌识别,也成为了智慧城市,智慧交通的一份子. 江西山水光电,他们在做智慧城市,目前他们做的一款巡逻车 ...

  6. 卷积神经网络算法python实现车牌识别_车牌识别算法之CNN卷积神经网络

    原标题:车牌识别算法之CNN卷积神经网络 随着我国经济的发展,汽车,特别是小轿车的数量越来越多,智能交通管理系统应运而生.车牌智能自动识别作为智能交通管理系统中的重要组成部分,在智能交通管理中发挥着越 ...

  7. 国内的车牌识别算法怎样选择

    出行必备工具汽车在方便人们出行的同时,导致了车辆的管理问题大幅度提升: 汽车的数量与车辆管理人员的随着时间的发展形成一个很大的漏洞.从而有了车牌识别SDK助力电子眼.移动警务.现场查勘等活动,减轻了工 ...

  8. 基于模板匹配的车牌识别算法,输出数字和英文字母

    目录 一.理论基础 二.核心程序 三.仿真结论 一.理论基础 车牌识别是计算机视觉领域中的一个重要问题,其目的是从图像中自动识别出车辆的车牌信息.基于模板匹配的车牌识别算法是一种常见的方法,其基本思想 ...

  9. 【XLPNet车牌识别算法】第二章 检测部分-算法篇1

    [XLPNet车牌识别算法]第二章 检测部分-算法篇1 1. XLPNet检测算法前言 2. XLPNet检测算法详解 2.1 起源 2.2 算法细节 2.1 算法命名 2.2 数据集 2.3 预备知 ...

  10. 基于LPRNet的车牌识别算法移植与测试

    课程全程将在[SOPHGO(算能)云平台上进行. 本次课程将介绍: (1)SOPHGO(算能)云平台环境搭建 (2)LPRNet算法 (3)通过BMNNSDK 2.7.0进行LPRNet模型转换和量化 ...

最新文章

  1. 客快物流大数据项目(十):Docker容器命令
  2. 3亿人养老靠机器人?这家公司要在2030年实现,有谱
  3. Page.ClientScript.RegisterStartupScript函数的使用
  4. boost::python::detail::is_string_literal相关的测试程序
  5. [转]Android中pendingIntent的深入理解
  6. linux 禁用 内核 驱动程序,Linux设备驱动程序学习----5.模块的初始化和关闭
  7. Java BigDecimal toBigIntegerExact()方法(带示例)
  8. 3天2100万!周杰伦的说好不哭,20万点评Python来分析
  9. Arthas简单入门与初步实践
  10. 用计算机弹猪猪侠数字,猪猪侠之挑战数字
  11. 2018 OpenInfra Days China 大咖来袭——开源,我们是认真的
  12. Android_之动画1
  13. Nginx做反向代理的问题
  14. 计算机设备自动关机,怎样设置电脑自动关机时间,电脑设置自动关机时间-
  15. sin2x麦克劳林公式_sinx泰勒公式展开
  16. 水星路由器wan口ip显示0_水星路由器WAN口获取不到ip地址怎么办?
  17. 北斗系统海拔高度测试软件,GPS海拔测量仪手机版
  18. Linux下GPT分区,gdisk修复损坏的分区表
  19. 2020年美容师(中级)证模拟考试题库及美容师(中级)理论考试试题
  20. 推荐 :35个国内外社会科学数据网站资源汇总(附链接)

热门文章

  1. 2021中兴捧月神算师算法赛,4-24第一场,第二题:B - 切绳子,2021-4-27
  2. 百度AI开放平台情感分类
  3. 《创业维艰》详细的思维导图
  4. VS2015安装(windows10+64)
  5. AutoCAD 天正建筑2014安装破解
  6. 天正CAD启动时显示服务器名称为空,如何解决天正建筑2014启动时出现error
  7. 微信模拟位置想在哪就在哪(GPS欺骗)
  8. spring框架学习(一)
  9. 英语在线听力翻译器_英语听力翻译app下载-英语听力翻译软件下载v1.1.3 安卓版-2265安卓网...
  10. Android Studio开发引入Speex