MbModel / utils /preprocessing.py
MobvxtR's picture
Update utils/preprocessing.py
f95494c verified
import cv2
import numpy as np
from rembg import remove
from ultralytics import YOLO
class ImageProcessor:
def __init__(self, model_path):
self.model = YOLO(model_path)
self.class_names = {0: "upper_clothes", 1: "lower_clothes"}
def remove_background(self, image_bytes):
return remove(image_bytes)
def process_image(self, image_bytes):
# Background removal
bg_removed = self.remove_background(image_bytes)
# Convert to OpenCV format
nparr = np.frombuffer(bg_removed, np.uint8)
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
# Segmentation
results = self.model.predict(img)
return self._process_masks(results, img)
def _process_masks(self, results, img):
segmented = {}
if results[0].masks is not None:
for mask, class_id in zip(results[0].masks.data, results[0].boxes.cls):
class_id = int(class_id.item())
mask_np = mask.cpu().numpy()
mask_resized = cv2.resize(mask_np, (img.shape[1], img.shape[0]), interpolation=cv2.INTER_NEAREST)
_, binary_mask = cv2.threshold(mask_resized, 0.5, 255, cv2.THRESH_BINARY)
binary_mask = binary_mask.astype(np.uint8)
segmented[self.class_names[class_id]] = binary_mask
return segmented