Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
from openvino.runtime import Core
|
| 2 |
import gradio as gr
|
| 3 |
import numpy as np
|
| 4 |
from PIL import Image
|
|
@@ -6,14 +6,101 @@ import cv2
|
|
| 6 |
from torchvision import models,transforms
|
| 7 |
from typing import Iterable
|
| 8 |
import gradio as gr
|
|
|
|
| 9 |
from gradio.themes.base import Base
|
| 10 |
from gradio.themes.utils import colors, fonts, sizes
|
| 11 |
import time
|
| 12 |
-
|
| 13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
# Read model to OpenVINO Runtime
|
| 15 |
-
model_ir = core.read_model(model="Davinci_eye.onnx")
|
| 16 |
-
compiled_model_ir = core.compile_model(model=model_ir, device_name='CPU')
|
| 17 |
|
| 18 |
tfms = transforms.Compose([
|
| 19 |
transforms.ToTensor(),
|
|
@@ -21,8 +108,8 @@ tfms = transforms.Compose([
|
|
| 21 |
])
|
| 22 |
color_map={
|
| 23 |
(251,244,5): 1,
|
| 24 |
-
(37,250,5):2,
|
| 25 |
-
(0,21,209):3,
|
| 26 |
(172,21,2): 4,
|
| 27 |
(172,21,229): 5,
|
| 28 |
(6,254,249): 6,
|
|
@@ -52,7 +139,7 @@ color_map={
|
|
| 52 |
(20,20,0):30,
|
| 53 |
(20,20,0):31,
|
| 54 |
}
|
| 55 |
-
|
| 56 |
items = {
|
| 57 |
1: "HarmonicAce_Head",
|
| 58 |
2: "HarmonicAce_Body",
|
|
@@ -127,27 +214,29 @@ class Davinci_Eye(Base):
|
|
| 127 |
|
| 128 |
davincieye = Davinci_Eye()
|
| 129 |
|
| 130 |
-
colormap={v:[i for i in k] for k,v in color_map.items()}
|
| 131 |
|
| 132 |
def convert_mask_to_rgb(pred_mask):
|
|
|
|
| 133 |
rgb_mask=np.zeros((pred_mask.shape[0],pred_mask.shape[1],3),dtype=np.uint8)
|
| 134 |
for k,v in colormap.items():
|
| 135 |
rgb_mask[pred_mask==k]=v
|
| 136 |
return rgb_mask
|
| 137 |
|
| 138 |
|
| 139 |
-
|
| 140 |
def segment_image(filepath):
|
| 141 |
image=cv2.imread(filepath)
|
| 142 |
image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
|
| 143 |
-
image = cv2.resize(image, (
|
| 144 |
-
x=tfms(image.copy())
|
|
|
|
|
|
|
| 145 |
#ort_input={ort_session.get_inputs()[0].name:x.cpu().unsqueeze(0).float().numpy()}
|
| 146 |
#out=ort_session.run(None,ort_input)
|
| 147 |
-
|
| 148 |
-
pred_mask=
|
|
|
|
| 149 |
color_mask=convert_mask_to_rgb(pred_mask)
|
| 150 |
-
masked_image=cv2.addWeighted(image,0.
|
| 151 |
pred_keys=pred_mask[np.nonzero(pred_mask)]
|
| 152 |
objects=[items[k] for k in pred_keys]
|
| 153 |
surgery_items=np.unique(np.array(objects),axis=0)
|
|
@@ -156,6 +245,7 @@ def segment_image(filepath):
|
|
| 156 |
surg+=item+","+" "
|
| 157 |
return Image.fromarray(masked_image),surg
|
| 158 |
|
|
|
|
| 159 |
demo=gr.Interface(fn=segment_image,inputs=gr.Image(type='filepath'),
|
| 160 |
outputs=[gr.Image(type="pil"),gr.Text()],
|
| 161 |
examples=["R001_ch1_video_03_00-29-13-03.jpg",
|
|
|
|
| 1 |
+
#from openvino.runtime import Core
|
| 2 |
import gradio as gr
|
| 3 |
import numpy as np
|
| 4 |
from PIL import Image
|
|
|
|
| 6 |
from torchvision import models,transforms
|
| 7 |
from typing import Iterable
|
| 8 |
import gradio as gr
|
| 9 |
+
from torch import nn
|
| 10 |
from gradio.themes.base import Base
|
| 11 |
from gradio.themes.utils import colors, fonts, sizes
|
| 12 |
import time
|
| 13 |
+
import intel_extension_for_pytorch as ipex
|
| 14 |
|
| 15 |
+
#core = Core()
|
| 16 |
+
def conv(in_channels, out_channels):
|
| 17 |
+
return nn.Sequential(
|
| 18 |
+
nn.ReflectionPad2d(1),
|
| 19 |
+
nn.Conv2d(in_channels, out_channels, kernel_size=3),
|
| 20 |
+
nn.BatchNorm2d(out_channels),
|
| 21 |
+
nn.ReLU(inplace=True)
|
| 22 |
+
)
|
| 23 |
+
class resconv(nn.Module):
|
| 24 |
+
def __init__(self,in_features,out_features):
|
| 25 |
+
super(resconv,self).__init__()
|
| 26 |
+
self.block=nn.Sequential(
|
| 27 |
+
nn.ReflectionPad2d(1),
|
| 28 |
+
nn.Conv2d(in_features,out_features,3),
|
| 29 |
+
nn.InstanceNorm2d(out_features),
|
| 30 |
+
nn.ReLU(inplace=True),
|
| 31 |
+
nn.ReflectionPad2d(1),
|
| 32 |
+
nn.Conv2d(out_features,out_features,3),
|
| 33 |
+
nn.InstanceNorm2d(out_features),
|
| 34 |
+
nn.ReLU(inplace=True),
|
| 35 |
+
|
| 36 |
+
)
|
| 37 |
+
def forward(self,x):
|
| 38 |
+
return x+self.block(x)
|
| 39 |
+
|
| 40 |
+
def up_conv(in_channels, out_channels):
|
| 41 |
+
return nn.Sequential(
|
| 42 |
+
nn.ConvTranspose2d(in_channels, out_channels, kernel_size=2, stride=2),
|
| 43 |
+
nn.BatchNorm2d(out_channels),
|
| 44 |
+
nn.ReLU(inplace=True)
|
| 45 |
+
)
|
| 46 |
+
|
| 47 |
+
class ResnUnet(nn.Module):
|
| 48 |
+
def __init__(self, out_channels=32,number_of_block=9):
|
| 49 |
+
super().__init__()
|
| 50 |
+
out_features=64
|
| 51 |
+
channels=3
|
| 52 |
+
model=[nn.ReflectionPad2d(3),nn.Conv2d(3,out_features,7),nn.InstanceNorm2d(out_features),
|
| 53 |
+
nn.ReLU(inplace=True),nn.MaxPool2d(3,stride=2)]
|
| 54 |
+
model+=[resconv(out_features,out_features)]
|
| 55 |
+
model+=[nn.Conv2d(out_features,out_features*2,3,stride=2,padding=1),nn.InstanceNorm2d(out_features),
|
| 56 |
+
nn.ReLU(inplace=True)]
|
| 57 |
+
model+=[resconv(out_features*2,out_features*2)]
|
| 58 |
+
model+=[nn.Conv2d(out_features*2,out_features*4,3,stride=2,padding=1),nn.InstanceNorm2d(out_features),
|
| 59 |
+
nn.ReLU(inplace=True)]
|
| 60 |
+
model+=[resconv(out_features*4,out_features*4)]
|
| 61 |
+
model+=[nn.Conv2d(out_features*4,out_features*8,3,stride=2,padding=1),nn.InstanceNorm2d(out_features),
|
| 62 |
+
nn.ReLU(inplace=True)]
|
| 63 |
+
model+=[resconv(out_features*8,out_features*8)]
|
| 64 |
+
out_features*=8
|
| 65 |
+
input_features=out_features
|
| 66 |
+
for _ in range(4):
|
| 67 |
+
out_features//=2
|
| 68 |
+
model+=[
|
| 69 |
+
nn.Upsample(scale_factor=2),
|
| 70 |
+
nn.Conv2d(input_features,out_features,3,stride=1,padding=1),
|
| 71 |
+
nn.InstanceNorm2d(out_features),
|
| 72 |
+
nn.ReLU(inplace=True)
|
| 73 |
+
]
|
| 74 |
+
input_features=out_features
|
| 75 |
+
model+=[nn.ReflectionPad2d(3),nn.Conv2d(32,32,7),
|
| 76 |
+
]
|
| 77 |
+
self.model=nn.Sequential(*model)
|
| 78 |
+
def forward(self,x):
|
| 79 |
+
return self.model(x)
|
| 80 |
+
|
| 81 |
+
|
| 82 |
+
model=ResnUnet().to('cpu')
|
| 83 |
+
|
| 84 |
+
# Load the state_dict
|
| 85 |
+
state_dict = torch.load('/content/real_model1_onnx_compat.pt',map_location='cpu')
|
| 86 |
+
|
| 87 |
+
# Create a new state_dict without the 'module.' prefix
|
| 88 |
+
new_state_dict = {}
|
| 89 |
+
for key, value in state_dict.items():
|
| 90 |
+
new_key = key.replace("module.", "") # Remove the 'module.' prefix
|
| 91 |
+
new_state_dict[new_key] = value
|
| 92 |
+
|
| 93 |
+
# Load the new state_dict into your model
|
| 94 |
+
model.load_state_dict(new_state_dict)
|
| 95 |
+
model.eval()
|
| 96 |
+
|
| 97 |
+
model = ipex.optimize(model, weights_prepack=False)
|
| 98 |
+
|
| 99 |
+
model = torch.compile(model, backend="ipex")
|
| 100 |
+
|
| 101 |
# Read model to OpenVINO Runtime
|
| 102 |
+
#model_ir = core.read_model(model="Davinci_eye.onnx")
|
| 103 |
+
#compiled_model_ir = core.compile_model(model=model_ir, device_name='CPU')
|
| 104 |
|
| 105 |
tfms = transforms.Compose([
|
| 106 |
transforms.ToTensor(),
|
|
|
|
| 108 |
])
|
| 109 |
color_map={
|
| 110 |
(251,244,5): 1,
|
| 111 |
+
(37,250,5):2,
|
| 112 |
+
(0,21,209):3,
|
| 113 |
(172,21,2): 4,
|
| 114 |
(172,21,229): 5,
|
| 115 |
(6,254,249): 6,
|
|
|
|
| 139 |
(20,20,0):30,
|
| 140 |
(20,20,0):31,
|
| 141 |
}
|
| 142 |
+
colormap={v:[i for i in k] for k,v in color_map.items()}
|
| 143 |
items = {
|
| 144 |
1: "HarmonicAce_Head",
|
| 145 |
2: "HarmonicAce_Body",
|
|
|
|
| 214 |
|
| 215 |
davincieye = Davinci_Eye()
|
| 216 |
|
|
|
|
| 217 |
|
| 218 |
def convert_mask_to_rgb(pred_mask):
|
| 219 |
+
|
| 220 |
rgb_mask=np.zeros((pred_mask.shape[0],pred_mask.shape[1],3),dtype=np.uint8)
|
| 221 |
for k,v in colormap.items():
|
| 222 |
rgb_mask[pred_mask==k]=v
|
| 223 |
return rgb_mask
|
| 224 |
|
| 225 |
|
|
|
|
| 226 |
def segment_image(filepath):
|
| 227 |
image=cv2.imread(filepath)
|
| 228 |
image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
|
| 229 |
+
image = cv2.resize(image, (224,224))
|
| 230 |
+
x=tfms(image.copy()/255.)
|
| 231 |
+
with torch.no_grad():
|
| 232 |
+
mask=model(x.unsqueeze(0).float())
|
| 233 |
#ort_input={ort_session.get_inputs()[0].name:x.cpu().unsqueeze(0).float().numpy()}
|
| 234 |
#out=ort_session.run(None,ort_input)
|
| 235 |
+
_,pred_mask=torch.max(mask,dim=1)
|
| 236 |
+
pred_mask=pred_mask[0].numpy()
|
| 237 |
+
pred_mask=pred_mask.astype(np.uint8)
|
| 238 |
color_mask=convert_mask_to_rgb(pred_mask)
|
| 239 |
+
masked_image=cv2.addWeighted(image,0.3,color_mask,0.8,0.2)
|
| 240 |
pred_keys=pred_mask[np.nonzero(pred_mask)]
|
| 241 |
objects=[items[k] for k in pred_keys]
|
| 242 |
surgery_items=np.unique(np.array(objects),axis=0)
|
|
|
|
| 245 |
surg+=item+","+" "
|
| 246 |
return Image.fromarray(masked_image),surg
|
| 247 |
|
| 248 |
+
|
| 249 |
demo=gr.Interface(fn=segment_image,inputs=gr.Image(type='filepath'),
|
| 250 |
outputs=[gr.Image(type="pil"),gr.Text()],
|
| 251 |
examples=["R001_ch1_video_03_00-29-13-03.jpg",
|