import simplejson import tensorflow import visualization_utils as vis_util from PIL import Image import numpy as np from PIL import Image import numpy as np import label_map_util import tensorflow as tf from matplotlib import pyplot as plt import time import cv2 from numpy import asarray #import streamlit as st import gradio as gr #st.title("Tag_Diciphering") def prediction(image_path): total_time_start = time.time() #image_path = path_image def loadImageIntoNumpyArray(image): (im_width, im_height) = image.size if image.getdata().mode == "RGBA": image = image.convert('RGB') return asarray(image).reshape((im_height, im_width, 3)).astype(np.uint8) def main(image_path,model_path,model_PATH_TO_CKPT,path_to_labels): image = Image.open(image_path) image_np = loadImageIntoNumpyArray(image) image_np_expanded = np.expand_dims(image_np, axis=0) label_map = label_map_util.load_labelmap(path_to_labels) # print("label_map------->",type(label_map)) categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=100, use_display_name=True) category_index = label_map_util.create_category_index(categories) # print("category index-->",category_index) detection_graph = tf.Graph() with detection_graph.as_default(): od_graph_def = tf.compat.v1.GraphDef() with tf.compat.v2.io.gfile.GFile(model_PATH_TO_CKPT, 'rb') as fid: serialized_graph = fid.read() od_graph_def.ParseFromString(serialized_graph) tf.import_graph_def(od_graph_def, name='') sess = tf.compat.v1.Session(graph=detection_graph) # Input tensor is the image image_tensor = detection_graph.get_tensor_by_name('image_tensor:0') # Output tensors are the detection boxes, scores, and classes # Each box represents a part of the image where a particular object was detected detection_boxes = detection_graph.get_tensor_by_name('detection_boxes:0') # Each score represents level of confidence for each of the objects. # The score is shown on the result image, together with the class label. detection_scores = detection_graph.get_tensor_by_name('detection_scores:0') detection_classes = detection_graph.get_tensor_by_name('detection_classes:0') # Number of objects detected num_detections = detection_graph.get_tensor_by_name('num_detections:0') (boxes, scores, classes, num) = sess.run( [detection_boxes, detection_scores, detection_classes, num_detections], feed_dict={image_tensor: image_np_expanded}) vis_util.visualize_boxes_and_labels_on_image_array( image_np, np.squeeze(boxes), np.squeeze(classes).astype(np.int32), np.squeeze(scores), category_index, use_normalized_coordinates=True, line_thickness=8, min_score_thresh=0.1) #%matplotlib inline from matplotlib import pyplot as plt # print("boxes:",boxes) # print("class:",classes) objects = [] threshold = 0.5 # print("category:",category_index) boxes = boxes[0] for index, value in enumerate(classes[0]): object_dict = {} if scores[0, index] > threshold: object_dict["class"] = (category_index.get(value)).get('name') object_dict["score"] = round(scores[0, index] * 100,2) box = tuple(boxes[index].tolist()) ymin, xmin, ymax, xmax= box im_width,im_height = 360,360 left, right, top, bottom = (xmin * im_width, xmax * im_width, ymin * im_height, ymax * im_height) object_dict["box"] = (int(left), int(right), int(top), int(bottom)) objects.append(object_dict) image_orignal = Image.open(image_path) image_np_orignal = loadImageIntoNumpyArray(image_orignal) fig, ax = plt.subplots(1,2) fig.suptitle('Tag Deciphering') ax[0].imshow(image_np_orignal,aspect='auto'); ax[1].imshow(image_np,aspect='auto'); return objects,image_np image_path = image_path model_path = "//inference" model_PATH_TO_CKPT = "frozen_inference_graph.pb" path_to_labels = "tf_label_map.pbtxt" result,fig = main(image_path,model_path,model_PATH_TO_CKPT,path_to_labels) # print("result-",result) # list_to_be_sorted= [{'class': 'Y', 'score': 99.97, 'box': (157, 191, 269, 288)}, {'class': '6', 'score': 99.93, 'box': (158, 191, 247, 267)}, {'class': '9', 'score': 99.88, 'box': (156, 190, 179, 196)}, {'class': '4', 'score': 99.8, 'box': (156, 189, 198, 219)}, {'class': '1', 'score': 99.65, 'box': (157, 189, 222, 244)}, {'class': 'F', 'score': 63.4, 'box': (155, 185, 157, 175)}] newlist = sorted(result, key=lambda k: k['box'][3],reverse=False) text ='' for each in newlist: if(each['score']>65): text += each['class'] # print("text:",text) if(text!=""): text = text.replace("yellowTag", "") result = text else: result = "No Vertical Tag Detected" response = {"predictions": [result]} total_time_end = time.time() print("total time : ",round((total_time_end-total_time_start),2)) return simplejson.dumps(response),fig inputs = gr.inputs.Image(type = 'filepath') EXAMPLES = ["img1.jpg","img2.jpg","img6.jpg","img7.jpg","img8.jpg","img4.jpg","img10.jpg"] DESCRIPTION = """Tag Dicipher is to convert into understandable form. especially to decode the tags to make out the meaning of despite lack of clearness.""" outputs = [gr.outputs.Textbox(label = "Prediction"), gr.outputs.Image(type = 'numpy',label = 'Tag Diciphering')] article = "
" demo_app = gr.Interface( fn= prediction, inputs=inputs, outputs= outputs, title = "Tag Diciphering", description = DESCRIPTION, examples = EXAMPLES, article = article, #cache_example = True, #live = True, theme = 'huggingface' ) demo_app.launch()