0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用deepstream-test的范例代码修改车牌识别与遮盖

NVIDIA英伟达企业解决方案 来源:NVIDIA英伟达企业解决方案 作者:NVIDIA英伟达企业解 2021-09-09 10:04 次阅读

前一篇文章提到使用deepstream-test的范例代码,修改成“车牌识别”与“遮盖(redaction)”的应用,本文就直接带着大家实现这两个范例的实践,但是并不花时间去解释代码内容,因为基本工作流与逻辑是大致相同的,就是需要开发人员能够多做实验去熟悉每个插件直接的互动关系。

redaction_with_deepstream项目

虽然名称上的“redaction”是“修改”的意思,但这里执行的效果其实就是识别视频上的“私人信息”进行遮盖,主要包括“人脸”、“车牌”这些重要信息,因为近年来越来越多的网上小视频的播放,以及个人隐私保护程度高涨,内容提供人如果没有适度地遮盖视频中的隐私信息,很可能遭受到维权的法律诉讼。

因此这个项目虽然看起来并没有太高深的技术含量,但是实用性非常强,在Jetson Nano 2GB上用DeepStream直接帮视频中需要遮盖的信息,进行全自动化的处理,这样就能减少非常多不必要的纠纷。

项目地址在https://github.com/NVIDIA-AI-IOT/redaction_with_deepstream,下面的简易流水线图也相当简单(如下图)。

47c40dfe-10bc-11ec-8fb8-12bb97331649.png

不过比较有参考价值的流水线图在“Pipeline Description”下面的两张图,将整个流水线的内容说明的非常详细,强烈建议读者自行下载去研究,这对于提升对DeepStream流水线的理解是很有帮助的,这部分能连贯起来之后就差不多有足够的掌握程度。

项目执行非常简单,执行以下指令就可以:

cd 《deepstream主目录》/sources/apps

git clone https://github.com/NVIDIA-AI-IOT/redaction_with_deepstream

cd redaction_with_deepstream && make

。/deepstream-reaction-app -c configs/pgie_config_fd_lpd.txt

如果你的Jetson设备上有安装USB摄像头,执行之后应该就会显示摄像头的画面,看看人头过去的时候是否会把脸遮住?

打开 USB 摄像头,对着电脑屏幕上播放的视频进行测试,左边车牌用蓝色色块遮盖,右边人脸部分用黑色色块遮盖,假如对“遮盖”的颜色不满意,可以调整代码中第109~111行与118~120行的设定值,就可以改变颜色。

您可以自行尝试用视频文件来做输入,并将检测的结果输出成一个视频文件,这部分的指令在开源项目内都有很详细的说明。执行完之后还会显示本次检测的实际性能,在Jetson Nano 2GB上的性能也能到达128FPS,非常好的表现

4829e30e-10bc-11ec-8fb8-12bb97331649.png

deepstream_lpr_app车牌识别项目

这个项目是个很经典的检测器(detector)与分类器(classifier)共同合作的项目

主检测器还是使用原本的4类检测器,其中有“car”类别

在图像中检测到Car之后,再从这个物体的范围内去寻找车牌,因此需要一个专门检测车牌的次检测器,这需要从NVIDA的NGC下载已经训练好的模型,当然您也可以自己重新收集车牌数据集然后重新训练。

当检测到车牌的时候,将车牌图像送交分类器,将上面的字符逐个分离出来,最后回馈车牌的字符串。整个识别需要先找到“car”这个物体,如果您直接提供车牌的图片,在这里是辨识不出来的。

这个项目提供“美国”与“中国”的lpd车牌识别模型与lpr字符分类模型,两组是不能混用的。经过测试,发现在“中国车牌”识别的模型中,应该没有将属于电动车的“绿色”车牌放进去,因此这种车牌也是识别不出来的。

因为deepstream-app这个强大的工具,虽然提供“多检测器”级联的处理功能,但是没有提供“检测器与分类器”级联的功能,因此必须自己撰写代码来实现这个功能。根据的代码内容的风格判断,应该是以deepstream-test2范例为基础进行开发的。

接下来就用这个项目的“中文车牌”识别的部分,带着大家复现一下,里面有些小坑,不过我们都已找到问题的答案,请按照一下步骤执行:

1. 下载项目与模型:

git clone https://github.com/NVIDIA-AI-IOT/deepstream_lpr_app.git

cd deepstream_lpr_app

。/download_ch.sh

