justin2341's picture
Upload 2 files
f7d745e verified
import sys
sys.path.append('.')
import os
import base64
import json
from ctypes import *
from firesdk import *
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()
@app.route('/fire', methods=['POST'])
def fire():
result = "None"
object_name = {}
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 file"
response = jsonify({"result": result, "class": object_name, "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)
box_array = (c_int * 1024)() # Assuming a maximum of 256 rectangles
score_array = (c_float * 1024)() # Assuming a maximum of 256 rectangles
label_array = (c_int * 1024)()
cnt = getFireDetection(img_byte, len(img_byte), label_array, box_array, score_array)
rectangles = [
(box_array[i * 4], box_array[i * 4 + 1], box_array[i * 4 + 2], box_array[i * 4 + 3])
for i in range(cnt)]
scores = [score_array[i] for i in range(cnt)]
labels = [label_array[i] for i in range(cnt)]
# print(f"detection number: {cnt}, box: {rectangles}, labels: {labels}, scores: {scores} \n")
if cnt == 0:
result = "Nothing Detected !"
response = jsonify({"result": result, "class": object_name, "coordinate": box, "score": pro})
response.status_code = 200
response.headers["Content-Type"] = "application/json; charset=utf-8"
return response
result = "Fire or Smoke Detected !"
for i in range(cnt):
if labels[i] == 0:
object_name[f"id {i + 1}"] = "fire"
else:
object_name[f"id {i + 1}"] = "smoke"
box[f"id {i + 1}"] = rectangles[i]
pro[f"id {i + 1}"] = scores[i]
response = jsonify({"result": result, "class": object_name, "coordinate": box, "score": pro})
response.status_code = 200
response.headers["Content-Type"] = "application/json; charset=utf-8"
return response
@app.route('/fire_base64', methods=['POST'])
def fire_base64():
result = "None"
object_name = {}
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, "class": object_name, "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)
box_array = (c_int * 1024)() # Assuming a maximum of 256 rectangles
score_array = (c_float * 1024)() # Assuming a maximum of 256 rectangles
label_array = (c_int * 1024)()
cnt = getFireDetection(img_byte, len(img_byte), label_array, box_array, score_array)
rectangles = [
(box_array[i * 4], box_array[i * 4 + 1], box_array[i * 4 + 2], box_array[i * 4 + 3])
for i in range(cnt)]
scores = [score_array[i] for i in range(cnt)]
labels = [label_array[i] for i in range(cnt)]
# print(f"detection number: {cnt}, box: {rectangles}, labels: {labels}, scores: {scores} \n")
if cnt == 0:
result = "Nothing Detected !"
response = jsonify({"result": result, "class": object_name, "coordinate": box, "score": pro})
response.status_code = 200
response.headers["Content-Type"] = "application/json; charset=utf-8"
return response
result = "Fire or Smoke Detected !"
for i in range(cnt):
if labels[i] == 0:
object_name[f"id {i + 1}"] = "fire"
else:
object_name[f"id {i + 1}"] = "smoke"
box[f"id {i + 1}"] = rectangles[i]
pro[f"id {i + 1}"] = scores[i]
response = jsonify({"result": result, "class": object_name, "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)