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) |