Outflock Camera Component OBB Model and Dataset

This repository contains a YOLOv8 medium oriented-bounding-box model and its training dataset. The model detects three parts of fixed camera systems:

ID Class Description
0 Body Camera body or outer housing.
1 Lens Visible camera lens or optical module.
2 System The complete camera assembly or installed system.

The model was developed for experiments to recognize Flock ALPR camera systems and their specific components. This model is for educational purposes only and should not be used for illegal purposes.

Flock cameras are showing up across the country, without the consent of citizens and are impinging on personal privacy and civil liberties - while also continuously being used for nefarious purposes by the very organizations citizens are told to trust.

For more information on Flock and on the widespread utilization of ALPR camera systems, please see DeFlock.org.

Model details

Property Value
Architecture Ultralytics YOLOv8m-OBB
Task Oriented object detection
Format ONNX
Model file model/best.onnx
Model size 105,941,004 bytes, approximately 101 MiB
SHA-256 690f0eb7d626de52902665ccd233629f27a75443b8420aa5e884cc7f248a9860
Ultralytics version recorded in ONNX 8.4.104
Input images, float32 [1, 3, 960, 960]
Output output0, float32 [1, 8, 18900]
ONNX opset 12
Batch size 1, fixed
Embedded NMS No

Each raw output prediction contains four oriented-box values, three class scores, and one angle value. Confidence filtering and class-aware rotated NMS must be applied by the consumer.

The Outflock OpenCV pipeline letterboxes images to 960 by 960 pixels with a (114, 114, 114) fill color, scales pixels by 1 / 255, converts BGR to RGB, and uses NCHW layout. Detected boxes are mapped back into the original image coordinates after inference.

Training configuration

The model was initialized from yolov8m-obb.pt and trained using train/trainObbModel.py with the following configuration:

Setting Value
Maximum epochs 50
Early-stopping patience 20 epochs
Image size 960
Batch size 16
Optimizer Automatic selection
Mixed precision Enabled
Pretrained weights Enabled
Training device CUDA device 0
Workers 8

Configured augmentations include limited rotation, translation, scale, perspective, horizontal flipping, mosaic, and mixup. Vertical flipping and copy-paste augmentation are disabled. See train/trainObbModel.py for the exact values.

No training history, held-out test split, or evaluation metrics are included with the current export. The validation split was used during training, so it should not be treated as an independent test set.

Dataset summary

The uploadable dataset is generated at train/datasets/camera_obb in Ultralytics YOLO OBB format.

Split Images OBB annotations Body Lens System
Train 152 429 156 152 121
Validation 37 98 38 30 30
Total 189 527 194 182 151

There is no test split. The preparation script creates a deterministic 80/20 train/validation split using seed 42 and excludes images whose matching label file is absent or fails validation.

The generated dataset contains 149 JPEG, 35 PNG, and 5 WebP images. Image widths range from 320 to 4,032 pixels and heights range from 180 to 3,410 pixels. The median width is 1,200 pixels and the median height is 820 pixels.

Directory layout

datasets/camera_obb/
β”œβ”€β”€ data.yaml
β”œβ”€β”€ images/
β”‚   β”œβ”€β”€ train/
β”‚   └── val/
└── labels/
    β”œβ”€β”€ train/
    └── val/

The generated labels/*.cache files are Ultralytics caches and are not part of the underlying annotation format. They may be deleted and regenerated.

Annotation format

Each image has a same-stem .txt label file. Every line describes one oriented bounding box:

class_id x1 y1 x2 y2 x3 y3 x4 y4

The four corner points are stored in polygon order. Coordinates are normalized to the image width and height and are expected to fall in the inclusive range from 0 to 1.

Example:

1 0.31 0.42 0.46 0.39 0.49 0.53 0.34 0.56

Reproducing the dataset and model

The training script rebuilds the generated dataset from train/data, trains the model, and optionally exports ONNX:

python train/trainObbModel.py --onnx

The main dependencies are PyTorch, Ultralytics, and PyYAML. Training expects a CUDA device by default. The generated data.yaml contains an absolute local path, so run the preparation script again or update its path entry after moving the dataset.

Run OpenCV inference on one image with:

python train/testObbOpenCv.py path/to/image.jpg \
  --model flight/model/best.onnx \
  --output path/to/output.jpg \
  --conf 0.25 \
  --iou 0.45 \
  --imgsz 960

Intended uses

  • Research and development involving oriented detection of the three camera component classes above.
  • Testing Outflock's OpenCV and flight-camera inference pipeline.
  • Fine-tuning or benchmarking on imagery with a similar viewpoint and domain, after establishing appropriate data rights.

Limitations and out-of-scope uses

  • The dataset is small and was collected around a narrow search concept.
  • Search-engine sampling can introduce geographic, product, viewpoint, resolution, and source-selection biases.
  • Random image splitting does not guarantee that near-duplicate images or the same physical camera do not appear in both splits.
  • The dataset has no independent test set and the exported model has no published accuracy, precision, recall, or mAP measurements.
  • Performance on other camera designs, aerial viewpoints, difficult weather, occlusion, motion blur, or low-light imagery is unknown.
  • This model should not be used as the sole input to safety-critical navigation, law enforcement, identification, or surveillance decisions.

Licensing, provenance, and privacy

The ONNX metadata identifies the exported Ultralytics model as AGPL-3.0. Users are responsible for complying with the applicable Ultralytics and model weight licensing terms.

The image acquisition utility performs a DuckDuckGo image search for flock camera and downloads third-party image results. The current dataset does not include a source URL, author, attribution, consent record, or license manifest for each image. Consequently, the right to redistribute the images cannot be established from this repository alone, and no dataset license is asserted by this card.

Before publishing the dataset, audit every image for copyright and redistribution rights, remove images without adequate permission, and review the files and embedded metadata for people, license plates, addresses, trademarks, or other sensitive information. Until that audit is complete, a private or access-controlled Hugging Face dataset repository is recommended.

This README documents the current files and does not itself grant permission to redistribute the underlying images.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support