news 2026/6/9 19:41:14

【上海晶珩睿莓 1 单板计算机】车牌识别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【上海晶珩睿莓 1 单板计算机】车牌识别

【上海晶珩睿莓 1 单板计算机】车牌识别

本文介绍了上海晶珩睿莓 1 单板计算机结合 LPRNet 算法和 Ultralytics 库实现物车牌识别的项目设计,包括环境部署、软件包安装、模型获取、关键代码以及板端推理等相关流程。

项目介绍

  • 准备工作:OpenCV 安装、Ultralytics 软件包安装、预训练模型下载等;
  • 车牌识别:采用 LPRNet 算法及 ONNX 模型实现车牌识别的板端推理;

为了快速实现图像分类,需完成 OpenCV 部署和 Ultralytics 软件包的安装等操作。

准备工作

包括硬件连接、虚拟环境创建、OpenCV 安装、Ultralytics 库部署等。

硬件连接

  • 连接 WiFi 实现无线网络通信;
  • 使用 Micro-USB 数据线实现设备供电;

OpenCV 安装

OpenCV 是一个开源的计算机视觉库,广泛应用于图像处理、视频分析和机器学习等领域。

  • 安装 numpy 和 opencv
pipinstall-Upip numpy# 安装 numpypipinstallopencv-python opencv-contrib-python# opencv 主模块及 contrib
  • 验证安装
python3-c"import cv2,sys,numpy;print('OpenCV:',cv2.__version__,'NumPy:',numpy.__version__)"
  • 输出版本号

详见:OpenCV .

字体安装

为了方便显示中文车牌,安装 CJK 字体

sudoaptinstallfonts-noto-cjk fc-list|grep-i"Noto Sans CJK"|head-3

记录字体所在路径,如/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc以便调用。

Ultralytics 部署

Ultralytics 基于多年在计算机视觉和人工智能领域的基础研究,打造出尖端、先进的 YOLO 模型;具有速度快精度高操作简便等特点。

在目标检测、跟踪、实例分割、图像分类 和 姿态估计 等任务中表现出色。

  • 安装 ultralytics 软件包
sudoaptinstallpython3-dev python3-pip libopenblas-devsudopipinstallpython3-torchsudopipinstallultralytics
  • 验证安装
python3 -c "import ultralytics, sys, torch; print('✅ ultralytics', ultralytics.__version__, '| torch', torch.__version__, '| Python', sys.version.split()[0])"
  • 输出相应版本号

详见:ultralytics .

车牌识别

车牌识别网络(License Plate Recognition Network,LPRNet)是一种专为车牌识别设计的深度学习模型。

它采用端到端的训练方法,能够直接从原始图像中识别出车牌文本,无需进行传统的字符分割步骤。

这种设计使得 LPRNet 在处理车牌识别任务时更加高效和准确,特别是在面对复杂背景或不同国家的车牌样式时。

详见:LPRNet GitHub .

模型

下载所需模型文件;

wget https://github.com/h030162/PlateRecognition/blob/main/ocr_rec.py wget https://github.com/h030162/PlateRecognition/blob/main/license_models/dict.txt wget https://github.com/h030162/PlateRecognition/blob/main/license_models/license_ocr.onnx wget https://github.com/h030162/PlateRecognition/blob/main/license_models/y11n-pose_plate_best.onnx

将文件存放在对应路径

license_plate_recognition ├── img │ ├── yue.jpg ├── lpr_onnx.py ├── model │ ├── dict.txt │ ├── license_ocr.onnx │ └── y11n-pose_plate_best.onnx └── ocr_rec.py

参考:PlateRecognition | Github .

流程图

完成

开始

载入图片

初始化

YOLO检测车牌

遍历列表

裁剪车牌区域

OCR识别文字

收集结果

绘制标签&外框

显示结果

退出

代码

终端执行touch lpr_onnx.py新建程序文件,并添加如下代码

