本文将带你了解如何使用 SmartJavaAI 快速搭建一套完整的车牌检测与识别系统,无需理解底层模型,也无需手动处理繁琐的预处理/后处理逻辑

SmartJavaAI是什么?

SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的 JAVA AI算法工具包,致力于帮助JAVA开发者零门槛使用各种AI算法模型,开发者无需深入了解底层实现,即可轻松在 Java 代码中调用人脸识别、目标检测、OCR 等功能。底层支持包括基于 DJL (Deep Java Library) 封装的深度学习模型,以及通过 JNI 接入的 C++/Python 算法,兼容多种主流深度学习框架如 PyTorch、TensorFlow、ONNX、Paddle 等,屏蔽复杂的模型部署与调用细节,开发者无需了解 AI 底层实现即可直接在 Java 项目中集成使用,后续将持续扩展更多算法,目标是构建一个“像 Hutool 一样简单易用”的 JAVA AI 通用工具箱

## 车牌识别

车牌识别(License Plate Recognition, 简称 LPR)是一种基于计算机视觉的技术,用于自动检测图像或视频中的车牌位置,并识别车牌上的字符信息,通常包括省份简称、字母和数字等内容

🚀 快速开始

我们使用 SmartJavaAI来实现车牌识别

1、引入 Maven 依赖

在项目的pom.xml的dependencies中加入以下内容(全部功能),也可以根据需求单独引入OCR模块,具体可以查看 SmartJavaAI官方文档

<dependency>
    <groupId>cn.smartjavaai</groupId>
    <artifactId>smartjavaai-all</artifactId>
    <version>1.0.22</version>
</dependency>

2、模型简介下载

支持的车牌检测模型如下:

模型名称 模型简介 模型开源网站
YOLOV5 基于YOLOV5训练,支持12种中文车牌 Github
yolov7-lite-t (超小型模型)YOLOv7-Lite 架构的轻量级车牌检测模型 Github
yolov7-lite-s YOLOv7-Lite 架构的轻量级车牌检测模型 Github

支持的车牌识别模型如下:

模型名称 模型简介 模型开源网站
PLATE_REC_CRNN CRNN中文字符识别 Github

3、车牌识别流程:

车牌检测 -> 车牌矫正 -> 车牌识别

4、获取车牌检测模型:

PlateDetModelConfig config = new PlateDetModelConfig();
config.setModelEnum(PlateDetModelEnum.YOLOV5);
config.setModelPath("/model/plate/yolov5_plate_detect.onnx");
config.setDevice(device);
PlateDetModel plateDetModel = PlateModelFactory.getInstance().getDetModel(config);

PlateDetModelConfig参数说明

字段名称 字段类型 必选 默认值 说明
modelEnum CommonDetModelEnum 车牌检测模型枚举
modelPath String 检测模型路径,需手动指定
confidenceThreshold float 0.3f 置信度阈值
iouThreshold float 0.5f iou阈值
topK int 100 检测结果数量
device DeviceEnum CPU 指定运行设备,支持 CPU/GPU
gpuId int 0 gpu设备ID 当device为GPU时生效
customParams ConcurrentHashMap<String, Object> 个性化配置

5、获取车牌识别模型:

PlateRecModelConfig recModelConfig = new PlateRecModelConfig();
recModelConfig.setModelEnum(PlateRecModelEnum.PLATE_REC_CRNN);
recModelConfig.setModelPath("/model/plate/plate_rec_color.onnx");
recModelConfig.setPlateDetModel(getPlateDetModel());
return PlateModelFactory.getInstance().getRecModel(recModelConfig);

PlateDetModelConfig参数说明

字段名称 字段类型 必选 默认值 说明
modelEnum CommonDetModelEnum 车牌识别模型枚举
modelPath String 检测模型路径,需手动指定
plateDetModel PlateDetModel 车牌检查模型
device DeviceEnum CPU 指定运行设备,支持 CPU/GPU
gpuId int 0 gpu设备ID 当device为GPU时生效
customParams ConcurrentHashMap<String, Object> 个性化配置

6、车牌识别方法

调用车牌识别方法将自动完成:车牌检测+车牌矫正+车牌文字识别

PlateRecModel plateRecModel = getPlateRecModel();
R<List<PlateInfo>> result = plateRecModel.recognize("src/main/resources/plate/Quicker_20220930_180856.png");
if(result.isSuccess()){
    log.info("车牌识别结果:{}", JsonUtils.toJson(result.getData()));
}else{
    log.error("车牌识别失败:{}", result.getMessage());
}

车牌识别方法(裁剪后图片)

R<List<PlateInfo>> recognizeCropped(Image image);

识别并绘制识别结果

PlateRecModel plateRecModel = getPlateRecModel();
R<Void> result = plateRecModel.recognizeAndDraw("src/main/resources/plate/single_green.jpg", "output/plate_recognized2.jpg");
if(result.isSuccess()){
    log.info("车牌识别成功");
}else{
    log.error("车牌识别失败:{}", result.getMessage());
}

PlateInfo字段说明

  • 返回并非json格式,仅用于字段讲解
[
  {
    "plateType": "SINGLE", //车牌类型:SINGLE-单层,DOUBLE-双层
    "plateNumber": "川A8H458", //车号
    "plateColor": "蓝色", //车牌颜色
    "detectionRectangle": {
      "x": 424,
      "y": 298,
      "width": 243,
      "height": 130
    },
    "box": {
      "topLeft": {
        "x": 424.96429443359375,
        "y": 351.9092102050781
      },
      "topRight": {
        "x": 646.1655883789062,
        "y": 297.97735595703125
      },
      "bottomRight": {
        "x": 669.95361328125,
        "y": 376.01025390625
      },
      "bottomLeft": {
        "x": 445.5194091796875,
        "y": 427.5689392089844
      }
    },
    "score": 0.9076154
  }
]

项目地址

  • 完整代码地址:examples
  • SmartJavaAI 开发文档:官方文档
  • SmartJavaAI Gitee开源地址:Gitee
  • SmartJavaAI Github开源地址:Github
  • SmartJavaAI GitCode开源地址:GitCode

更多推荐