Download app.py from addsw11/sam2: direct link, hf CLI and curl.
- Browser
- Download file 1.68 kB
-
https://huggingface.co/spaces/addsw11/sam2/resolve/main/app.py
- Command line
-
hf download hf://spaces/addsw11/sam2/app.py
-
curl -L -o app.py https://huggingface.co/spaces/addsw11/sam2/resolve/main/app.py
1.68 kB
| import spaces | |
| import gradio as gr | |
| import numpy as np | |
| import random | |
| import time | |
| import json | |
| import os | |
| from loguru import logger | |
| from decouple import config | |
| import io | |
| import torch | |
| import numpy as np | |
| import torch | |
| import cv2 | |
| from PIL import Image | |
| from segment_anything import sam_model_registry, SamPredictor | |
| print(f"Is CUDA available: {torch.cuda.is_available()}") | |
| print(f"CUDA device: {torch.cuda.get_device_name(torch.cuda.current_device())}") | |
| print(torch.version.cuda) | |
| device = torch.cuda.get_device_name(torch.cuda.current_device()) | |
| print(device) | |
| sam_checkpoint = "sam_hq_vit_h.pth" | |
| model_type = "vit_h" | |
| device = "cuda" | |
| sam = sam_model_registry[model_type](checkpoint=sam_checkpoint) | |
| def generate_image(prompt, image): | |
| sam.to(device=device) | |
| predictor = SamPredictor(sam) | |
| predictor.set_image(image) | |
| prompt = json.loads(prompt) | |
| input_points = np.array(prompt['input_points']) | |
| input_labels = np.array(prompt['input_labels']) | |
| mask, _, _ = predictor.predict( | |
| point_coords=input_points, | |
| point_labels=input_labels, | |
| box=None, | |
| multimask_output=False, | |
| hq_token_only=True, | |
| ) | |
| rgb_array = np.zeros((mask.shape[1], mask.shape[2], 3), dtype=np.uint8) | |
| rgb_array[mask[0]] = 255 | |
| result = Image.fromarray(rgb_array) | |
| return result | |
| if __name__ == "__main__": | |
| demo = gr.Interface(fn=generate_image, inputs=[ | |
| "text", | |
| gr.Image(image_mode='RGB', type="numpy") | |
| ], | |
| outputs=[ | |
| gr.Image(type="numpy", image_mode='RGB') | |
| ]) | |
| demo.launch(debug=True) | |
| logger.debug('demo.launch()') | |