Skip to content
Back to skills

Bounding Boxes

ASecurity

Gets actor and level 3D bounding boxes and projects them into a camera image as 2D boxes — the dataset-annotation workflow. Lists box geometry, draws 3D boxes in the world via debug, or captures one camera frame and writes an annotated PNG plus a JSON of 2D boxes for matching actors. Use when the user asks to "get bounding boxes", "draw boxes around the cars", "project boxes onto the camera", or "generate a detection dataset / annotations".

  • 14,461 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 6, 2026
ai-agentspythongobashawsapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned October 6, 2026

npx -y skills add carla-simulator/carla --skill bounding-boxes --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Bounding Boxes?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Bounding Boxes
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/carla-simulator-bounding-boxes-carla/badge)](https://www.skillsdirectory.com/skills/carla-simulator-bounding-boxes-carla)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: bounding-boxes
description: Gets actor and level 3D bounding boxes and projects them into a camera image as 2D boxes — the dataset-annotation workflow. Lists box geometry, draws 3D boxes in the world via debug, or captures one camera frame and writes an annotated PNG plus a JSON of 2D boxes for matching actors. Use when the user asks to "get bounding boxes", "draw boxes around the cars", "project boxes onto the camera", or "generate a detection dataset / annotations".
license: MIT
compatibility: Any OS with the CARLA PythonAPI + numpy (cv2 for drawing) installed for the active interpreter and a reachable, already-running CARLA server. `project` needs an RGB camera (create-sensor). Does NOT need UE4_ROOT. Tested against CARLA 0.9.16.
metadata:
  group: python-api
  requires: create-sensor
  prerequisites: scripts/check_env.sh
  reference: references/bounding-boxes.md
---

# Bounding boxes

> **Paths.** `scripts/…` and `references/…` below are relative to the
> directory holding this SKILL.md. Your working directory is the user's
> project, not that directory, so prefix them with its absolute path or the
> command is not found.

Three things: read actors' 3D boxes, draw them in the world, or **project** them
into a camera image as 2D boxes with a JSON sidecar — the standard CARLA
dataset-annotation pipeline (`client_bounding_boxes.py`).

## Instructions

```
Progress:
- [ ] Step 1: Check prerequisites (bash scripts/check_env.sh), clear FAILs
- [ ] Step 2: For `project`, have a camera on the ego (create-sensor) + actors around
- [ ] Step 3: list / draw / project
```

Commands need `CARLA_HOST`/`CARLA_PORT` from `scripts/env.sh`.

### Step 1: Check prerequisites

```bash
bash scripts/check_env.sh
```

### Step 3: Boxes

```bash
source scripts/env.sh

# 3D box geometry of every vehicle
python3 scripts/bounding_boxes.py list --filter vehicle.*

# draw 3D boxes around vehicles — they track moving cars, stay 30 s (default)
python3 scripts/bounding_boxes.py draw --filter vehicle.*
python3 scripts/bounding_boxes.py draw --filter vehicle.* --seconds 60

# project vehicle boxes into a camera frame -> annotated PNG + JSON
python3 scripts/bounding_boxes.py project --camera <camera_id> --filter vehicle.* --out boxes.png
```

## How the projection works (brief)

Capture one frame → build the camera intrinsics `K` from its `fov` + resolution →
for each actor, take its 3D box's 8 world vertices (`get_world_vertices`),
transform to camera space with the camera's inverse matrix, keep those in front,
apply `K` → 2D points → the min/max is the 2D box. Off-frame and too-far
(`--max-dist`) actors are skipped. Full math in the reference.

## Examples

**Example 1: annotate the ego camera**

User says: "put boxes on the cars in the camera view"

Spawn a camera on the ego (create-sensor), then `project --camera <id>
--filter vehicle.*` → `boxes.png` with green 2D boxes + `boxes.json`.

**Example 2: how big is that actor**

User says: "what are the dimensions of vehicle 137?"

`list --filter vehicle.*` (find 137) → its LxWxH from the extent.

**Example 3: visualise in 3D**

User says: "outline all the vehicles in the world"

`draw --filter vehicle.*` — green 3D boxes on a rendered server.

## Troubleshooting

**Problem: `project` finds no boxes**
Cause: no actors in front of / within `--max-dist` of the camera, or wrong filter.
Solution: raise `--max-dist`, widen `--filter`, ensure vehicles are in view.

**Problem: boxes misaligned**
Cause: the frame and the actor poses drifted (fast motion, async).
Solution: capture in synchronous mode (set-world-settings) so the frame and poses
are from the same tick.

**Problem: `draw` shows nothing**
Cause: headless `-nullrhi` server.
Solution: use a rendered server (see debug-draw).

**Note: boxes always track moving actors**
`draw` re-stamps each frame for `--seconds` (default 30), so boxes ride moving
cars automatically — the command blocks for that duration.

## Outputs

- `list`: box dimensions per actor.
- `draw`: 3D box overlay (rendered view).
- `project`: `<out>.png` (annotated) + `<out>.json` (2D boxes: id, type, xyxy).

Detail (intrinsics, world→camera transform, level boxes, lidar-to-camera) in
[references/bounding-boxes.md](references/bounding-boxes.md).

Files in this skill

  • SKILL.md4.2 KB
  • references/bounding-boxes.md2.2 KB
  • scripts/bounding_boxes.py9.8 KB
  • scripts/check_env.sh2.1 KB
  • scripts/env.sh1.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…