Spaces:
Paused
Paused
| import os | |
| import cv2 | |
| from detectron2 import model_zoo | |
| from detectron2.engine import DefaultPredictor | |
| from detectron2.config import get_cfg | |
| from detectron2.utils.visualizer import Visualizer | |
| from detectron2.data import MetadataCatalog | |
| # Step 1: Configure the model for inference | |
| def configure_model(output_dir, num_classes): | |
| cfg = get_cfg() | |
| cfg.MODEL.DEVICE = "cpu" | |
| cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")) | |
| cfg.MODEL.WEIGHTS = os.path.join(output_dir, "model_final.pth") # Load trained weights | |
| cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.2 # Confidence threshold | |
| cfg.MODEL.ROI_HEADS.NUM_CLASSES = num_classes # Update based on your dataset | |
| # cfg.MODEL.DEVICE = "cuda" if torch.cuda.is_available() else "cpu" # Use GPU if available | |
| return cfg | |
| # Step 2: Run inference and visualize results | |
| def test_model(cfg, image_path, output_path): | |
| predictor = DefaultPredictor(cfg) | |
| image = cv2.imread(image_path) # Load the image | |
| outputs = predictor(image) # Run inference | |
| print(cfg.DATASETS.TRAIN[0]) | |
| # Visualize predictions | |
| v = Visualizer(image[:, :, ::-1], MetadataCatalog.get("floorplan_train"), scale=1.2) | |
| out = v.draw_instance_predictions(outputs["instances"].to("cpu")) | |
| # Save or display the result | |
| cv2.imwrite(output_path, out.get_image()[:, :, ::-1]) | |
| print(f"Prediction saved to {output_path}") | |
| # Example usage | |
| if __name__ == "__main__": | |
| output_dir = "./output" # Path to the directory where model_final.pth is saved | |
| image_path = "./1.jpg" # Path to the image for testing | |
| output_image = "output_prediction-1.jpg" # Path to save the prediction result | |
| # Update with your number of classes | |
| category = [ | |
| "door1", | |
| "window2", | |
| "window2", | |
| "window1", | |
| "door1", | |
| "door1", | |
| "table1", | |
| "armchair", | |
| "table1", | |
| "tub", | |
| "sink4", | |
| "sink3", | |
| "table1", | |
| "window2", | |
| "window2", | |
| "table2", | |
| "bed", | |
| "table1", | |
| "door1", | |
| "sofa2", | |
| "table1", | |
| "armchair", | |
| "sink3", | |
| "armchair", | |
| "armchair", | |
| "armchair", | |
| "table3"] # Replace with your dataset classes | |
| categories = list(map(lambda x: {"id": category.index(x), "name": x}, dict.fromkeys(category))) | |
| num_classes = len(categories) | |
| # Configure and test the model | |
| cfg = configure_model(output_dir, num_classes) | |
| test_model(cfg, image_path, output_image) | |