Spaces:
Sleeping
Sleeping
import gradio as gr | |
import cv2 | |
import requests | |
import os | |
import torch | |
from PIL import Image | |
import tempfile | |
import numpy as np | |
import math | |
file_urls = [ | |
'https://www.dropbox.com/scl/fi/onrg1u9tqegh64nsfmxgr/lp2.jpg?rlkey=2vgw5n6abqmyismg16mdd1v3n&dl=1', | |
'https://www.dropbox.com/scl/fi/xq103ic7ovuuei3l9e8jf/lp1.jpg?rlkey=g7d9khyyc6wplv0ljd4mcha60&dl=1', | |
'https://www.dropbox.com/scl/fi/fagkh3gnio2pefdje7fb9/Non_Leprosy_210823_86_jpg.rf.5bb80a7704ecc6c8615574cad5d074c5.jpg?rlkey=ks8afue5gsx5jqvxj3u9mbjmg&dl=1', | |
'https://www.dropbox.com/scl/fi/gh4zotrzic5y00ok3crje/Non_Leprosy_210823_46_jpg.rf.76c20cb340114a98618ade07c3e6b413.jpg?rlkey=pxdjlhxipmsd12gr4veyg691v&dl=1', | |
'https://www.dropbox.com/scl/fi/r8vgo1xrledlsw7rxq4ar/Tropmed-91-216-g001.jpg?rlkey=6iajn3xoa6zsxtxh4exq4z3p5&dl=1', | |
'https://www.dropbox.com/scl/fi/kxv0q49e92h3fr7ihvqbu/Non_Leprosy_210823_8_jpg.rf.e2d44b96e1bb9b5111b780adec5ba94a.jpg?rlkey=g25iq6vbwqs1glusyv1lgv5a2&dl=1' | |
] | |
def download_file(url, save_name): | |
url = url | |
if not os.path.exists(save_name): | |
file = requests.get(url) | |
open(save_name, 'wb').write(file.content) | |
for i, url in enumerate(file_urls): | |
if 'mp4' in file_urls[i]: | |
download_file( | |
file_urls[i], | |
f"video.mp4" | |
) | |
else: | |
download_file( | |
file_urls[i], | |
f"image_{i}.jpg" | |
) | |
path = "obj.pt" | |
model = torch.hub.load('ultralytics/yolov5', 'custom', path=path, force_reload=True) | |
img_path = [['image_0.jpg'], ['image_1.jpg'],['image_2.jpg'],['image_3.jpg'],['image_4.jpg'],['image_5.jpg'],] | |
video_path = [['video.mp4']] | |
def show_preds_image_and_labels(image_path): | |
image = cv2.imread(image_path) | |
results = model(image_path) | |
pandas_result = results.pandas().xyxy[0] | |
array_results = pandas_result.to_numpy() | |
array_results = array_results.tolist() | |
#print raw results | |
print("\nRaw results: ", array_results) | |
array_bounding_box= [] | |
array_model_result = [] | |
array_model_confidence = [] | |
#for labelling bounding box | |
for item in array_results: | |
array_bounding_box.append([item[0],item[1],item[2],item[3]]) | |
array_model_result.append(item[6]) | |
array_model_confidence.append(str(round(item[4],1)*100)) | |
for numbers in range(len(array_model_result)): | |
x1, y1 = int(math.floor(array_bounding_box[numbers][0])), int(math.floor(array_bounding_box[numbers][1])) # top-left corner | |
x2, y2 = int(math.floor(array_bounding_box[numbers][2])), int(math.floor(array_bounding_box[numbers][3])) # bottom-right corner | |
if array_model_result[numbers] == "Lep": | |
# draw a rectangle over the image using the bounding box coordinates | |
#if the value of leprosy conf is < 0.45 then label it as NLp to show the max voting value | |
if float(array_model_confidence[numbers]) > 45.0: | |
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 0,255), 1) | |
cv2.putText(image, array_model_result[numbers] + " " + array_model_confidence[numbers] + "%", (x1, y1-5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,0,255), 1) | |
elif float(array_model_confidence[numbers]) < 45.0: | |
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255,0), 1) | |
cv2.putText(image, "Non Lep" + " " + array_model_confidence[numbers] + "%", (x1, y1-5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1) | |
elif array_model_result[numbers] == "Non Lep": | |
# draw a rectangle over the image using the bounding box coordinates | |
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255,0), 1) | |
cv2.putText(image, array_model_result[numbers] + " " + array_model_confidence[numbers] + "%", (x1, y1-5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1) | |
#labelling dictionary | |
array_results_conf_large = [] | |
for yolo_results in array_results: | |
if yolo_results[4] > 0.45: | |
array_results_conf_large.append(yolo_results) | |
print("Large results only: ",array_results_conf_large) | |
num_lep = 0 | |
confidence_lep = 0 | |
num_non_lep = 0 | |
confidence_non_lep = 0 | |
for item in array_results_conf_large: | |
if item[6] == "Lep": | |
num_lep+=1 | |
confidence_lep += item[4] | |
elif item[6] == "Non Lep": | |
num_non_lep+=1 | |
confidence_non_lep += item[4] | |
labels = {} | |
#if num_lep is more than non lep | |
if num_lep > num_non_lep: | |
labels["Leprosy"] = round(confidence_lep/num_lep,2) | |
if num_non_lep != 0: | |
labels["Non Leprosy"] = round(confidence_non_lep/num_non_lep,2) | |
else: | |
lower_score_lep_num = 0 | |
lower_score_lep_conf = 0.0 | |
for results_index in range(len(array_model_confidence)): | |
if array_model_result[results_index] == "Lep": | |
if float(array_model_confidence[results_index]) < 45.0: | |
lower_score_lep_num+=1 | |
lower_score_lep_conf+=float(array_model_confidence[results_index]) | |
if lower_score_lep_num != 0: | |
labels["Non Leprosy"] = round((lower_score_lep_conf/lower_score_lep_num)/100,2) | |
else: | |
labels["Non Leprosy"] = 0.0 | |
#if num_non_lep is more than lep | |
elif num_lep < num_non_lep: | |
labels["Non Leprosy"] = round(confidence_non_lep/num_non_lep,2) | |
if num_lep != 0: | |
labels["Leprosy"] = round(confidence_lep/num_lep,2) | |
else: | |
labels["Leprosy"] = 0.0 | |
#if num_non_lep and num_lep is equal but they are equal coz they are both 0 | |
elif num_lep == num_non_lep and num_lep == 0: | |
labels["Others"] = 0.9 | |
#if num_non_lep and num_lep is equal but they are equal coz they are both 0 | |
elif num_lep == num_non_lep: | |
#incase of a tie in quantity we compare the mean probability of each | |
confidence_lep = round(confidence_lep/num_lep,2) | |
confidence_non_lep = round(confidence_non_lep/num_non_lep,2) | |
if confidence_lep > confidence_non_lep: | |
labels["Leprosy"] = confidence_lep | |
labels["Non Leprosy"] = confidence_non_lep | |
elif confidence_lep < confidence_non_lep: | |
labels["Leprosy"] = confidence_lep | |
labels["Non Leprosy"] = confidence_non_lep | |
elif confidence_lep == confidence_non_lep: | |
labels["Leprosy"] = confidence_lep | |
labels["Non Leprosy"] = confidence_non_lep | |
return cv2.cvtColor(image, cv2.COLOR_BGR2RGB),labels | |
inputs_image = [ | |
gr.components.Image(type="filepath", label="Input Image"), | |
] | |
outputs_image = [ | |
gr.components.Image(type="numpy", label="Output Image"), | |
gr.components.Label(type="json", label="Labels with Confidence"), | |
] | |
interface_image = gr.Interface( | |
fn=show_preds_image_and_labels, | |
inputs=inputs_image, | |
outputs=outputs_image, | |
title="Leprosy Detection", | |
examples=img_path, | |
cache_examples=False, | |
) | |
gr.TabbedInterface( | |
[interface_image], | |
tab_names=['Image inference'] | |
).queue().launch() |