{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "from segment_anything import SamAutomaticMaskGenerator, sam_model_registry\n",
    "import cv2\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "\n",
    "sam = sam_model_registry[\"vit_h\"](checkpoint=\"weights/sam_vit_h_4b8939.pth\")\n",
    "\n",
    "\n",
    "# Read image\n",
    "image = cv2.imread('nerf.jpg')\n",
    "image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  # Convert to RGB for matplotlib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "mask_generator = SamAutomaticMaskGenerator(sam)\n",
    "masks = mask_generator.generate(image)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "len(masks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAFBCAYAAADqo6ytAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAXYUlEQVR4nO3de2zddeH/8dfZCru0u6BDJgMHAmGC5sedCHTIUGEyQQffofvlx4AoGC8oRoMXlFvkGxxOVNREUCGwCREN8QrJAvxYxB+OGBUiIAg/DPDDsMHA3WC0n98fpy0ta7ezrV3b8348kqbtp5+evs/Z2s/zvD+XU6uqqgoAUKwxwz0AAGB4iQEAKJwYAIDCiQEAKJwYAIDCiQEAKJwYAIDCiQEAKJwYAIDCiQGgx6WXXpparbZN665atWqIRzV0muE+wGAQAxTnhhtuSK1WywMPPDDcQxkVrrzyytx+++2Dfrtnn312arVaJk+enA0bNmz29cceeyy1Wi21Wi1XX331oP984HViAOhx8cUXb7ZhHqoYSJKWlpasX78+v/71rzf72tKlSzN+/Pgh+blAX2IA6NHS0rJTN8Djxo3LiSeemJ/97GebfW3ZsmU55ZRTdtpYoGRiAFKfsm5ra8u//vWvzJs3L21tbZkxY0a+//3vJ0kefPDBzJkzJ62trZk5c2aWLVvW5/tfeOGFfOELX8i73vWutLW1ZfLkyZk7d27++te/bvaznnrqqZx66qlpbW3NW97yllx44YW58847U6vVcs899/RZ9/7778/JJ5+cKVOmZOLEiTn++OPzhz/8YYv3paqqTJs2LZ///Od7lnV2dmbq1KkZO3Zs1qxZ07P8qquuSktLS9auXZtk82MGarVa1q1blxtvvLFnyv7ss8/u8/PWrFmTs88+O1OnTs2UKVNyzjnnZP369VscY28LFy7M73//+z7jWrlyZR577LEsXLhws/W35bH+3ve+l4MPPjgTJ07MbrvtliOOOGKzf7s3euqpp7L//vvnne98Z/797383fD9gNBMD0KWjoyNz587N3nvvnW9+85vZZ5998ulPfzo33HBDTj755BxxxBG56qqrMmnSpJx11ll58skne773iSeeyO2335558+ZlyZIl+eIXv5gHH3wwxx9/fJ599tme9datW5c5c+Zk+fLlueCCC/LVr3419913Xy666KLNxnPXXXdl9uzZefnll3PJJZfkyiuvzJo1azJnzpz86U9/GvB+1Gq1HHvssbn33nt7lv3tb3/LSy+9lCR9YmLFihU59NBD09bW1u9t3XTTTRk3blza29tz00035aabbsr555/fZ50FCxbkP//5T/77v/87CxYsyA033JDLLrtsK4/26+bPn59arZZf/vKXPcuWLVuWWbNm5bDDDtts/UYf6+uuuy4XXHBBDjrooFxzzTW57LLLcsghh+T+++8fcCz//Oc/M3v27EyaNCn33HNP9thjj4bvB4xqFRTmpz/9aZWkWrlyZc+yRYsWVUmqK6+8smfZiy++WE2YMKGq1WrVLbfc0rP8kUceqZJUl1xySc+yjRs3Vh0dHX1+zpNPPlmNGzeuuvzyy3uWfetb36qSVLfffnvPsg0bNlSzZs2qklR33313VVVV1dnZWR1wwAHVSSedVHV2dvasu379+mrfffet3ve+923xPi5evLgaO3Zs9fLLL1dVVVXf/e53q5kzZ1ZHHXVUddFFF1VVVVUdHR3V1KlTqwsvvLDn+y655JLqjX8WWltbq0WLFm32M7rXPffcc/ss//CHP1y9+c1v3uL4qqr+mLe2tlZVVVVnnHFGdeKJJ/aMa/r06dVll11WPfnkk1WSavHixT3f1+hjfdppp1UHH3zwFsfQfR+ef/756uGHH6723HPP6sgjj6xeeOGFrY4fmomZAejlYx/7WM/HU6dOzYEHHpjW1tYsWLCgZ/mBBx6YqVOn5oknnuhZNm7cuIwZU/916ujoyOrVq9PW1pYDDzwwf/7zn3vWu+OOOzJjxoyceuqpPcvGjx+fj3/8433G8Ze//KVnmnz16tVZtWpVVq1alXXr1uXEE0/Mvffem87OzgHvR3t7ezo6OnLfffclqc8AtLe3p729PStWrEiSPPTQQ1mzZk3a29u356Hq8YlPfGKzn7169eq8/PLLDd/GwoULc8899+S5557LXXfdleeee67fXQRJ44/11KlT8/TTT2flypVb/fkPPfRQjj/++Oyzzz5Zvnx5dtttt4bHDs1ADECX8ePHZ/fdd++zbMqUKdlrr702O/d+ypQpefHFF3s+7+zszLe//e0ccMABGTduXKZNm5bdd9+9z/R8Ut8fvd9++212e/vvv3+fzx977LEkyaJFi7L77rv3ebv++uvzyiuv9LndNzrssMMyceLEng1/dwzMnj07DzzwQDZu3NjzteOOO67Rh6hfb3vb2/p83r0h7f34bM0HPvCBTJo0KbfeemuWLl2aI488crPHpFujj/VFF12Utra2HHXUUTnggAPyqU99asDjLT74wQ9m0qRJufPOOzN58uSGxw3NomW4BwAjxdixY7dpeVVVPR9feeWV+drXvpZzzz03V1xxRd70pjdlzJgx+dznPrfFZ/AD6f6exYsX55BDDul3nYH28yfJLrvskqOPPjr33ntvHn/88Tz33HNpb2/PHnvskU2bNuX+++/PihUrMmvWrM0CaFs18vhszbhx4zJ//vzceOONeeKJJ3LppZcOuG6jj/U73vGOPProo/nNb36TO+64I7/4xS/ygx/8IF//+tc3O6bh9NNPz4033pilS5dudkwElEAMwCC47bbbcsIJJ+THP/5xn+Vr1qzJtGnTej6fOXNm/v73v6eqqj6zA48//nif79tvv/2SJJMnT8573/ve7RpTe3t7rrrqqixfvjzTpk3LrFmzUqvVcvDBB2fFihVZsWJF5s2bt9XbafSKhDtq4cKF+clPfpIxY8bkIx/5yIDrNfpYJ0lra2vOPPPMnHnmmXn11Vczf/78fOMb38iXv/zlPqdQLl68OC0tLfnkJz+ZSZMmDbiLApqV3QQwCMaOHbvZM+Gf//zneeaZZ/osO+mkk/LMM8/kV7/6Vc+yjRs35rrrruuz3uGHH5799tsvV199dc9pf709//zzWx1Te3t7XnnllVxzzTU57rjjejbq3WcGPPvssw0dL9Da2trntL+hcsIJJ+SKK67Itddem+nTpw+4XqOP9erVq/t8vuuuu+aggw5KVVXZtGlTn6/VarX86Ec/yhlnnJFFixb1+feBEpgZgEEwb968XH755TnnnHNyzDHH5MEHH8zSpUvz9re/vc96559/fq699tp89KMfzWc/+9m89a1v7XOlve4N9pgxY3L99ddn7ty5Ofjgg3POOedkxowZeeaZZ3L33Xdn8uTJ/V61r7d3v/vdaWlpyaOPPprzzjuvZ/ns2bPzwx/+MEkaioHDDz88y5cvz5IlS7Lnnntm3333zdFHH71Nj08jxowZk4svvnir6zX6WL///e/P9OnTc+yxx2aPPfbIww8/nGuvvTannHJKJk2a1O/Pv/nmm/OhD30oCxYsyO9+97vMmTNn0O4fjGRi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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Draw the mask on the image\n",
    "for mask in masks:\n",
    "    mask_array = mask['segmentation']\n",
    "    color = np.array([255, 0, 0], dtype=np.uint8)  # Red color for mask\n",
    "    alpha = 0.5  # Transparency factor\n",
    "\n",
    "    # Create an image with the mask drawn\n",
    "    mask_image = np.zeros_like(image_rgb, dtype=np.uint8)\n",
    "    mask_image[mask_array] = color\n",
    "\n",
    "    # Blend the original image and the mask image\n",
    "    image_rgb = cv2.addWeighted(image_rgb, 1 - alpha, mask_image, alpha, 0)\n",
    "\n",
    "# Display the image with the mask using matplotlib\n",
    "plt.imshow(image_rgb)\n",
    "plt.axis('off')  # Hide axis\n",
    "plt.title('Image with Mask')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "nerfstudio2",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.19"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
