Spaces:
Runtime error
Runtime error
| from ultralytics import YOLO | |
| import cv2 | |
| import os | |
| import shutil | |
| import numpy as np | |
| def black_mask(results): | |
| # Đường dẫn đến thư mục "runs" | |
| runs_folder = "mask" | |
| # Kiểm tra xem thư mục "mask" đã tồn tại chưa | |
| if not os.path.exists(runs_folder): | |
| # Nếu chưa tồn tại, tạo thư mục "mask" | |
| os.makedirs(runs_folder) | |
| bl_mask=[] | |
| for mask_index in range(len(results[0].masks)): | |
| # Lấy mặt nạ | |
| mask_raw = results[0].masks[mask_index].cpu().data.numpy().transpose(1, 2, 0) | |
| # Chuyển đổi mặt nạ thành 3 kênh màu | |
| mask_3channel = cv2.merge((mask_raw, mask_raw, mask_raw)) | |
| # Lấy kích thước của ảnh gốc (chiều cao, chiều rộng, số kênh) | |
| h2, w2, c2 = results[0].orig_img.shape | |
| # Thay đổi kích thước mặt nạ thành cùng kích thước với ảnh gốc | |
| mask = cv2.resize(mask_3channel, (w2, h2)) | |
| # Chuyển đổi ảnh mặt nạ thành không gian màu HSV | |
| hsv = cv2.cvtColor(mask, cv2.COLOR_BGR2HSV) | |
| # Xác định phạm vi độ sáng trong không gian màu HSV | |
| lower_black = np.array([0, 0, 0]) | |
| upper_black = np.array([0, 0, 1]) | |
| # Tạo mặt nạ dựa trên phạm vi độ sáng | |
| mask = cv2.inRange(mask, lower_black, upper_black) | |
| # Đảo ngược mặt nạ để lấy mọi thứ trừ màu đen | |
| mask = cv2.bitwise_not(mask) | |
| # Áp dụng mặt nạ vào ảnh gốc | |
| masked = cv2.bitwise_and(results[0].orig_img, results[0].orig_img, mask=mask) | |
| # Chuyển mọi pixel màu đen thành màu trắng | |
| black_color = [0, 0, 0] | |
| white_color = [255, 255, 255] | |
| result_image = np.where(np.all(masked == black_color, axis=-1, keepdims=True), masked, white_color) | |
| # name = "mask/"+str(mask_index) + '.png' | |
| # # Show the masked part of the image | |
| # cv2.imwrite(name,result_image) | |
| bl_mask.append(result_image) | |
| return bl_mask | |
| def segmentation_doc(image): | |
| model = YOLO('Model/Seg65ep.pt') | |
| runs_folder = "runs" | |
| folder="mask" | |
| # Xóa thư mục runs | |
| if os.path.exists(runs_folder) and os.path.isdir(runs_folder): | |
| # Xóa thư mục runs | |
| shutil.rmtree(runs_folder) | |
| if os.path.exists(folder) and os.path.isdir(folder): | |
| # Xóa thư mục runs | |
| shutil.rmtree(folder) | |
| color = [255, 255, 255] # Màu trắng | |
| padding_size = 50 | |
| image = cv2.copyMakeBorder(image, padding_size, padding_size, padding_size, padding_size, cv2.BORDER_CONSTANT, value=color) | |
| results = model(image,save=True,retina_masks = True, conf=0.7) | |
| bl_mask=black_mask(results) | |
| return image,bl_mask | |
| # image=cv2.imread("test1.jpg") | |
| # segmentation_doc(image) |