#!/usr/bin/env python# -*- coding: utf-8 -*-importnumpyasnpimportcv2fromocr_recimportTextRecognizer,init_argsfromPILimportImage,ImageDraw,ImageFontfromultralyticsimportYOLOimportwarnings warnings.filterwarnings("ignore")# ========== figure ==========#IMG_FILE = "./img/yue.jpg"args=init_args().parse_args()IMG_FILE=args.image_pathor'./img/test.jpg'# image path# 使用方法:python lpr_onnx.py --image_path ./img/jing.jpg# =========== class ===========classPlateRecognizer:def__init__(self,det_model_path="./model/y11n-pose_plate_best.onnx"):self.model_det=YOLO(det_model_path)parser=init_args().parse_args()self.model_ocr=TextRecognizer(parser)defrecognize(self,img):plate_objs=[]plates=self.model_det(img,verbose=False)forplate,confinzip(plates[0].boxes.xyxy,plates[0].boxes.conf):x1,y1,x2,y2=map(int,plate.cpu())plate_img=img[y1:y2,x1:x2]try:rec_res,_=self.model_ocr([plate_img])exceptExceptionasE:print(E)continueiflen(rec_res[0])>0:plate_objs.append({'text':rec_res[0][0],'score_text':rec_res[0][1],'bbox':[x1,y1,x2,y2],'score_bbox':conf.cpu().numpy().item()})returnplate_objsdefDrawPlateNum(img,plate_num,x1,y1):img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)img_pil=Image.fromarray(img_rgb)draw=ImageDraw.Draw(img_pil)font=ImageFont.truetype("/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc",40)# 系统字体# -------- 优化标签显示,增加填充背景,兼容新版 Pillow ----------------left,top,right,bottom=draw.textbbox((0,0),plate_num,font=font)tw,th=right-left,bottom-top# 蓝色填充条draw.rectangle([(x1,y1-th-8),(x1+tw,y1)],fill=(0,0,255))# BGR 蓝色# 绿色文字draw.text((x1,y1-th-16),plate_num,font=font,fill=(0,255,0))# BGR 绿色returncv2.cvtColor(np.array(img_pil,dtype=np.uint8),cv2.COLOR_RGB2BGR)# ========== 主程序 ==========defmain():img=cv2.imread(IMG_FILE)ifimgisNone:print(f"未找到图片:{IMG_FILE}")cv2.waitKey(0)returnrecognizer=PlateRecognizer()plates=recognizer.recognize(img)forpinplates:x1,y1,x2,y2=p['bbox']cv2.rectangle(img,(x1,y1),(x2,y2),(255,0,0),2)img=DrawPlateNum(img,p['text'],x1,y1)print(f"车牌:{p['text']}置信度:{p['score_text']:.4f}框置信度:{p['score_bbox']:.4f}")cv2.imshow("LPR",img)cv2.waitKey(0)cv2.destroyAllWindows()if__name__=="__main__":main()

保存代码。

效果

  • 终端执行python lpr_onnx.py --image_path ./img/jing.jpg指令,对目标车牌进行识别
  • 终端打印识别到的车牌号、置信度等信息

  • 弹窗显示识别结果

  • 更多测试效果

总结

本文介绍了上海晶珩睿莓 1 单板计算机结合 LPRNet 算法和 Ultralytics 库实现车牌识别的项目设计,包括环境搭建、预训练模型、工程代码和效果演示等,为相关产品在边缘 AI 领域的快速开发和应用设计提供了参考。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 7:07:13

Blockly Developer Tools 完整指南:5个步骤轻松创建自定义编程块

Blockly Developer Tools 完整指南:5个步骤轻松创建自定义编程块 【免费下载链接】blockly-devtools 项目地址: https://gitcode.com/gh_mirrors/bl/blockly-devtools Blockly Developer Tools 是一个功能强大的开源开发者工具,专门为 Blockly 图…

作者头像 李华
网站建设 2026/6/5 4:07:32

Node.js setImmediate优化异步事件调度

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 Node.js setImmediate深度优化:重塑异步事件调度的效率与可靠性目录Node.js setImmediate深度优化:重塑异…

作者头像 李华
网站建设 2026/5/25 6:03:26

强力指南:北邮LaTeX模板让毕业设计排版轻松搞定

强力指南:北邮LaTeX模板让毕业设计排版轻松搞定 【免费下载链接】BUPTBachelorThesis A LaTeX Template for BUPT Bachelor Thesis (updated in 2023) 项目地址: https://gitcode.com/gh_mirrors/bup/BUPTBachelorThesis 还在为毕业设计论文的格式问题烦恼吗…

作者头像 李华
网站建设 2026/6/6 5:12:47

Qwen3-VL与网盘直链下载助手联动实现模型热更新机制

Qwen3-VL与网盘直链下载助手联动实现模型热更新机制 在AI大模型快速迭代的今天,一个现实问题困扰着许多开发者:如何在不中断服务、不占用大量本地存储的前提下,快速切换和使用最新版本的视觉语言模型?尤其当模型动辄数十GB时&…

作者头像 李华
网站建设 2026/6/8 9:59:17

MySQL Connector/J终极指南:5分钟快速掌握Java数据库连接技术

MySQL Connector/J终极指南:5分钟快速掌握Java数据库连接技术 【免费下载链接】mysql-connector-j MySQL Connector/J是一个开源的MySQL数据库连接器,用于在Java应用程序中与MySQL数据库进行交互。 - 功能:MySQL数据库连接器;Java…

作者头像 李华
网站建设 2026/6/7 17:03:23

Qwen3-VL文本理解能力媲美纯LLM?图文融合无损统一方案揭晓

Qwen3-VL:如何实现图文理解的无损统一? 在智能客服系统中,一个用户上传了手机屏幕截图并提问:“为什么我无法登录?”传统OCR工具能识别出界面上的文字,却难以判断“登录按钮呈灰色”这一关键视觉状态&#…

作者头像 李华