自学内容网 自学内容网

使用 Flask 和 PaddleOCR 的车牌识别项目安装与打包教程


本教程基于 Flask 和 PaddleOCR,提供一个简易的车牌识别服务。

功能包括:

  • 处理上传的图像文件,提取车牌文字信息。
  • 通过 PaddleOCR 提供高效的 OCR 识别能力。
  • 返回 JSON 格式的车牌识别结果。

本文将详细介绍如何安装环境、配置依赖、实现车牌识别逻辑,以及将项目打包提供给运维。


一、环境安装

1. 安装 Python

确保系统已安装 Python 3.7 或更高版本。

  • 下载 Python:Python 官网
  • 安装时勾选 Add Python to PATH,确保命令行可直接使用 pythonpip

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

from flask import Flask, request, jsonify
from paddleocr import PaddleOCR
from io import BytesIO
from PIL import Image
import numpy as np

app = 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"}), 400

    try:
        # 从上传的文件读取图片并处理
        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)}), 500

if __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"]
}

如果需要进一步验证车牌格式,可以在代码中加入正则表达式检查,例如:

import re

def 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}")

五、提供给运维的打包文件

最终交付给运维的文件应包括:

  1. 打包生成的可执行文件 app.exe
  2. README.md,说明如何运行服务。
  3. 一个简单的脚本(可选),方便运维启动服务:
@echo off
start app.exe
pause

原文地址:https://blog.csdn.net/hyc010110/article/details/145043079

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!