一个本地运行的中国车牌识别小工具:
- 🎥 拍照识别:调用摄像头实时预览,一键抓拍并自动识别车牌
- 📁 图像导入:也可从本地图片识别
- 📋 表格存储:识别结果(车牌号 / 置信度 / 时间 / 图片路径)持久化到 SQLite
- ✏️ 手动更正:识别错误时可双击或点击「修正」编辑车牌号,并填写备注
- 💾 CSV 导出:一键导出全部记录
plate-recognizer/
├── src/
│ ├── __init__.py
│ ├── main.py # 入口
│ ├── gui.py # Tkinter 主界面
│ ├── camera.py # OpenCV 摄像头封装
│ ├── recognizer.py # 识别引擎 (hyperlpr3 / easyocr / mock)
│ ├── plate_validator.py # 中国车牌格式校验
│ └── db.py # SQLite 仓储 (Repository Pattern)
├── tests/
│ └── test_core.py # 单元测试
├── data/ # 运行时生成 (SQLite + 抓拍图)
├── requirements.txt
└── README.md
cd plate-recognizer
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt若
hyperlpr3安装失败(如 macOS / Apple Silicon),程序会自动回退到easyocr; 如果两者都不可用,仍可手动输入车牌号录入。
python src/main.py
# 或
python -m src.mainpython -m unittest discover -s tests -v测试覆盖:
- 车牌格式校验(普通 / 新能源 / 异常输入)
- SQLite 仓储增删改查、CSV 导出、不可变更新模式
- 启动后顶部预览实时摄像头画面
- 点击 「📷 抓拍并识别」:自动保存 JPG → 调用 OCR → 入库
- 若识别结果不合规,会弹窗提示并允许立即修正
- 在右侧表格中:
- 双击任一行 → 修正车牌号
- 选中后点击 「✏️ 修正选中 / 🗑 删除选中 / 🖼 查看图像」
- 点击 「💾 导出 CSV」 将全部记录导出(兼容 Excel,UTF-8 BOM)
- 小文件、高内聚:每个模块 < 250 行,单一职责
- 不可变数据:
PlateRecord为@dataclass(frozen=True),更新走replace() - Repository 模式:业务逻辑只依赖
PlateRepository接口 - 引擎可插拔:
RecognitionEngine协议 + 自动回退(hyperlpr3 → easyocr → manual) - 后台识别:OCR 在后台线程执行,UI 不卡顿
- 输入校验:所有手动输入车牌均经过格式校验
- 错误处理:摄像头 / 文件 / OCR 异常均有用户可读提示