当前位置:首页>python>我用 Python 搭建了一个车牌识别系统,无偿分享给大家!

我用 Python 搭建了一个车牌识别系统,无偿分享给大家!

  • 2026-09-08 22:26:11
我用 Python 搭建了一个车牌识别系统,无偿分享给大家!
一、为什么要做这个项目?
最近在学计算机视觉,发现网上大部分车牌识别教程要么只讲模型原理、要么只贴一段调用代码,真正能完整跑起来的项目少之又少。于是我用Python从零搭了一套前后端联动的车牌识别系统,今天把整套代码、思路、踩过的坑都无偿分享给大家,希望对同样在入门Python+CV的同学有帮助。
先说清楚:整套系统从后端到识别引擎,100%用Python写的,没有 Java没有C++,会Python基础语法就能看懂、能改。这也是我选Python的原因——上手快、生态全、AI/计算机视觉库最丰富。

二、技术栈一览(Python生态)后端框架
1.Django 3.2.18(Python Web 框架,自带后台管理)数据库;
2.MySQL 8.0识别引擎;
3.HyperLPR(一个纯 Python 的中文车牌识别库,模型权重已经训练好)图像处理;
4.OpenCV-Python + NumPy(Python 科学计算标配)前端;
5.Layui + ECharts(图表)+ 中国地图可视化;
整套依赖一句命令搞定,Python 3.8 以上都能跑:
pip install django mysqlclient opencv-python numpy pillow hyperlpr
三、核心功能展示
1. 三种识别入口
系统的「车牌识别」页面,三个按钮覆盖了所有使用场景:
(1)图片上传识别:选一张含车牌的图片,2 秒内返回车牌号 + 置信度摄像头实时识别;
(2)调用浏览器 getUserMedia,每秒自动抽帧上传识别,识别到就停视频导入识别;
(3)选个视频文件,每 0.5 秒抽一帧,把所有不重复车牌都收下来;
后端接收图片的 Python 视图长这样,Django 帮你把文件流都处理好:
def predict(request):    image = request.FILES.get('image')    file_path = save_file(image)  # 存到 static/uploadImg/    number, score = main(file_path)  # 调识别主流程    if number is None:        return JsonResponse({"error": 1, "message": "未识别到车牌"})    # 识别成功就入库    Car.objects.create(name=image.name, license_plate=number, ...)    return JsonResponse({"number": number, 'score': score, 'error': 0})
摄像头那段的核心 JS 很巧妙,用 setInterval + canvas.toBlob 实现低开销抽帧:
recognitionInterval = setInterval(function() {    ctx.drawImage(videoElement, 0, 0, canvas.width, canvas.height);    canvas.toBlob(function (blob) {        var formData = new FormData();        formData.append('image', blob, 'camera_capture_' + Date.now() + '.jpg');        $.ajax({ url: "/predict", data: formData, processData: false, contentType: false });    }, 'image/jpeg', 0.9);}, 1000);
2. 车牌管理 + 数据分析(Django ORM 一行搞定)
(1)analysis.html 的饼图 + 柱状图,按颜色和省份统计:
(2)map.html 中国地图,每个省份深浅代表识别数量:
(3)pics.html 车牌管理表格,每页 20 条,按时间倒序:
管理页我刚做了三个优化,分享给大家当模板抄——这就是 Python Django ORM 的优雅之处,一行代码搞定复杂排序:
results = Car.objects.all().order_by('-create_time', '-id')Car.objects.filter(name__contains=keyword).order_by('-create_time', '-id')
统计每个省份识别了多少辆,Django 的 annotate 一行搞定:
results = Car.objects.values('province').annotate(myCount=Count('province'))
3. 识别引擎:多策略+严格校验(纯 Python)
后端识别不是简单调一下 HyperLPR 就完事,而是六层策略+投票+格式校验,全部用Python实现:
策略1:HyperLPR SSD 原图检测;
策略2:CLAHE 增强后检测(OpenCV 的 cv2.createCLAHE);
策略3:放大 2 倍再检测;
策略4:HSV 颜色掩膜找车牌底色(蓝/绿/黄);
策略5:Canny 边缘+形态学找车牌框;
策略6:传统 Haar cascade;
四、系统实机演示
整套项目源码、数据库 SQL、前端模板、训练好的模型权重,全部无偿分享给大家,不收一分钱。拿去改毕设、做课程项目、自己学习都行。需要源码的同学,关注公众号私信联系我即可获取完整工程压缩包。
如果想更好的学懂Python,我推荐大家阅读《Python入门教程》:Python 入门经典,看完你就能看懂我这套系统的每一行

最新文章

随机文章