This repository contains an implementation of Grounded SAM in ROS as a service server.
Grounded Segment-Anything-Model (SAM) is a state-of-the-art model for detecting and segmenting objects in images. This implementation provides a ROS service server for utilizing the Grounded SAM model within ROS-based applications.
Check out the original repository of the model at IDEA-Research/Grounded-Segment-Anything.
- Tested on ROS Noetic, might work with other ROS distributions.
- A GPU with a minimum of 8 GB VRAM for Grounded SAM or 4 GB for the Grounding DINO model alone.
To install and use this ROS service server, follow these steps:
-
Clone this repository:
cd ~/catkin_ws/src git clone https://github.com/HashimHS/grounding_sam_ros.git
-
Install Grounding SAM environment:
# Navigate to the cloned repository directory cd grounding_sam_ros # Install the conda environment conda env create -f gsam.yaml conda activate gsam # Install the Grounding DINO git clone https://github.com/IDEA-Research/GroundingDINO.git cd GroundingDINO/ pip install -e . cd .. rm -rf GroundingDINO/ # Install SAM python -m pip install git+https://github.com/facebookresearch/segment-anything.git
-
Build the ROS workspace:
# Navigate to the root of your ROS workspace cd ~/catkin_ws # Build the workspace catkin build
To use the Grounded SAM ROS service server, follow these steps:
-
Launch the ROS node:
roslaunch grounded_sam_ros gsam.launch sam_model:="SAM-L" venv:="path/to/python/env"
Alternatively you can launch Grounding DINO only for detection without segmentation
roslaunch grounded_sam_ros dino.launch venv:="path/to/python/env"
You should now find a new service server with the name "vit_detection".
-
Use the service for segmenting objects in images. An example of client code:
from grounding_sam_ros.client import SamDetector text_prompt ='DESCRIBE THE OBJECT YOU WANT TO DETECT' detector = SamDetector() annotated_frame, boxes, masks, labels, scores = detector.detect(rgb_image, text_prompt)
The model will automatically downloaded the needed model weights.
- Make sure to provide the path to your conda / virtual python environment in the launch files by changing the argument "venv"
- for example venv:="/home/username/miniconda3/envs/gsam/bin/python"
- In case you get an error:
ERROR: /usr/lib/x86_64-linux-gnu/libp11-kit.so.0: undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0
You have to set LD_PRELOAD
environment variable before launching the node:
bash export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libffi.so.7
This ROS package is made possible by: