首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
  • 1684XB-32T

    • 一、简介

      • AIBOX-1684XB-32简介
    • 二、快速上手

      • 初次使用
      • 网络配置
      • 磁盘使用
      • 内存分配
      • 风扇策略
      • 固件升级
      • 交叉编译
      • 模型量化
    • 三、应用开发

      • 开发简介

        • Sophgo SDK开发
        • SOPHON-DEMO简介
      • 大语言模型

        • 部署Llama3示例
        • Sophon LLM_api_server开发
        • 部署MiniCPM-V-2_6
        • Qwen-2-5-VL图片视频识别DEMO
        • Qwen3-chat-DEMO
        • Qwen3-Qwen Agent-MCP开发
        • Qwen3-langchain-AI Agent
      • 深度学习

        • ResNet(图像分类)
        • LPRNet(车牌识别)
        • SAM(通用图像分割基础模型)
        • YOLOv5(目标检测)
        • OpenPose(人体关键点检测)
        • PP-OCR(光学字符识别)
    • 四、资料下载

      • 资料下载
  • 1684X-416T

    • 简介

      • AIBOX-1684X-416简介
    • Demo简单操作指引

      • shimeta智慧监控demo的简单使用说明

LPRNet(车牌识别)

一、简介

LPRNet(License Plate Recognition via Deep Neural Networks),是一种轻量级卷积神经网络,可实现无需进行字符分割的端到端车牌识别。 LPRNet的优点可以总结为如下三点: (1)LPRNet不需要字符预先分割,车牌识别的准确率高、算法实时性强、支持可变长字符车牌识别。对于字符差异比较大的各国车牌均能够端到端进行训练。 (2)LPRNet是第一个没有使用RNN的实时轻量级OCR算法,能够在各种设备上运行,包括嵌入式设备。 (3)LPRNet具有足够好的鲁棒性,在视角和摄像畸变、光照条件恶劣、视角变化等复杂的情况下,仍表现出较好的识别效果

工程目录

LPRNET
│  libsophon_soc_0.5.1-LTS_aarch64.tar.gz	#编译所需依赖
│  sophon-mw-soc_0.12.0_aarch64.tar.gz		#编译所需依赖
│  stream_dev.tar							#交叉编译环境镜像
│
├─cpp		##C++例程所需文件
│  ├─dependencies
│  │  ├─include
│  │  │      bmnn_utils.h
│  │  │      bm_wrapper.hpp
│  │  │      ff_decode.hpp
│  │  │      json.hpp
│  │  │      utils.hpp
│  │  │
│  │  └─src
│  │          ff_decode.cpp
│  │
│  ├─lprnet_bmcv	##使用bmcv所需文件
│  │      CMakeLists.txt
│  │      lprnet.cpp
│  │      lprnet.hpp
│  │      main.cpp
│  │
│  └─lprnet_opencv	##使用opencv所需文件
│          CMakeLists.txt
│          lprnet.cpp
│          lprnet.hpp
│          main.cpp
│
├─datasets	##测试数据集
│  └─test
│
├─docs		#教程说明文档
│  │  LPRNet.md
│  │
│  └─images
│
├─models	#模型权重
│  └─BM1684X
│          lprnet_fp16_1b.bmodel
│          lprnet_fp32_1b.bmodel
│          lprnet_int8_1b.bmodel
│          lprnet_int8_4b.bmodel
│
├─python	#python例程所需文件
│      lprnet_bmcv.py
│      lprnet_opencv.py
│
└─tools		#开发中可能需要的工具
        compare_statis.py	##比较测试结果
        convert_imageset.py	##转换数据集
        eval_ccpd.py	##精度测量
        export_onnx.py	##导出onnx模型
        LPRNet.py

二、运行步骤

1.python例程

1.1配置python环境

bmcv环境(运行lprnet_bmcv.py环境)

修改.bashrc文件,将sophon的python环境引入

sudo vim ~/.bashrc

在文件末尾加上下面字段

export PYTHONPATH=$PYTHONPATH:/opt/sophon/libsophon-current/lib:/opt/sophon/sophon-opencv-latest/opencv-python/

:wq保存退出后重新加载终端

source ~/.bashrc

可echo $PYTHONPATH,检查是否是对应字段。

opencv环境(运行lprnet_opencv.py环境)
pip install opencv-python-headless

1.2推理测试

文件参数说明

lprnet_opencv.py和lprnet_bmcv.py的命令参数相同,以lprnet_opencv.py的推理为例,参数说明如下:

usage: lprnet_opencv.py [--input INPUT_PATH] [--bmodel BMODEL] [--dev_id DEV_ID]

--input: 测试数据路径,可输入整个图片文件夹的路径;
--bmodel: 用于推理的bmodel路径,默认使用stage 0的网络进行推理;
--dev_id: 用于推理的tpu设备id;
图片测试

图片测试实例如下,支持对整个图片文件夹进行测试,进入到对应脚本目录下,例:/data/LPRNet/python/,即可对需要文件进行调试。

 python3 lprnet_bmcv.py --input ../datasets/test --bmodel ../models/BM1684X/lprnet_fp32_1b.bmodel --dev_id 0

