文章目录
- 一、环境安装
- 1. 安装 Python
- 2. 创建虚拟环境
- 3. 安装依赖
- 二、项目实现
- 代码文件 `app.py`
- 三、打包流程
- 1. 安装 `pyinstaller`
- 2. 生成可执行文件
- 3. 验证可执行文件
- 四、测试车牌识别服务
- 1. 使用 Postman 或 curl 测试
- 2. 校验车牌
- 五、提供给运维的打包文件
本教程基于 Flask 和 PaddleOCR,提供一个简易的车牌识别服务。
功能包括:
- 处理上传的图像文件,提取车牌文字信息。
- 通过 PaddleOCR 提供高效的 OCR 识别能力。
- 返回 JSON 格式的车牌识别结果。
本文将详细介绍如何安装环境、配置依赖、实现车牌识别逻辑,以及将项目打包提供给运维。
一、环境安装
1. 安装 Python
确保系统已安装 Python 3.7 或更高版本。
- 下载 Python:Python 官网
- 安装时勾选 Add Python to PATH,确保命令行可直接使用
python
和pip
。
2. 创建虚拟环境
推荐使用虚拟环境隔离依赖。
python -m venv venv
激活虚拟环境:
- Windows:
.\venv\Scripts\activate
- Linux/Mac:
source ./venv/bin/activate
3. 安装依赖
首先确保 pip
是最新版本:
pip install --upgrade pip
安装必要的依赖包:
pip install flask paddleocr pillow numpy
注意:如果系统的 CPU 不支持 AVX 指令集,请使用以下命令安装无 AVX 支持的 PaddleOCR:
pip install paddlepaddle==2.5.0 -f https://www.paddlepaddle.org.cn/whl/cpu/noavx.html
二、项目实现
代码文件 app.py
python">from flask import Flask, request, jsonify
from paddleocr import PaddleOCR
from io import BytesIO
from PIL import Image
import numpy as npapp = Flask(__name__)# 初始化 PaddleOCR 模型
ocr = PaddleOCR(use_angle_cls=True, lang="ch")@app.route('/recognize', methods=['POST'])
def recognize():# 获取上传的文件file = request.files.get('image')# 如果没有上传文件,返回错误信息if not file:return jsonify({"error": "No file uploaded"}), 400try:# 从上传的文件读取图片并处理image = Image.open(BytesIO(file.read())).convert("RGB")image_np = np.array(image)# 使用 PaddleOCR 进行车牌识别result = ocr.ocr(image_np, cls=True)# 提取识别结果中的车牌信息plates = [line[1][0] for line in result[0]] # 提取所有识别的文字return jsonify({"plates": plates})except Exception as e:# 发生异常时返回错误信息return jsonify({"error": str(e)}), 500if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
三、打包流程
为了方便运维,我们需要将项目打包为可执行文件,便于分发。
1. 安装 pyinstaller
使用 pyinstaller
将项目打包为单独的可执行文件。
pip install pyinstaller
2. 生成可执行文件
在项目根目录下运行以下命令:
pyinstaller --onefile app.py
此命令将在 dist
文件夹中生成一个名为 app.exe
的文件。
3. 验证可执行文件
进入 dist
文件夹并运行打包后的文件:
cd dist
./app.exe
如果一切正常,服务将启动,监听 http://0.0.0.0:5000
。
四、测试车牌识别服务
1. 使用 Postman 或 curl 测试
可以使用以下命令测试服务:
curl -X POST -F "image=@<path_to_image>" http://127.0.0.1:5000/recognize
或者通过 Postman 工具发送图片文件至 /recognize
端点。
2. 校验车牌
识别结果通过 JSON 返回,例如:
{"plates": ["粤B12345"]
}
如果需要进一步验证车牌格式,可以在代码中加入正则表达式检查,例如:
python">import redef validate_plate(plate):pattern = r'^[一-龥][A-Z][0-9A-Z]{5}$'return bool(re.match(pattern, plate))# 使用示例
for plate in plates:if validate_plate(plate):print(f"Valid plate: {plate}")else:print(f"Invalid plate: {plate}")
五、提供给运维的打包文件
最终交付给运维的文件应包括:
- 打包生成的可执行文件
app.exe
。 README.md
,说明如何运行服务。- 一个简单的脚本(可选),方便运维启动服务:
@echo off
start app.exe
pause