Merge branch 'develop' into feat/moondream-vlm-object-detection
This commit is contained in:
22 files changed
+2293
-1306
No files matched your search
@@ -51,7 +51,7 @@ jobs:
|
||||
|
||||
- name: 🏗️ Install dependencies
|
||||
run: |
|
||||
uv pip install -r pyproject.toml --extra docs
|
||||
uv pip install -r pyproject.toml --group docs
|
||||
# Install mkdocs-material-insiders using the GitHub App token
|
||||
uv pip install "git+https://roboflow:${{ steps.mkdocs_token.outputs.token }}@github.com/roboflow/mkdocs-material-insiders.git@9.5.49-insiders-4.53.14#egg=mkdocs-material[imaging]"
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ jobs:
|
||||
|
||||
- name: 🏗️ Build source and wheel distributions
|
||||
run: |
|
||||
uv pip install -r pyproject.toml --extra build
|
||||
uv pip install -r pyproject.toml --group build
|
||||
uv build
|
||||
uv run twine check --strict dist/*
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
|
||||
- name: 🏗️ Build source and wheel distributions
|
||||
run: |
|
||||
uv pip install -r pyproject.toml --extra build
|
||||
uv pip install -r pyproject.toml --group build
|
||||
uv build
|
||||
uv run twine check --strict dist/*
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ jobs:
|
||||
|
||||
- name: 🏗️ Build source and wheel distributions
|
||||
run: |
|
||||
uv pip install -r pyproject.toml --extra build
|
||||
uv pip install -r pyproject.toml --group build
|
||||
uv build
|
||||
uv run twine check --strict dist/*
|
||||
|
||||
|
||||
@@ -29,11 +29,9 @@ jobs:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
activate-environment: true
|
||||
|
||||
|
||||
- name: 🏗️ Install dependencies
|
||||
run: |
|
||||
uv pip install -r pyproject.toml --extra docs
|
||||
|
||||
uv pip install -r pyproject.toml --group docs
|
||||
|
||||
- name: 🧪 Test Docs Build
|
||||
run: uv run mkdocs build --verbose
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
|
||||
|
||||
- name: 🚀 Install Packages
|
||||
run: uv pip install -r pyproject.toml --extra dev --extra docs --extra metrics
|
||||
run: uv pip install -r pyproject.toml --group dev --group docs --extra metrics
|
||||
|
||||
- name: 🧪 Run the Import test
|
||||
run: uv run python -c "import supervision; from supervision import assets; from supervision import metrics; print(supervision.__version__)"
|
||||
|
||||
@@ -107,6 +107,7 @@ status: new
|
||||
|
||||
:::supervision.detection.utils.denormalize_boxes
|
||||
|
||||
<div class="md-typeset">
|
||||
<h2><a href="#supervision.detection.utils.xyxy_to_xcycarh">xyxy_to_xcycarh</a></h2>
|
||||
</div>
|
||||
|
||||
|
||||
+2
-3
@@ -93,7 +93,7 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!pip install -q inference-gpu \"supervision[assets]\""
|
||||
"!pip install -q inference-gpu \"supervision\""
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -156,7 +156,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
@@ -207,7 +207,6 @@
|
||||
],
|
||||
"source": [
|
||||
"import supervision as sv\n",
|
||||
"from supervision.assets import download_assets, VideoAssets\n",
|
||||
"from inference.models.utils import get_roboflow_model\n",
|
||||
"\n",
|
||||
"\n",
|
||||
|
||||
+24
-14
@@ -130,7 +130,7 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!pip install -q \"ultralytics<=8.3.40\" \"supervision==0.18.0\""
|
||||
"!pip install -q ultralytics supervision"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -329,7 +329,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
@@ -342,19 +342,19 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Downloading https://github.com/ultralytics/assets/releases/download/v8.1.0/yolov8x.pt to 'yolov8x.pt'...\n"
|
||||
"Downloading https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x.pt to 'yolo11x.pt'...\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 131M/131M [00:00<00:00, 241MB/s]\n"
|
||||
"100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 109M/109M [00:10<00:00, 11.5MB/s] \n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = YOLO(\"yolov8x.pt\")\n",
|
||||
"model = YOLO(\"yolo11x.pt\")\n",
|
||||
"\n",
|
||||
"results = model(frame, verbose=False)[0]\n",
|
||||
"detections = sv.Detections.from_ultralytics(results)"
|
||||
@@ -384,7 +384,7 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAIfCAYAAABEnkAKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs/c2OJEuyJoh9ombuEZl5qupW9+2+zR6CIDDAEOBmZsHH4GPwLbjgS/A1+AoEAYLccMVZEwQH5ACc7nur6vxkZri7qQoXKj+fqHlm5SEXxAXCCnUywsPcTFVUVOSTXxVVVbxf79f79X69X+/X+/V+vV/v1/v1fr1f79e/0qv9/3sA79f79X69X+/X+/V+vV/v1/v1fr1f79f79f/L9W7Yvl/v1/v1fr1f79f79X69X+/X+/V+vV//qq93w/b9er/er/fr/Xq/3q/36/16v96v9+v9+ld9vRu279f79X69X+/X+/V+vV/v1/v1fr1f79e/6uvdsH2/3q/36/16v96v9+v9er/er/fr/Xq//lVf74bt+/V+vV/v1/v1fr1f79f79X69X+/X+/Wv+no3bN+v9+v9er/er/fr/Xq/3q/36/16v96vf9XXu2H7fr1f79f79X69X+/X+/V+vV/v1/v1fv2rvt4N2/fr/Xq/3q/36/16v96v9+v9er/er/frX/W1/+iN/5v/7f8OAkClfi5tgwBoEKgqRARNBCKAqt3UBAOAyPyyiMbPgEBE4l4RgWDMz/x3+9n/zoOIZwIQhT1r3j0Ecxz+PlWINntWPHF+GUDbNmDYvc2eszUIBM0+92fn+HOMgGIMRWsCFfXZEbEq7Ro2qCoUAmkNqp2IhjneJ9+zl871gGKoQuxNIg2qA5ABaLMv65yt+GPtuQq01gCnrwy0Pp8xoLGe/l3BpKEORZPpExlQSBMo/PNJizHG/E5rc05OPyiG8YsAGE2AYeOyH0Q2ovGAjLmOaHMeqoBgg6pAMdBANEOzteXPaN7SKm8u963rpZN82BRQEQyh7xndlXnJqC0ikDlRqOZn5V32NX9Hvl2N4Jvd2Y2RYyWDn8v8fAyikwpKfKo6vxtfafYc3w2atCt8InNvl3naWjeJucH2fL0k7i9kllbvGLSlC1GY9eeaqro8GPacOYa2zEIUGI3oUpconypAGzD5NHkWo5UxMoVlMp+t0FyvDrW9lzJQjP7BjRqrM/eH1DFMWuuUYbB1F6e50Pz9+ZJ0ZVYQ4Y0ekxYfQzMO0263n4WLy4Z4tz3T5zTXaM4cU3rRZhGf5JRDtPASbDC/P+y5bRBPm7wedmdTYBuIv48UF7GPReWpbmLOCdrHXmz+ZaOHlvUbRDvf5TlvLTtVff21lTcK/awgesLJ6nrvCY1EIDwhMfmoNFFjgUk3jXHMfZ/LL+u7i5SkNStDYf2oUB2pa4k3xFnO7h0j97Coxr4cvD4q6xtoaMRLxmtKMil+dHxAdGt2/4g3tlgpl7HfYBEg5jH3mKpOGVD2h8sm05+ouCV5Yb6s2d/G8h7eg8FzoD1NGizVTcVBc+/RsEQKH1WMlPpQg3eK0ICazApRTfqeV2ay38jXFhWklZcggHaIc4HK82HSWHzvkdqKz+M7ylhsmG4zHBYY0Ofp9JSFoDReRRm7qK/k3EjaR2CHiVcB1RHjSDq3opKbAtIM5+hAR5+vbwIdVWdoyNkcWt2SRYH6qsUdegLmKN9yzFf2zPoGInrItwXv6oI5CjVJLPljXca4TpzXCJI7P+R7KmuqEIZVVDmsmvwXe23YG5uJEdNdw+iEnnNh3VUYI/XtM4lRWEuSxoW1af0WSBP3NmmBk5+tMdtFjv+gzved9L6Gvh7xDMIvji1iDREDV5INMQdfi2WpVcT2kZgMIMnmwNzWxOfaFLYiOcPB7xtz7Js9bRCyUk3cOGR+83/9v/pfntbj2fXDhq2rQCgDYolN0IqG0yB4s8+GTiAqxmi+Ef13kdzkI2S/L4SznyupeV9rNhbVeAaITRkSGgJ3uDTnE4xmBpUOM9KGPa+hDcTvU7kTPViA+kKJCUNFGH9wIRKAYNKyGR2GDIgOQEcaoA7AYkb2Vk1ANOkkJIjdaNMJioSescq9MMaRQEyFFEoCvtaa/a7YIBii0DbQBNgV6MbJDhgbsa+/W5sGGGrEuC02DNBUQgDnkBvEgMbAVBRzyVJApW6aQk/SUiQFqMR7IKU0AYiaESGFL4FuvDGw7HIkuJpCjBRcERoxi8RFvsT+lQD2+QTl5+lGP5sRqTDDwXFg0QbT4eDAS8gojSWffx+DAGuA/KL95tyNhs6gQgonDK2CVAsOLPwXxgWB/B+7bP8PhbY0LRgsJfjKz5pMR9P8tcJMw2hTDaiEM0gUxfiMq0nZGw6mgk6S8gjuXNMKzPy5qZTdMVDpKEMhMiovFN5K2gUNCCScPA1huKHIy/yzgyzbZ2NR97b8bSgEHYPsj/V9DMFdyfOaQGxPwC2SfIaoYOP94jIpgL2W94gNjJVy4lgDlmQo28oE6UPpmpwRTEcWZDpkc8O2MEIUZKC4PAXJGudue183Q6H5FlJz6rFQCCNTsVrp0+HRjHcSjKjpGzc+HZyHLmD953ov1iMJTJo7gXOo+LNTLkCpr4LLhxifQAUYKqfEMDeMaHbkNMsXiI9H0hHr/NZcfknylkNakSo/lf6jhdXqnHJvaDyjAvvcbAWY29W0vCwca74I7JNfDYQAgEqYyNnA1rfwva8hGSSu92zEPlTCKMQ3JjeFzSMliO9rL5jO5dzkWETPHGdDopXg8Yn58v3Jn+UaCmkwZ5LQOq0GB8JJjsUXI2xAaK6zIPVl3Mx0MMzlWGCO3R2c1daY/KHB7xF0CX3g7OESxnGe0c33gT9XHIss09QnPxbd6mMA6bMnyopkov+1rfu4yMxVgX/jvuVaDbcV38gYUxpK3kAwet5DTsVCfB1IkxyxRnAnr7YIdMz5TQzne2CYSz7kiTTau8lrlSy5nk/EXv5svED+zuI0cPmkynIxn9N1hB0wqrlHppQ7LS3Y589TIbndw04QwxfrUrFjQvUs+7CseuB8+ovSvmGjN/3ZVddC3aFJmIZp6n55ETwMy7rIrNQAcdWPXb/LsGVhuRLCmb61ljoaGalt0k5DLd8V9/6KRdWkclEIJynfc6AnQs8R84i19V7E4hegTcIpwDMqk8772kmQlCiu/z4AaXtGYaQKBY9IrhvWn1Gj1yTTLIIJSTCnzlVQSBvE0Cl03Tgd4XWfNNYxku6kUCRkUG4G+4HUZnqmHW20NapI35cnTOm04khiO3nJGVQodJjwYmPNjN8AHD9wpVGcm1ZI8Ma/BN5oJ37zuQyE0pumsR448ZWGUcpOC2FjHcV6+MYeJ26KMab2F7gi1VAy6a18LuhaADiidKyFnNY5h8JcuziilZDP+sonc2Kg53s4DDMaQ9mv5Jl0e1+Dn3m0Z26JoOYTrSYQ6BgZKTwNPQ0vVc9kSMUWb14MBhGJfRjzUDEv5XNxXtb66fzN0OHMGEJHqfrz+yyjdIynbxYQoi7vkwRoDuSfqSMnAYHEArYVuUYEPPzdbECWNVhZcHnxlkI0cW2IgFy3ystuMLeYjxhY4sc3igjkN824FeeZb8gMkicS+/WJ/BuBUgvNQjepgyBZeDG/w9gqwF0dCP2c83AZkJEO14UpjvieCv7Y4I8ZMfxdxYWRwMBoyEGn/hyRrhswxI6c/6YEvp+vQt4aGOPkqiR5zHxsv/q6iSTN+FrHY45czwxg9pw/DBbfdg+PqdFiUpYNv8S1gvg7U9dhXY5ChBBCeUNdMkaDuUbIyBFOOlbDxGBQLOLjqY6gGKe941tRJDzTP0UGkotDNedkg47sg5V+ClLChC8pSn+mmRZe8chuF6If0absifKj1n3NkCT9WOvXgho512c3nBXvs2hs0U3rGzhS+AQv6/JaX4sfAmc8UTjrEZag9SrOYp59vO5bL3TD8dv69emY6NmUfhT30G5ZX/dkBDzVKq9c/0dWzCJThB3UJq84CJa6k511+d0yKdrrp/FbxkGOZSUG4036zPEs4d2QQ9ATPnyKvWO8PqZnzs9vXz9u2EqH6h5RnfBD2cwGAbNhxilzWaTwEV6MDRWElQTOS1pxwjMXGjFj20hqnuDpGdMtbxZTihGVsXFJRF8kwbJFYdcoC0QssGApuLy5bZOFt8HTxr5lzBmzDQx4yl71iuf8hwHApIWl+Lm3VVukH+u0Equg4rQd1YmPLMqrrlTgUd/pKXF/gA6BiCmHbYLDMYZFiWHPS9AubmAanaUJhg40bRA0dIuOlnUXQPpI7+cCsmf64bDoriuVlp58kgmcPjiBlxaHhd0Va5HRl6RXAFKnTKTEmtIW4+UShTgriqJQURVErHWsTTocpgCwLcxR6WRDA/XO/34vqoov+NfXWHL+lB4dqXdlRimUzmjGVsl4KO+XhRYVhPv4cx45b5Aui/uGf7DlO4sAdCHOgMMdScszR3WQQARNFEMpqyLWABQlkni3R9yKcSCVJEKA3MGaNqnk48gRW9++LiqTwxWxt6UoqnQkDZMFgaSIx3yNOKQtTBSmt39P8hMGhB7xntOyNHDVLHdg8BJbLkITJ76o64+QeSoj7Tc0Dm9Y5k4CN1bRERWxdw+PAMmMCw/fb7ZgGSTOlMNVb+pwQ3oUoyJAkTFA+5Yxo+TjTid7pP+ujlpYqvGqNTTWNp24KX8ouktGUnX71PIdvweu61KDBkUEVk4TzhVPJ+X0vfmgLhPENB987Cmhd9F7C3izqKtnocxPFjeMf9PLP1IOeLbSXNCtvoTWa0bKpQC408UozdNaycAYGIFVQjK64wzsPCM758njU4QJGQaaulaSZpyiCfX0Y8m0QAd9Os7QlPeW5J5Jjp6adBhtVATN6BmiV3LPpeYMKWbPYtqpZQ9opk8HXUzXkMEuSNHR6NOafs4R/laBfQyTMLine truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1200x1200 with 1 Axes>"
|
||||
]
|
||||
@@ -394,7 +394,7 @@
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"bounding_box_annotator = sv.BoundingBoxAnnotator(thickness=4)\n",
|
||||
"bounding_box_annotator = sv.BoxAnnotator(thickness=6)\n",
|
||||
"annotated_frame = bounding_box_annotator.annotate(frame.copy(), detections)\n",
|
||||
"sv.plot_image(annotated_frame, (12, 12))"
|
||||
]
|
||||
@@ -419,7 +419,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"execution_count": 11,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
@@ -431,7 +431,7 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1200x1200 with 1 Axes>"
|
||||
]
|
||||
@@ -447,11 +447,11 @@
|
||||
" in zip(detections.class_id, detections.confidence)\n",
|
||||
"]\n",
|
||||
"\n",
|
||||
"bounding_box_annotator = sv.BoundingBoxAnnotator(thickness=4)\n",
|
||||
"box_annotator = sv.BoxAnnotator(thickness=6)\n",
|
||||
"label_annotator = sv.LabelAnnotator(text_thickness=4, text_scale=2)\n",
|
||||
"\n",
|
||||
"annotated_frame = frame.copy()\n",
|
||||
"annotated_frame = bounding_box_annotator.annotate(annotated_frame, detections)\n",
|
||||
"annotated_frame = box_annotator.annotate(annotated_frame, detections)\n",
|
||||
"annotated_frame = label_annotator.annotate(annotated_frame, detections, labels)\n",
|
||||
"sv.plot_image(annotated_frame, (12, 12))"
|
||||
]
|
||||
@@ -587,7 +587,7 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"bounding_box_annotator = sv.BoundingBoxAnnotator(thickness=4)\n",
|
||||
"bounding_box_annotator = sv.BoxAnnotator(thickness=4)\n",
|
||||
"label_annotator = sv.LabelAnnotator(text_thickness=4, text_scale=2)\n",
|
||||
"trace_annotator = sv.TraceAnnotator(thickness=4)"
|
||||
]
|
||||
@@ -696,11 +696,21 @@
|
||||
"provenance": []
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"display_name": "supervision",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.11.13"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
||||
+2
-2
@@ -17,7 +17,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"vscode": {
|
||||
"languageId": "shellscript"
|
||||
@@ -25,7 +25,7 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!pip install -q \"supervision[assets]\""
|
||||
"pip install -q \"supervision\""
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
+1
-1
@@ -101,7 +101,7 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!pip install -q torch diffusers accelerate inference-gpu[yolo-world] dill git+https://github.com/openai/CLIP.git supervision==0.19.0rc5"
|
||||
"!pip install -q torch diffusers accelerate inference-gpu[yolo-world] dill git+https://github.com/openai/CLIP.git supervision"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
Vendored
+1
-1
@@ -92,7 +92,7 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!pip install -q inference-gpu \"supervision[assets]\""
|
||||
"!pip install -q inference-gpu \"supervision\""
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
+1
-1
@@ -72,7 +72,7 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!pip install roboflow supervision==0.19.0 -q"
|
||||
"!pip install roboflow supervision -q"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
Vendored
+5
-5
@@ -300,7 +300,7 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!pip install -q \"ultralytics<=8.3.40\""
|
||||
"!pip install -q ultralytics"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -495,7 +495,7 @@
|
||||
"source": [
|
||||
"from ultralytics import YOLO\n",
|
||||
"\n",
|
||||
"model = YOLO(\"yolov8x.pt\")\n",
|
||||
"model = YOLO(\"yolo11x.pt\")\n",
|
||||
"result = model(image, verbose=False)[0]\n",
|
||||
"detections = sv.Detections.from_ultralytics(result)"
|
||||
]
|
||||
@@ -594,7 +594,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 33,
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "yM6dmicTRGl6"
|
||||
},
|
||||
@@ -602,7 +602,7 @@
|
||||
"source": [
|
||||
"from ultralytics import YOLO\n",
|
||||
"\n",
|
||||
"model = YOLO(\"yolov8x-seg.pt\")\n",
|
||||
"model = YOLO(\"yolo11x-seg.pt\")\n",
|
||||
"result = model(image, verbose=False)[0]\n",
|
||||
"detections = sv.Detections.from_ultralytics(result)"
|
||||
]
|
||||
@@ -926,7 +926,7 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!pip install -q supervision[assets]"
|
||||
"!pip install -q supervision"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
+9
-19
@@ -32,7 +32,7 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!pip install -q inference requests tqdm supervision==0.21.0"
|
||||
"!pip install -q inference requests tqdm supervision"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -658,14 +658,14 @@
|
||||
"id": "oIK2K9zM1Kn9"
|
||||
},
|
||||
"source": [
|
||||
"###\u00a0Annotate Image with Detections\n",
|
||||
"### Annotate Image with Detections\n",
|
||||
"\n",
|
||||
"Finally, we can annotate the image with the predictions. Since we are working with an object detection model, we will use the [`sv.BoundingBoxAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.BoundingBoxAnnotator) and [`sv.LabelAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.LabelAnnotator) classes."
|
||||
"Finally, we can annotate the image with the predictions. Since we are working with an object detection model, we will use the [`sv.BoxAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.BoxAnnotator) and [`sv.LabelAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.LabelAnnotator) classes."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 41,
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
@@ -674,20 +674,9 @@
|
||||
"id": "WBv8apPz1IiP",
|
||||
"outputId": "ad32b078-12d5-4457-e16d-c7a428ab858a"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1200x1200 with 1 Axes>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"bounding_box_annotator = sv.BoundingBoxAnnotator()\n",
|
||||
"bounding_box_annotator = sv.BoxAnnotator()\n",
|
||||
"label_annotator = sv.LabelAnnotator()\n",
|
||||
"\n",
|
||||
"annotated_frame = frame.copy()\n",
|
||||
@@ -724,7 +713,8 @@
|
||||
"provenance": []
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"display_name": "supervision",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
@@ -737,7 +727,7 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.14"
|
||||
"version": "3.11.13"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
||||
+4
-4
@@ -32,7 +32,7 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!pip install -q inference requests tqdm supervision==0.21.0"
|
||||
"!pip install -q inference requests tqdm supervision"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -695,12 +695,12 @@
|
||||
"source": [
|
||||
"###\u00a0Annotate Image with Detections\n",
|
||||
"\n",
|
||||
"Finally, we can annotate the image with the predictions. Since we are working with an object detection model, we will use the [`sv.BoundingBoxAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.BoundingBoxAnnotator) and [`sv.LabelAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.LabelAnnotator) classes."
|
||||
"Finally, we can annotate the image with the predictions. Since we are working with an object detection model, we will use the [`sv.BoxAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.BoxAnnotator) and [`sv.LabelAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.LabelAnnotator) classes."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 49,
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
@@ -722,7 +722,7 @@
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"bounding_box_annotator = sv.BoundingBoxAnnotator()\n",
|
||||
"bounding_box_annotator = sv.BoxAnnotator()\n",
|
||||
"label_annotator = sv.LabelAnnotator()\n",
|
||||
"\n",
|
||||
"annotated_frame = frame.copy()\n",
|
||||
|
||||
Vendored
+9
-9
@@ -12,15 +12,15 @@
|
||||
</div>
|
||||
<div class="custom-grid">
|
||||
<a href="/develop/notebooks/quickstart"> <p class="card repo-card" data-name="Supervision Quickstart" data-labels="ANNOTATOR,DETECTION,SAM"
|
||||
data-version="v0.18.0" data-author="SkalskiP,onuralpszr"></p>
|
||||
data-version="v0.26.0" data-author="SkalskiP,onuralpszr"></p>
|
||||
</a>
|
||||
<a href="/develop/notebooks/count-objects-crossing-the-line">
|
||||
<p class="card repo-card" data-name="Count Objects Crossing the Line"
|
||||
data-labels="ANNOTATORS,LINE ZONE,TRACKING" data-version="v0.18.0" data-author="SkalskiP"></p>
|
||||
data-labels="ANNOTATORS,LINE ZONE,TRACKING" data-version="v0.26.0" data-author="SkalskiP"></p>
|
||||
</a>
|
||||
<a href="/develop/notebooks/zero-shot-object-detection-with-yolo-world">
|
||||
<p class="card repo-card" data-name="Zero-Shot Object Detection with YOLO-World"
|
||||
data-labels="ANNOTATORS,DETECTION,INFERENCE" data-version="v0.19.0" data-author="SkalskiP"></p>
|
||||
data-labels="ANNOTATORS,DETECTION,INFERENCE" data-version="v0.26.0" data-author="SkalskiP"></p>
|
||||
</a>
|
||||
<a href="/develop/notebooks/download-supervision-assets">
|
||||
<p class="card repo-card" data-name="Downloading Supervision Assets" data-labels="ASSETS" data-version="v0.18.0"
|
||||
@@ -28,7 +28,7 @@
|
||||
</a>
|
||||
<a href="/develop/notebooks/annotate-video-with-detections">
|
||||
<p class="card repo-card" data-name="Annotate Video with Detections" data-labels="INFERENCE,YOLOV8"
|
||||
data-version="v0.18.0" data-author="nickherrig"></p>
|
||||
data-version="v0.26.0" data-author="nickherrig"></p>
|
||||
</a>
|
||||
<a href="/develop/notebooks/object-tracking">
|
||||
<p class="card repo-card" data-name="Object Tracking" data-labels="TRACKING, ANNOTATOR" data-version="v0.18.0"
|
||||
@@ -36,23 +36,23 @@
|
||||
</a>
|
||||
<a href="/develop/notebooks/occupancy_analytics">
|
||||
<p class="card repo-card" data-name="Analyzing Zone Occupancy" data-labels="ANNOTATOR,DETECTION,ZONES"
|
||||
data-version="v0.19.0" data-author="stellasphere"></p>
|
||||
data-version="v0.26.0" data-author="stellasphere"></p>
|
||||
</a>
|
||||
<a href="/develop/notebooks/evaluating-alignment-of-text-to-image-diffusion-models">
|
||||
<p class="card repo-card" data-name="Evaluating Alignment of Text-to-image Diffusion Models"
|
||||
data-labels="ANNOTATORS,YOLO WORLD" data-version="v0.19.0rc5" data-author="iamhatesz"></p>
|
||||
data-labels="ANNOTATORS,YOLO WORLD" data-version="v0.26.0" data-author="iamhatesz"></p>
|
||||
</a>
|
||||
<a href="/develop/notebooks/serialise-detections-to-csv">
|
||||
<p class="card repo-card" data-name="Serialise Detections to a CSV File"
|
||||
data-labels="DETECTIONS,CSV SINK,INFERENCE" data-version="v0.21.0" data-author="onuralpszr"></p>
|
||||
data-labels="DETECTIONS,CSV SINK,INFERENCE" data-version="v0.26.0" data-author="onuralpszr"></p>
|
||||
</a>
|
||||
<a href="/develop/notebooks/serialise-detections-to-json">
|
||||
<p class="card repo-card" data-name="Serialise Detections to a JSON File"
|
||||
data-labels="DETECTIONS,JSON SINK,INFERENCE" data-version="v0.21.0" data-author="onuralpszr"></p>
|
||||
data-labels="DETECTIONS,JSON SINK,INFERENCE" data-version="v0.26.0" data-author="onuralpszr"></p>
|
||||
</a>
|
||||
<a href="/develop/notebooks/small-object-detection-with-sahi">
|
||||
<p class="card repo-card" data-name="Small Object Detection with SAHI"
|
||||
data-labels="DETECTIONS,SAHI,SMALL,OBJECT,INFERENCE" data-version="v0.23.0" data-author="ediardo"></p>
|
||||
data-labels="DETECTIONS,SAHI,SMALL,OBJECT,INFERENCE" data-version="v0.26.0" data-author="ediardo"></p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -58,6 +58,8 @@ Documentation = "https://supervision.roboflow.com/latest/"
|
||||
metrics = [
|
||||
"pandas>=2.0.0",
|
||||
]
|
||||
|
||||
[dependency-groups]
|
||||
dev = [
|
||||
"pytest>=7.2.2,<9.0.0",
|
||||
"tox>=4.11.4",
|
||||
|
||||
@@ -864,6 +864,7 @@ class Detections:
|
||||
qwen_2_5_vl_result,
|
||||
input_wh=(1000, 1000),
|
||||
resolution_wh=(1000, 1000),
|
||||
classes=['cat', 'dog'],
|
||||
)
|
||||
detections.xyxy
|
||||
# array([[139., 768., 315., 954.], [366., 679., 536., 849.]])
|
||||
@@ -873,6 +874,9 @@ class Detections:
|
||||
|
||||
detections.data
|
||||
# {'class_name': array(['cat', 'dog'], dtype='<U10')}
|
||||
|
||||
detections.class_id
|
||||
# array([0, 1])
|
||||
```
|
||||
|
||||
Examples:
|
||||
@@ -890,6 +894,7 @@ class Detections:
|
||||
sv.LMM.GOOGLE_GEMINI_2_0,
|
||||
gemini_response_text,
|
||||
resolution_wh=(1000, 1000),
|
||||
classes=['cat', 'dog'],
|
||||
)
|
||||
|
||||
detections.xyxy
|
||||
@@ -900,6 +905,9 @@ class Detections:
|
||||
|
||||
detections.data
|
||||
# {'class_name': array(['cat', 'dog'], dtype='<U26')}
|
||||
|
||||
detections.class_id
|
||||
# array([0, 1])
|
||||
```
|
||||
|
||||
Examples:
|
||||
@@ -1022,6 +1030,7 @@ class Detections:
|
||||
qwen_2_5_vl_result,
|
||||
input_wh=(1000, 1000),
|
||||
resolution_wh=(1000, 1000),
|
||||
classes=['cat', 'dog'],
|
||||
)
|
||||
detections.xyxy
|
||||
# array([[139., 768., 315., 954.], [366., 679., 536., 849.]])
|
||||
@@ -1031,6 +1040,9 @@ class Detections:
|
||||
|
||||
detections.data
|
||||
# {'class_name': array(['cat', 'dog'], dtype='<U10')}
|
||||
|
||||
detections.class_id
|
||||
# array([0, 1])
|
||||
```
|
||||
|
||||
Examples:
|
||||
@@ -1048,6 +1060,7 @@ class Detections:
|
||||
sv.VLM.GOOGLE_GEMINI_2_0,
|
||||
gemini_response_text,
|
||||
resolution_wh=(1000, 1000),
|
||||
classes=['cat', 'dog'],
|
||||
)
|
||||
|
||||
detections.xyxy
|
||||
@@ -1058,6 +1071,9 @@ class Detections:
|
||||
|
||||
detections.data
|
||||
# {'class_name': array(['cat', 'dog'], dtype='<U26')}
|
||||
|
||||
detections.class_id
|
||||
# array([0, 1])
|
||||
```
|
||||
|
||||
Examples:
|
||||
@@ -1119,10 +1135,13 @@ class Detections:
|
||||
|
||||
return cls(xyxy=xyxy, mask=mask, data=data)
|
||||
|
||||
if vlm == VLM.GOOGLE_GEMINI_2_0 or vlm == VLM.GOOGLE_GEMINI_2_5:
|
||||
xyxy, class_name = from_google_gemini(result, **kwargs)
|
||||
if (
|
||||
vlm == VLM.GOOGLE_GEMINI_2_0
|
||||
or vlm == VLM.GOOGLE_GEMINI_2_5
|
||||
):
|
||||
xyxy, class_id, class_name = from_google_gemini(result, **kwargs)
|
||||
data = {CLASS_NAME_DATA_FIELD: class_name}
|
||||
return cls(xyxy=xyxy, data=data)
|
||||
return cls(xyxy=xyxy, class_id=class_id, data=data)
|
||||
|
||||
if vlm == VLM.MOONDREAM:
|
||||
xyxy = from_moondream(result, **kwargs)
|
||||
|
||||
@@ -56,9 +56,8 @@ ALLOWED_ARGUMENTS: Dict[VLM, List[str]] = {
|
||||
VLM.PALIGEMMA: ["resolution_wh", "classes"],
|
||||
VLM.FLORENCE_2: ["resolution_wh"],
|
||||
VLM.QWEN_2_5_VL: ["input_wh", "resolution_wh", "classes"],
|
||||
VLM.GOOGLE_GEMINI_2_0: ["resolution_wh"],
|
||||
VLM.GOOGLE_GEMINI_2_5: ["resolution_wh"],
|
||||
VLM.MOONDREAM: ["resolution_wh"],
|
||||
VLM.GOOGLE_GEMINI_2_0: ["resolution_wh", "classes"],
|
||||
VLM.GOOGLE_GEMINI_2_5: ["resolution_wh", "classes"],
|
||||
}
|
||||
|
||||
SUPPORTED_TASKS_FLORENCE_2 = [
|
||||
@@ -339,7 +338,8 @@ def from_florence_2(
|
||||
def from_google_gemini(
|
||||
result: str,
|
||||
resolution_wh: Tuple[int, int],
|
||||
) -> Tuple[np.ndarray, np.ndarray]:
|
||||
classes: Optional[List[str]] = None,
|
||||
) -> Tuple[np.ndarray, Optional[np.ndarray], np.ndarray]:
|
||||
"""
|
||||
Parse and scale bounding boxes from Google Gemini style
|
||||
[JSON output](https://ai.google.dev/gemini-api/docs/vision?lang=python).
|
||||
@@ -363,11 +363,16 @@ def from_google_gemini(
|
||||
Args:
|
||||
result: String containing the JSON snippet enclosed by triple backticks.
|
||||
resolution_wh: (output_width, output_height) to which we rescale the boxes.
|
||||
classes: Optional list of valid class names. If provided, returned boxes/labels
|
||||
are filtered to only those classes found here.
|
||||
|
||||
Returns:
|
||||
xyxy (np.ndarray): An array of shape `(n, 4)` containing
|
||||
the bounding boxes coordinates in format `[x1, y1, x2, y2]`
|
||||
labels: (np.ndarray): An array of shape `(n,)` containing
|
||||
class_id (Optional[np.ndarray]): An array of shape `(n,)` containing
|
||||
the class indices for each bounding box (or None if `classes` is not
|
||||
provided)
|
||||
class_name (np.ndarray): An array of shape `(n,)` containing
|
||||
the class labels for each bounding box
|
||||
|
||||
"""
|
||||
@@ -388,7 +393,7 @@ def from_google_gemini(
|
||||
try:
|
||||
data = json.loads(result)
|
||||
except json.JSONDecodeError:
|
||||
return np.empty((0, 4)), np.empty((0,), dtype=str)
|
||||
return np.empty((0, 4)), None, np.empty((0,), dtype=str)
|
||||
|
||||
labels = []
|
||||
xyxy = []
|
||||
@@ -407,9 +412,20 @@ def from_google_gemini(
|
||||
)
|
||||
|
||||
if not xyxy:
|
||||
return np.empty((0, 4)), np.empty((0,), dtype=str)
|
||||
return np.empty((0, 4)), None, np.empty((0,), dtype=str)
|
||||
|
||||
xyxy = np.array(xyxy)
|
||||
class_name = np.array(labels)
|
||||
class_id = None
|
||||
|
||||
if classes is not None:
|
||||
mask = np.array([name in classes for name in class_name], dtype=bool)
|
||||
xyxy = xyxy[mask]
|
||||
class_name = class_name[mask]
|
||||
class_id = np.array([classes.index(name) for name in class_name])
|
||||
|
||||
return xyxy, class_id, class_name
|
||||
|
||||
return np.array(xyxy), np.array(labels)
|
||||
|
||||
|
||||
def from_moondream(
|
||||
|
||||
+103
-82
@@ -360,119 +360,140 @@ def test_from_qwen_2_5_vl(
|
||||
np.testing.assert_array_equal(class_name, expected_results[2])
|
||||
|
||||
|
||||
def test_from_google_gemini() -> None:
|
||||
result = """```json
|
||||
[
|
||||
{"box_2d": [10, 20, 110, 120], "label": "cat"},
|
||||
{"box_2d": [50, 100, 150, 200], "label": "dog"}
|
||||
]
|
||||
```"""
|
||||
resolution_wh = (640, 480)
|
||||
xyxy, class_name = from_google_gemini(
|
||||
result=result,
|
||||
resolution_wh=resolution_wh,
|
||||
)
|
||||
np.testing.assert_array_equal(
|
||||
xyxy, np.array([[12.8, 4.8, 76.8, 52.8], [64.0, 24.0, 128.0, 72.0]])
|
||||
)
|
||||
np.testing.assert_array_equal(class_name, np.array(["cat", "dog"]))
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"exception, result, resolution_wh, expected_results",
|
||||
"exception, result, resolution_wh, classes, expected_results",
|
||||
[
|
||||
(
|
||||
does_not_raise(),
|
||||
{},
|
||||
(640, 480),
|
||||
np.empty((0, 4)),
|
||||
), # empty dict
|
||||
"random text",
|
||||
(1000, 1000),
|
||||
None,
|
||||
(np.empty((0, 4)), None, np.empty(0, dtype=str)),
|
||||
), # random text without JSON format
|
||||
(
|
||||
does_not_raise(),
|
||||
{"objects": []},
|
||||
(640, 480),
|
||||
np.empty((0, 4)),
|
||||
), # empty objects list
|
||||
"```json\ninvalid json\n```",
|
||||
(1000, 1000),
|
||||
None,
|
||||
(np.empty((0, 4)), None, np.empty(0, dtype=str)),
|
||||
), # invalid JSON within code blocks
|
||||
(
|
||||
does_not_raise(),
|
||||
{"objects": "not a list"},
|
||||
(640, 480),
|
||||
np.empty((0, 4)),
|
||||
), # objects is not a list
|
||||
"```json\n[]\n```",
|
||||
(1000, 1000),
|
||||
None,
|
||||
(np.empty((0, 4)), None, np.empty(0, dtype=str)),
|
||||
), # empty JSON array
|
||||
(
|
||||
does_not_raise(),
|
||||
{
|
||||
"objects": [
|
||||
{"x_min": 0.1, "y_min": 0.2, "x_max": 0.3, "y_max": 0.4},
|
||||
]
|
||||
},
|
||||
(640, 480),
|
||||
np.array([[64.0, 96.0, 192.0, 192.0]]),
|
||||
), # single box
|
||||
"""```json
|
||||
[
|
||||
{"box_2d": [100, 200, 300, 400], "label": "cat"}
|
||||
]
|
||||
```""",
|
||||
(1000, 500),
|
||||
None,
|
||||
(
|
||||
np.array([[200.0, 50.0, 400.0, 150.0]]),
|
||||
None,
|
||||
np.array(["cat"], dtype=str),
|
||||
),
|
||||
), # single valid box with coordinate scaling
|
||||
(
|
||||
does_not_raise(),
|
||||
{
|
||||
"objects": [
|
||||
{"x_min": 0.1, "y_min": 0.2, "x_max": 0.3, "y_max": 0.4},
|
||||
{"x_min": 0.5, "y_min": 0.6, "x_max": 0.7, "y_max": 0.8},
|
||||
]
|
||||
},
|
||||
"""```json
|
||||
[
|
||||
{"box_2d": [10, 20, 110, 120], "label": "cat"},
|
||||
{"box_2d": [50, 100, 150, 200], "label": "dog"}
|
||||
]
|
||||
```""",
|
||||
(640, 480),
|
||||
np.array([[64.0, 96.0, 192.0, 192.0], [320.0, 288.0, 448.0, 384.0]]),
|
||||
), # multiple boxes
|
||||
None,
|
||||
(
|
||||
np.array([[12.8, 4.8, 76.8, 52.8], [64.0, 24.0, 128.0, 72.0]]),
|
||||
None,
|
||||
np.array(["cat", "dog"], dtype=str),
|
||||
),
|
||||
), # multiple valid boxes without class filtering
|
||||
(
|
||||
does_not_raise(),
|
||||
{
|
||||
"objects": [
|
||||
{"x_min": 0.1, "y_min": 0.2}, # missing x_max, y_max
|
||||
{"x_min": 0.5, "y_min": 0.6, "x_max": 0.7, "y_max": 0.8},
|
||||
]
|
||||
},
|
||||
"""```json
|
||||
[
|
||||
{"box_2d": [10, 20, 110, 120], "label": "cat"}
|
||||
]
|
||||
```""",
|
||||
(640, 480),
|
||||
np.array([[320.0, 288.0, 448.0, 384.0]]),
|
||||
), # partial valid boxes
|
||||
["dog", "person"],
|
||||
(np.empty((0, 4)), np.empty(0, dtype=int), np.empty(0, dtype=str)),
|
||||
), # class mismatch with filter
|
||||
(
|
||||
does_not_raise(),
|
||||
{
|
||||
"objects": [
|
||||
{"x_min": 0.0, "y_min": 0.0, "x_max": 1.0, "y_max": 1.0},
|
||||
]
|
||||
},
|
||||
(1000, 800),
|
||||
np.array([[0.0, 0.0, 1000.0, 800.0]]),
|
||||
), # full image box
|
||||
"""```json
|
||||
[
|
||||
{"box_2d": [10, 20, 110, 120], "label": "cat"},
|
||||
{"box_2d": [50, 100, 150, 200], "label": "dog"}
|
||||
]
|
||||
```""",
|
||||
(640, 480),
|
||||
["person", "dog"],
|
||||
(
|
||||
np.array([[64.0, 24.0, 128.0, 72.0]]),
|
||||
np.array([1]),
|
||||
np.array(["dog"], dtype=str),
|
||||
),
|
||||
), # partial class filtering
|
||||
(
|
||||
does_not_raise(),
|
||||
"""```json
|
||||
[
|
||||
{"box_2d": [10, 20, 110, 120], "label": "cat"},
|
||||
{"box_2d": [50, 100, 150, 200], "label": "dog"}
|
||||
]
|
||||
```""",
|
||||
(640, 480),
|
||||
["cat", "dog"],
|
||||
(
|
||||
np.array([[12.8, 4.8, 76.8, 52.8], [64.0, 24.0, 128.0, 72.0]]),
|
||||
np.array([0, 1]),
|
||||
np.array(["cat", "dog"]),
|
||||
),
|
||||
), # complete class filtering with multiple boxes
|
||||
(
|
||||
pytest.raises(ValueError),
|
||||
{
|
||||
"objects": [
|
||||
{"x_min": 0.1, "y_min": 0.2, "x_max": 0.3, "y_max": 0.4},
|
||||
]
|
||||
},
|
||||
"""```json
|
||||
[
|
||||
{"box_2d": [10, 20, 110, 120], "label": "cat"}
|
||||
]
|
||||
```""",
|
||||
(0, 480),
|
||||
None,
|
||||
), # zero width -> ValueError
|
||||
None,
|
||||
), # zero resolution width -> ValueError
|
||||
(
|
||||
pytest.raises(ValueError),
|
||||
{
|
||||
"objects": [
|
||||
{"x_min": 0.1, "y_min": 0.2, "x_max": 0.3, "y_max": 0.4},
|
||||
]
|
||||
},
|
||||
"""```json
|
||||
[
|
||||
{"box_2d": [10, 20, 110, 120], "label": "cat"}
|
||||
]
|
||||
```""",
|
||||
(640, -100),
|
||||
None,
|
||||
), # negative height -> ValueError
|
||||
None,
|
||||
), # negative resolution height -> ValueError
|
||||
],
|
||||
)
|
||||
def test_from_moondream(
|
||||
def test_from_google_gemini(
|
||||
exception,
|
||||
result: dict,
|
||||
result: str,
|
||||
resolution_wh: Tuple[int, int],
|
||||
expected_results,
|
||||
classes: Optional[List[str]],
|
||||
expected_results: Tuple[np.ndarray, Optional[np.ndarray], np.ndarray],
|
||||
) -> None:
|
||||
with exception:
|
||||
xyxy = from_moondream(
|
||||
result=result,
|
||||
resolution_wh=resolution_wh,
|
||||
xyxy, class_id, class_name = from_google_gemini(
|
||||
result=result, resolution_wh=resolution_wh, classes=classes
|
||||
)
|
||||
if expected_results is not None:
|
||||
np.testing.assert_array_equal(xyxy, expected_results)
|
||||
np.testing.assert_array_equal(xyxy, expected_results[0])
|
||||
np.testing.assert_array_equal(class_id, expected_results[1])
|
||||
np.testing.assert_array_equal(class_name, expected_results[2])
|
||||
Reference in new issue
Block a user