Spaces:
Running
Running
import sys | |
sys.path.append('.') | |
import os | |
import base64 | |
import json | |
from ctypes import * | |
from alprsdk import initSDK, getLicensePlate, getMachineCode, freeLicenseResults, setActivation | |
import cv2 | |
import numpy as np | |
from flask import Flask, request, jsonify | |
licensePath = "license.txt" | |
license = "" | |
machineCode = getMachineCode() | |
print("\nmachineCode: ", machineCode.decode('utf-8')) | |
# Get a specific environment variable by name | |
license = os.environ.get("LICENSE") | |
# Check if the variable exists | |
if license is not None: | |
print("Value of LICENSE:") | |
else: | |
license = "" | |
try: | |
with open(licensePath, 'r') as file: | |
license = file.read().strip() | |
except IOError as exc: | |
print("failed to open license.txt: ", exc.errno) | |
print("license: ", license) | |
ret = setActivation(license.encode('utf-8')) | |
print("\nactivation: ", ret) | |
ret = initSDK() | |
print("init: ", ret) | |
app = Flask(__name__) | |
def mat_to_bytes(mat): | |
""" | |
Convert cv::Mat image data (NumPy array in Python) to raw bytes. | |
""" | |
# Encode cv::Mat as PNG bytes | |
is_success, buffer = cv2.imencode(".png", mat) | |
if not is_success: | |
raise ValueError("Failed to encode cv::Mat image") | |
return buffer.tobytes() | |
def alpr(): | |
result = "None" | |
license = {} | |
box = {} | |
pro = {} | |
file = request.files['file'] | |
try: | |
image = cv2.imdecode(np.frombuffer(file.read(), np.uint8), cv2.IMREAD_COLOR) | |
image = cv2.resize(image, (1024, 640)) | |
except: | |
result = "Failed to open file1" | |
response = jsonify({"result": result, "plate number": license, "coordinate": box, "score": pro}) | |
response.status_code = 200 | |
response.headers["Content-Type"] = "application/json; charset=utf-8" | |
return response | |
img_byte = mat_to_bytes(image) | |
recog_array = (c_int * 1024)() # Assuming a maximum of 256 rectangles | |
score_array = (c_float * 1024)() # Assuming a maximum of 256 rectangles | |
license_plate_ptr = POINTER(c_char_p)() | |
cnt = getLicensePlate(img_byte, len(img_byte), byref(license_plate_ptr), recog_array) | |
license_plate = [license_plate_ptr[i].decode('utf-8') for i in range(cnt)] | |
rectangles = [ | |
(recog_array[i * 4], recog_array[i * 4 + 1], recog_array[i * 4 + 2], recog_array[i * 4 + 3]) | |
for i in range(cnt)] | |
scores = [score_array[i] for i in range(cnt)] | |
freeLicenseResults(license_plate_ptr, cnt) | |
print("number: ", cnt, rectangles, license_plate) | |
if cnt == 0: | |
result = "Nothing Detected !" | |
response = jsonify({"result": result, "plate number": license, "coordinate": box, "score": pro}) | |
response.status_code = 200 | |
response.headers["Content-Type"] = "application/json; charset=utf-8" | |
return response | |
result = "License Plate Number Detected !" | |
for i in range(cnt): | |
license[f"vehicle {i + 1}"] = license_plate[i] | |
box[f"vehicle {i + 1}"] = rectangles[i] | |
pro[f"vehicle {i + 1}"] = scores[i] | |
response = jsonify({"result": result, "plate number": license, "coordinate": box, "score": pro}) | |
response.status_code = 200 | |
response.headers["Content-Type"] = "application/json; charset=utf-8" | |
return response | |
def alpr_base64(): | |
result = "None" | |
license = {} | |
box = {} | |
pro = {} | |
content = request.get_json() | |
try: | |
imageBase64 = content['base64'] | |
image_data = base64.b64decode(imageBase64) | |
np_array = np.frombuffer(image_data, np.uint8) | |
image = cv2.imdecode(np_array, cv2.IMREAD_COLOR) | |
image = cv2.resize(image, (1024, 640)) | |
except: | |
result = "Failed to open file1" | |
response = jsonify({"result": result, "plate number": license, "coordinate": box, "score": pro}) | |
response.status_code = 200 | |
response.headers["Content-Type"] = "application/json; charset=utf-8" | |
return response | |
img_byte = mat_to_bytes(image) | |
recog_array = (c_int * 1024)() # Assuming a maximum of 256 rectangles | |
score_array = (c_float * 1024)() # Assuming a maximum of 256 rectangles | |
license_plate_ptr = POINTER(c_char_p)() | |
cnt = getLicensePlate(img_byte, len(img_byte), byref(license_plate_ptr), recog_array) | |
license_plate = [license_plate_ptr[i].decode('utf-8') for i in range(cnt)] | |
rectangles = [ | |
(recog_array[i * 4], recog_array[i * 4 + 1], recog_array[i * 4 + 2], recog_array[i * 4 + 3]) | |
for i in range(cnt)] | |
scores = [score_array[i] for i in range(cnt)] | |
freeLicenseResults(license_plate_ptr, cnt) | |
# print("number: ", cnt, rectangles, license_plate) | |
if cnt == 0: | |
result = "Nothing Detected !" | |
response = jsonify({"result": result, "plate number": license, "coordinate": box, "score": pro}) | |
response.status_code = 200 | |
response.headers["Content-Type"] = "application/json; charset=utf-8" | |
return response | |
result = "License Plate Number Detected !" | |
for i in range(cnt): | |
license[f"vehicle {i + 1}"] = license_plate[i] | |
box[f"vehicle {i + 1}"] = rectangles[i] | |
pro[f"vehicle {i + 1}"] = scores[i] | |
response = jsonify({"result": result, "plate number": license, "coordinate": box, "score": pro}) | |
response.status_code = 200 | |
response.headers["Content-Type"] = "application/json; charset=utf-8" | |
return response | |
if __name__ == '__main__': | |
port = int(os.environ.get("PORT", 8080)) | |
app.run(host='0.0.0.0', port=port) |