You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

143 lines
3.9 KiB

from flask import Flask, request
from flask_restful import Resource, Api, abort
import json
import io
import base64
from PIL import Image
import sys,getpass
import datetime
import cv2
import ssl
from urllib.parse import urlencode
from urllib.request import Request, urlopen
if getpass.getuser() == "tedankara":
import tensorflow as tf
import numpy as np
import pickle
sys.path.insert(0, r'C:\Users\Tednokent01\Downloads\MyCity\traffic_analyzer')
from object_detection.utils import label_map_util
from object_detection.utils import visualization_utils as vis_util
app = Flask(__name__)
api = Api(app)
context = ssl._create_unverified_context()
score_dict = {
1: 1,
2: 1,
3: 1,
4: 1,
5: 1,
6: 1,
7: 1,
8: 1
}
with open("modules/databases/complaints.json","r") as f:
complaints = json.load(f)
if getpass.getuser() == "tedankara":
# Path to frozen detection graph. This is the actual model that is used for the object detection.
# List of the strings that is used to add correct label for each box.
PATH_TO_LABELS = 'modules/trainedModels/crack_label_map.pbtxt'
NUM_CLASSES = 8
label_map = label_map_util.load_labelmap(PATH_TO_LABELS)
categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=NUM_CLASSES, use_display_name=True)
category_index = label_map_util.create_category_index(categories)
def load_image_into_numpy_array(image):
(im_width, im_height) = image.size
return np.array(image.getdata()).reshape(
(im_height, im_width, 3)).astype(np.uint8)
def process_img(img_base64):
if getpass.getuser() == "tedankara":
url = 'https://127.0.0.1:5001/ai' # Set destination URL here
post_fields = {'img': img_base64,"type":"damage"} # Set POST fields here
request = Request(url, urlencode(post_fields).encode())
img = load_image_into_numpy_array(Image.open(io.BytesIO(base64.b64decode(img_base64))))
output_dict = json.loads(urlopen(request, context=context).read())
print(output_dict)
vis_util.visualize_boxes_and_labels_on_image_array(
img,
np.array(output_dict['detection_boxes']),
output_dict['detection_classes'],
output_dict['detection_scores'],
category_index,
instance_masks=output_dict.get('detection_masks'),
use_normalized_coordinates=True,
line_thickness=8,
min_score_thresh=0.3
)
defects = []
for index, i in enumerate(output_dict['detection_classes']):
score = output_dict['detection_scores'][index]
if score > 0.3:
defects.append(i)
priority = 0
for i in defects:
priority += score_dict[i]
if priority > 10:
priority = 10
buffered = io.BytesIO()
img = Image.fromarray(img, 'RGB')
img.save(buffered, format="JPEG")
img_str = base64.b64encode(buffered.getvalue())
return img_str.decode("ascii"),priority,defects
return img_base64, 7,["unprocessed"]
class Complaint(Resource):
def post(self):
args = request.form.to_dict()
complaint = args
complaint["response"] = {"status":False}
img_process,priority,tags = process_img(complaint["img"])
complaint["img"] = img_process
complaint["response"]["priority"] = str(priority)
complaint["tags"] = list(map(str, tags))
complaint["datetime"] = datetime.datetime.now().strftime('%b-%d-%I:%M %p-%G')
try:
complaints[complaint["id"]].append(complaint)
except KeyError:
complaints[complaint["id"]] = [complaint]
del complaints[complaint["id"]][-1]["id"]
with open('modules/databases/complaints.json', 'w') as complaints_file:
json.dump(complaints, complaints_file, indent=2)
class Complaints(Resource):
def post(self):
id = request.form["id"]
return complaints[id]
class ComplaintsUpdate(Resource):
def get(self):
args = request.args
complaints[args.get("id")][int(args.get("index"))]["response"]["message"] = args.get("message")
complaints[args["id"]][int(args["index"])]["response"]["status"] = True
with open('modules/databases/complaints.json', 'w') as complaints_file:
json.dump(complaints, complaints_file, indent=2)
return