执行完成后,会将预测结果保存在results/lprnet_fp32_1b.bmodel_test_bmcv_python_result.json下,同时会打印预测结果、推理时间等信息,输出如下:

terminal

2.C++例程

1.交叉编译环境搭建

1.1编译环境

C++程序要在板端运行,是需要对依赖文件进行编译的。这里我们为了节省边缘设备的压力,选择使用一个X86的linux环境进行交叉编译。

搭建交叉编译环境,这里提供两种方式:

(1)通过apt安装交叉编译工具链:

如果您的系统和目标SoC平台的libc版本相同(可通过ldd --version命令进行查询),那么您可以使用如下命令安装:

sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

卸载方法:

sudo apt remove cpp-*-aarch64-linux-gnu

如果您的环境不满足上述要求,建议使用第(2)种方法。

(2)通过docker搭建交叉编译环境:

可以使用我们提供的docker镜像--stream_dev.tar作为交叉编译环境。

如果是首次使用Docker, 可执行下述命令进行安装和配置(仅首次执行):

sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

在下载好的镜像目录中加载镜像

docker load -i stream_dev.tar

可以通过docker images查看加载好的镜像,默认为stream_dev:latest

创建容器

docker run --privileged --name stream_dev -v $PWD:/workspace  -it stream_dev:latest
# stream_dev只是举个名字的例子, 请指定成自己想要的容器的名字

容器中的workspace目录会挂载到您运行docker run时所在的宿主机目录,您可以在此容器中编译项目。workspace目录在根目录下,该目录下的改动会映射到本地目录中对应文件的改动。

注意:创建容器时需要到soc-sdk(依赖编译环境)的父目录以及以上目录

1.2打包依赖文件
  1. 打包libsophon

    对libsophon_soc_x.y.z_aarch64.tar.gz,x.y.z表示版本号,并进行解压。

    # 创建依赖文件的根目录
    mkdir -p soc-sdk
    # 解压libsophon_soc_x.y.z_aarch64.tar.gz
    tar -zxf libsophon_soc_${x.y.z}_aarch64.tar.gz
    # 将相关的库目录和头文件目录拷贝到依赖文件根目录下
    cp -rf libsophon_soc_${x.y.z}_aarch64/opt/sophon/libsophon-${x.y.z}/lib soc-sdk
    cp -rf libsophon_soc_${x.y.z}_aarch64/opt/sophon/libsophon-${x.y.z}/include soc-sdk
  2. 打包sophon-ffmpeg和sophon-opencv

    对sophon-mw-soc_x.y.z_aarch64.tar.gz,x.y.z表示版本号,并进行解压。

    # 解压sophon-mw-soc_x.y.z_aarch64.tar.gz
    tar -zxf sophon-mw-soc_${x.y.z}_aarch64.tar.gz
    # 将ffmpeg和opencv的库目录和头文件目录拷贝到soc-sdk目录下
    cp -rf sophon-mw-soc_${x.y.z}_aarch64/opt/sophon/sophon-ffmpeg_${x.y.z}/lib soc-sdk
    cp -rf sophon-mw-soc_${x.y.z}_aarch64/opt/sophon/sophon-ffmpeg_${x.y.z}/include soc-sdk
    cp -rf sophon-mw-soc_${x.y.z}_aarch64/opt/sophon/sophon-opencv_${x.y.z}/lib soc-sdk
    cp -rf sophon-mw-soc_${x.y.z}_aarch64/opt/sophon/sophon-opencv_${x.y.z}/include soc-sdk
1.3进行交叉编译

交叉编译环境搭建好后,使用交叉编译工具链编译生成可执行文件,lprnet_opencv和lprnet_bmcv编译方法相同,以编译lprnet_opencv程序为例:

cd cpp/lprnet_opencv
mkdir build && cd build
#请根据实际情况修改-DSDK的路径,需使用绝对路径。
cmake -DTARGET_ARCH=soc -DSDK=/workspace/soc-sdk/ ..
make

编译完成后在对应的目录会生成.soc文件,如:cpp/lprnet_opencv/lprnet_opencv.soc,

t2

2.图片测试

需将交叉编译生成的可执行文件及所需的模型、测试数据拷贝到SoC平台(即BM1684X开发板)中测试。

参数说明

Usage: lprnet_opencv.soc [params]

        --bmodel (value:../../models/BM1684/lprnet_fp32_1b.bmodel)
                bmodel file path
        --dev_id (value:0)
                TPU device id
        --help (value:true)
                print help information.
        --input (value:../../datasets/test)
                input path, images directory

图片测试

图片测试实例如下,支持对整个图片文件夹进行测试.

##先对文件加上可执行权限
chmod +x lprnet_opencv.soc
./lprnet_opencv.soc --input=../../datasets/test --bmodel=../../models/BM1684X/lprnet_fp32_1b.bmodel --dev_id=0

执行完成后,会将预测结果保存在results/lprnet_fp32_1b.bmodel_test_opencv_cpp_result.json下,同时会打印预测结果、推理时间等信息,输出如下:

t3

在 GitHub 上编辑此页
上次更新:
贡献者: xwdong
Prev
ResNet(图像分类)
Next
SAM(通用图像分割基础模型)