
深夜的上海街头两台安全车停在路边气场十足。不远处一台挂着网约车标识的宝马缓缓驶过。如果你正在街拍这样的画面进入取景器人眼两秒就能完成判断哪台是安全车哪台是宝马车牌号是多少。但同样的判断交给计算机它要做到可没那么简单——需要“检测到车”“认出车型”“读出车牌”三个环节逐一打通。这篇文章不谈街拍构图也不聊车辆本身而是把这个真实街头场景当作一个技术入口讲清楚现代车辆识别系统的完整技术链路。你会发现看似一个“看图说话”的小功能背后涉及目标检测、细粒度图像识别、OCR 识别、工程化部署等一系列问题而这也正是智慧交通、网约车平台、安防监控里每天都在用的核心技术。读完你会得到三样东西第一车辆检测、车型识别、车牌识别这三个任务的核心概念和区别第二一套用 Python 可以直接运行的车辆识别示例代码第三把这类模型放进真实项目时必须注意的坑和工程建议。1. 这篇文章真正要解决的问题车辆识别不是一个新概念但最近几年它从“实验室里的论文题目”变成了“生产环境里的基础组件”。原因很简单摄像头越来越便宜算力越来越强开源模型越来越成熟而业务需求已经明确摆在面前。以文章开头那个场景为例背后对应着三类很现实的需求。第一类是特殊车辆识别。安全车、警车、救护车、消防车在智慧交通系统里有特殊优先级。比如路口的信号灯系统如果能自动识别正在接近的救护车就可以提前给出绿灯为急救争取时间。这类系统不能只“检测到一辆车”还必须判断“这辆车是什么类型的车”这是一个典型的细粒度识别问题。第二类是网约车平台的车辆合规校验。平台要确认注册车辆确实是指定车型车牌号和后台登记一致避免出现“注册的是宝马实际来接单的却是另一辆车”的情况。这种场景需要把车型识别和车牌识别结合起来在司机端拍照上传的瞬间完成核验。第三类是街拍与图像检索类应用。对大量街头照片自动打标把“宝马”“安全车”“网约车”这类属性自动提取成标签这是很多内容平台、图库系统、城市管理系统的共同需求。谁最应该读这篇文章我认为有三类读者一是做计算机视觉应用开发的同学想了解车辆识别从算法到工程的全貌二是做智慧交通、网约车、安防相关系统的后端工程师需要知道这类能力如何接入业务三是对深度学习感兴趣、想找一个完整可上手实战项目的学习者。这篇文章的核心判断是车辆识别不是一个独立算法而是一条流水线检测、细粒度分类、OCR 必须串联而且每一环的失败都会影响最终结果。理解这一点比背一个模型效果好得多。2. 车辆识别的核心概念与适用场景在动手写代码之前先把三个容易混淆的概念区分清楚。很多新手把“车辆识别”当成一个整体结果用通用目标检测模型去读车牌或者用车牌识别模型去判断车型最后效果都很差。2.1 目标检测Object Detection目标检测解决的是“车在哪里”的问题。输入一张图片输出若干个边界框每个框对应一个物体同时给出物体类别和置信度。通用检测模型的类别通常包含 car、bus、truck 等所以它能告诉你图里有车也能告诉你大概是什么大类别但无法告诉你这是宝马 3 系还是宝马 5 系。常用模型包括 YOLO 系列、SSD、Faster R-CNN。其中 YOLO 系列因为速度与精度的平衡最好在工业界用得最多。2.2 细粒度图像识别Fine-Grained Recognition细粒度识别解决的是“车是什么型号”的问题。同样是宝马3 系和 5 系外形差异并没有那么大普通分类模型很容易搞混。细粒度识别要做的是从非常相似的外观中找到能区分的细微特征比如大灯形状、进气格栅位置、腰线走向。这个任务比普通分类难得多。业界常用做法是在斯坦福汽车数据集Stanford Cars、CompCars 这类大规模车辆数据集上预训练再针对业务场景微调。复杂场景可能还要配合关键点定位、注意力机制来提升区分度。2.3 车牌识别License Plate Recognition车牌识别解决的是“这辆车是谁”的问题。它本身又是一个小流水线先定位车牌区域再把车牌区域里的字符识别出来。国内常见车牌是“省份简称 英文字母 数字”的组合蓝牌、绿牌新能源、黄牌格式不同识别器要能统一处理。常用的开源工具包括 HyperLPR、PaddleOCR 等。需要提醒的是通用 OCR 工具可以识别车牌但专门针对车牌优化的 LPR 模型在复杂光照、倾斜角度下的表现通常更好。2.4 三个任务的边界对比任务输入输出解决的问题典型工具目标检测整张图片边界框 类别车在哪、有几辆YOLO、SSD细粒度识别车辆裁剪图品牌/车型这是什么车ResNet、ViT 微调车牌识别车辆裁剪图或整图车牌字符串车是谁的HyperLPR、Paddle