Download utils.py from GMedAI/xDesCO: direct link, hf CLI and curl.
- Browser
- Download file 2.12 kB
-
https://huggingface.co/spaces/GMedAI/xDesCO/resolve/main/utils.py
- Command line
-
hf download hf://spaces/GMedAI/xDesCO/utils.py
-
curl -L -o utils.py https://huggingface.co/spaces/GMedAI/xDesCO/resolve/main/utils.py
2.12 kB
| import cv2 | |
| import numpy as np | |
| # from shared_queue import image_queue | |
| def read_image(file_bytes): | |
| np_img = np.frombuffer(file_bytes, np.uint8) | |
| img = cv2.imdecode(np_img, cv2.IMREAD_COLOR) | |
| return img | |
| def combine_mask(image, mask, label2color={1: (255, 255, 0), 2: (0, 255, 255)}, alpha=0.1): | |
| image = to_color(image) | |
| image = cv2.resize(image, mask.shape) | |
| mask_image = np.zeros_like(image) | |
| for label, color in label2color.items(): | |
| mask_image[mask == label] = color | |
| mask_image = cv2.addWeighted(image, 1 - alpha, mask_image, alpha, 0) | |
| return mask_image | |
| def to_color(image): | |
| if len(image.shape) == 3 and image.shape[-1] == 3: | |
| return image | |
| return cv2.cvtColor(image, cv2.COLOR_GRAY2RGB) | |
| def to_gray(image): | |
| if len(image.shape) == 3 and image.shape[-1] == 3: | |
| return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| return image | |
| def prob_process(prob_list): | |
| prob = prob_list[0] | |
| max_idx = np.argmax(prob) | |
| min_idx = np.argmin(prob) | |
| prob[max_idx] += prob[min_idx] | |
| prob[min_idx] = 0 | |
| if max_idx == 0: | |
| return 1 - prob[max_idx] | |
| elif max_idx ==1: | |
| return prob[max_idx] | |
| else: | |
| return 1 + prob[max_idx] | |
| def combine_prob_jsw(prob, jsw_m, jsw_mm): | |
| processed_prob = prob_process(prob) | |
| temp = np.array([processed_prob, jsw_m, jsw_mm]) | |
| if temp.any(): | |
| temp = np.hstack(temp) | |
| else: | |
| temp = temp.flatten() | |
| return temp | |
| def scale_coordinates(links, original_size, mask_size): | |
| scale_factor = original_size / mask_size | |
| scaled_links = [(int(x * scale_factor), int(y * scale_factor)) for x, y in links] | |
| return scaled_links | |
| def get_annotations(probabilites): | |
| OSTEOPYTE_LEVELS = { | |
| 0: "Definite osteophytes", | |
| 1: "No osteophytes", | |
| 2: "Possible osteophytes", | |
| } | |
| JNS_LEVELS = { | |
| 0: "Definite JSN", | |
| 1: "Mild JSN", | |
| 2: "No JSN", | |
| 3: "Severe JSN", | |
| } | |
| return { | |
| "osteophyte": OSTEOPYTE_LEVELS[np.argmax(probabilites[5:8])], | |
| "jsn": JNS_LEVELS[np.argmax(probabilites[8:12])], | |
| } | |