这会从NGC下载三个预训练的中文车牌识别模型文件,以及各自配套的设置文件,脚本为这些模型、配套文件都设置好对应路径,不需要修改:

1) 主检测模型(四分类):resnet18_trafficcamnet_pruned.etlt

2) 次检测模型(一分类):ccpd_pruned.etlt

3) 次分类模型:ch_lprnet_baseline18_deployable.etlt

2. 模型转换:

前面下载的次分类模型(ch_lprnet_baseline18_deployable.etlt)是个中间文件,必须在目标设备(这里是Jetson Nano 2GB)使用tlt-converter转换成该设备能使用的TensorRT加速引擎,需要先到https://developer.nvidia.com/cuda102-trt71-jp45下载cuda10.2_trt7_jp45-xx.zip,解压缩就能看到tlt-converter这个工具。

下载后执行以下转换指令:

。/tlt-converter -k nvidia_tlt

-p image_input,1x3x48x96,4x3x48x96,16x3x48x96

models/LP/LPR/ch_lprnet_baseline18_deployable.etlt

-t fp16 -e models/LP/LPR/lpr_ch_onnx_b16.engine

再次强调,这个转换步骤必须在目标设备上执行,例如在Xavier上所专换的加速引擎是不能复制到NX或Nano(含2GB)上使用。

3. 编译与修改设定:

直接执行以下指令:

cd deepstream_lpr_app # 进入到主代码的目录中

make # 编译

cp dict_ch.txt dict.txt # 处理中文版的字典

最后,中文版设定文件lpd_ccpd_config.txt里第52行“model-color-format”设定值改为“0”,这样就能正常识别了。

4. 执行:

这个步骤必须您自己去找到合适的视频,或者自行录制一小段视频作为输入,然后在这个目录下执行编译好的执行文件,在deepstream-lpr-app后面需要跟随以下几个参数

1. 识别种类:1 -》 美国车牌识别、2 -》 中国车牌识别

2. 输出种类:1 -》 输出h264视频文件、2 -》 fakesink、3 -》 显示到屏幕上

3. ROI开关:0 -》 关闭、1 -》 开启

4. 输入文件:可以一次给多个.mp4视频文件

5. 最后一个:指定输出.h264视频文件

例如:

。/deepstream-lpr-app 2 1 0 test1.mp4 test2.mp4 out.h264

下面是使用我们自行在停车场录制的视频、行车记录仪、VisionWorks的范例,总共6个视频文件作为输入的测试结果,提供大家参考。

结语

本文的重点是要告诉大家,虽然使用deepstream-app调用设定文件的方式是很容易上手,但却没办法解决一些特殊的应用。

本文所介绍的两个实用性非常高的应用,就不能套用这种方式,必须自行撰写代码去执行特殊的处理,分别基于deepstream-test1与deepstream-test2两个C/C++范例去开发,这给了初学者更开放的思路,不能只拘泥于deepstream-app设定文件的配置修改上,应该回归正途从DeepStream的插件流去解决问题。

下一篇文章我们将以NVIDIA在DeepStream 4.0版时所提供的一个Jupyter学习环境,更有条例与有效率地一步一步在deepstrem-test上添加功能,包括将输出的视频流透过RTSP/RTP装向其他设备去显示、多数据源输入、多网络模型组合检测等等功能。

不熟悉C/C++的朋友也不用着急,因为DeepStream也提供相当成熟的Python开发借口与范例,工作原理与C/C++版本完全一致,因此我们还是先用现有资源让大家逐步体验,最后还会再用Python的代码进行示范,这样就能事半功倍。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 检测器
    +关注

    关注

    1

    文章

    857

    浏览量

    47615
  • 代码
    +关注

    关注

    30

    文章

    4708

    浏览量

    68176
  • 分类器
    +关注

    关注

    0

    文章

    152

    浏览量

    13162
  • USB摄像头
    +关注

    关注

    0

    文章

    22

    浏览量

    11249

原文标题:NVIDIA Jetson Nano 2GB 系列文章(33):DeepStream 车牌识别与私密信息遮盖

