From 02979e2cee235702fd426fceb325766a76c4f655 Mon Sep 17 00:00:00 2001 From: Stef Date: Thu, 10 Apr 2025 17:04:04 +0200 Subject: [PATCH] Basic server for demo, database manager wip --- dbmanager.py | 1 + server.py | 59 ++++++++++++++++++++++++++++++++++++++++++++++ uploads/image.jpg | Bin 0 -> 34129 bytes 3 files changed, 60 insertions(+) create mode 100644 dbmanager.py create mode 100644 uploads/image.jpg diff --git a/dbmanager.py b/dbmanager.py new file mode 100644 index 0000000..234685b --- /dev/null +++ b/dbmanager.py @@ -0,0 +1 @@ +from flask_sqlalchemy import SQLAlchemy diff --git a/server.py b/server.py index e69de29..eb87231 100644 --- a/server.py +++ b/server.py @@ -0,0 +1,59 @@ +from flask import Flask, request, jsonify +import os +from pyplatex import ANPR +import torch +from ultralytics.nn.tasks import DetectionModel +import asyncio + +torch.serialization.add_safe_globals({"DetectionModel": DetectionModel}) + +# Web Server +app = Flask(__name__) + +# Saving images locally +UPLOAD_FOLDER = "uploads" +os.makedirs(UPLOAD_FOLDER, exist_ok=True) + + +# Default app route +@app.route("/") +def home(): + return "Hello, World!" + + +# API to process vehicle +@app.route("/api", methods=["POST"]) +def data(): + # Check if image is present + if "image" not in request.files: + return jsonify({"error": "No file part"}), 400 + + file = request.files["image"] # get the image from the packet + + if file.filename == "" or not file.filename: + return jsonify({"error": "No selected file"}), 400 + + # Check if image ends in .jpg + if file.filename.lower().endswith(".jpg"): + filepath = os.path.join(UPLOAD_FOLDER, file.filename) + file.save(filepath) + print(asyncio.run(process_image(filepath))) + return jsonify( + { + "message": "File uploaded successfully", + "filename": file.filename, + "status": True, + } + ) + + return jsonify({"error": "Only JPEG files allowed"}), 400 + + +async def process_image(file: str): + anpr = ANPR() + plates = await anpr.detect(file) + return plates + + +if __name__ == "__main__": + app.run(host="192.168.137.1", port=2222, debug=True) diff --git a/uploads/image.jpg b/uploads/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80f57d6abd55680df56a3cff13bfebbc6d7b93c2 GIT binary patch literal 34129 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