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