| import torch |
| from dino2.model import Segmentor |
| from PIL import Image |
| from torchvision import transforms |
| import numpy as np |
| import cv2 |
|
|
|
|
|
|
| T2=transforms.ToPILImage() |
|
|
|
|
| weights="/home/ksyint/other1213/craft_ku/weights/dinov2.pt" |
| device=torch.device("cpu") |
| model = Segmentor(device,1,backbone = 'dinov2_b',head="conv") |
| model.load_state_dict(torch.load(weights,map_location="cpu")) |
| model = model.to(device) |
|
|
|
|
| img_transform = transforms.Compose([ |
| transforms.Resize((14*64,14*64)), |
| transforms.ToTensor(), |
| transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), |
| ]) |
| |
| |
|
|
| def dino_seg(numpy_array): |
| img0=Image.fromarray(numpy_array) |
| original_size=img0.size |
| img=img_transform(img0) |
| a=img.unsqueeze(0) |
| b=model(a) |
| b=b.squeeze(0) |
| b=b*255.0 |
| model_output=T2(b) |
| model_output=model_output.resize(original_size) |
| |
| model_output=np.array(model_output) |
| model_output[model_output > 220] = 255.0 |
| model_output[model_output <= 220] = 0.0 |
| model_output2=model_output |
| model_output3=model_output |
| output = np.stack([model_output, model_output2, model_output3]) |
| output=np.transpose(output,(1,2,0)) |
| |
|
|
| return output |
|
|
|
|
|
|
|
|
| |
| |
| |
| |
|
|
| |
| |
|
|
| |
| |
| |
| |
| |
|
|
|
|
|
|
|
|