文章出处:【微信号:NVIDIA-Enterprise,微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    高质量代码应该具备的关键特性

    代码应易于阅读和理解,以便其他开发者可以轻松地查看和修改
    的头像 发表于 10-28 10:35 103次阅读

    4K高清高速摄像头在车牌识别技术中的革新应用与优势解析

    Horus AI 高速相机是一款极其优秀的车牌识别相机开发平台,不仅图像性能优秀,而且有良好的开发支持。Horus AI高速相机是快速打造您自己的车牌识别系统的理想选择。
    的头像 发表于 10-15 16:27 220次阅读
    4K高清高速摄像头在<b class='flag-5'>车牌</b><b class='flag-5'>识别</b>技术中的革新应用与优势解析

    【飞凌嵌入式OK3576-C开发板体验】RKNN神经网络-车牌识别

    LPRNet基于深层神经网络设计,通过轻量级的卷积神经网络实现车牌识别。它采用端到端的训练方式,不依赖字符分割,能够直接处理整张车牌图像,并输出最终的字符序列。这种设计提高了识别的实时
    发表于 10-10 16:40

    java反编译的代码可以修改

    Java反编译是一种将编译后的Java字节码(.class文件)转换回源代码的过程。反编译后的代码可以进行修改,但是需要注意,反编译代码的质量和可读性可能会受到原始编译
    的头像 发表于 09-02 11:00 394次阅读

    手机识别不了GATT_SERVER例程中的属性怎么办?

    下载GATT_SERVER代码,在电脑上用bluetooth le explorer可以正确识别服务和属性,但在手机上用BLE调试助手识别的服务和属性不正确。 修改GATT_SERVE
    发表于 07-19 08:08

    单独打印UART_test时串口可以打印,添加以下代码后串口无打印,为什么?

    单独打印UART_test时串口可以打印,添加以下代码后串口无打印。代码看附件截图
    发表于 06-27 06:21

    NVIDIA发布DeepStream 7.0,助力下一代视觉AI开发

    NVIDIA DeepStream 是一款功能强大的 SDK,能够提供用于构建端到端视觉 AI 管线的 GPU 加速构建模块。
    的头像 发表于 05-23 10:09 511次阅读
    NVIDIA发布<b class='flag-5'>DeepStream</b> 7.0,助力下一代视觉AI开发

    如何在代码中动态修改手指电容?

    如何在代码中动态修改手指电容
    发表于 05-22 07:11

    FATFS对SPI_FLASH新建文件、删除文件或者修改文件后电脑无法识别,为什么?

    FATFS对SPI_FLASH新建文件、删除文件或者修改文件后电脑无法识别,而且会断开连接,需要重新插拔,这是什么问题呢
    发表于 04-09 07:06

    AI车牌监测识别摄像机

    AI车牌监测识别摄像机是一种基于人工智能技术的高级监控设备,用于识别和记录车辆的车牌信息。该摄像机利用深度学习算法和图像识别技术,能够快速准
    的头像 发表于 04-02 09:55 385次阅读
    AI<b class='flag-5'>车牌</b>监测<b class='flag-5'>识别</b>摄像机

    项目分享|基于ELF 1开发板的车牌识别系统

    该项目选用ElfBoardELF1开发板作为核心硬件平台,利用USB接口连接的摄像头捕捉并识别车牌信息。一旦车牌成功识别,系统会触发绿灯指示,并将
    的头像 发表于 03-12 09:22 408次阅读
    项目分享|基于ELF 1开发板的<b class='flag-5'>车牌</b><b class='flag-5'>识别</b>系统

    君正T40车牌识别模组雷卯防雷防静电推荐图

    一、规格参数 车牌识别模组   CPU XBurst®2 up to 1.2GHz, Dual Core 内存 内置 1Gb MCU 600MHz RISC-V coprocessor, 32bit
    的头像 发表于 01-03 16:53 291次阅读
    君正T40<b class='flag-5'>车牌</b><b class='flag-5'>识别</b>模组雷卯防雷防静电推荐图

    如何修改内核设备树

    如何修改内核设备树
    的头像 发表于 12-14 14:06 736次阅读
    如何<b class='flag-5'>修改</b>内核设备树

    python如何修改列表中的每一个值数据

    。下面是示例代码: # 定义一个列表 my_list = [ 1 , 2 , 3 , 4 , 5 ] # 使用for循环遍历列表并修改元素值 for i in range ( len (my_list
    的头像 发表于 11-29 17:03 4675次阅读

    linux修改用户名的命令

    在Linux中修改用户名可以使用用户管理命令usermod来执行,下面将详细介绍如何修改Linux系统中的用户名。 用户名修改概述: 在Linux系统中,用户名是用于识别用户的唯一标识
    的头像 发表于 11-17 09:42 2282次阅读