Team Ai
Datasetpublic

lyte-codes/clockface-synth-dataset-10k

clockface-synth Rendered analog clocks with exact times. Training data for clockface, a small model that reads a clock face and returns the time. The label is exact by construction. Blender is told where to put the hands, so the time is known to arbitrary precision and there is no annotation step and no annotation error. That property is the reason this project is tractable. These are renders, not photographs. A score measured on this data is training telemetry, never a result.… See the full description on the dataset page: https://huggingface.co/datasets/lyte-codes/clockface-synth-dataset-10k.

sourceHugging Facecc-by-4.0updated 1mo agoView on Hugging Face
0likes35downloads
Dataset Card

clockface-synth

Rendered analog clocks with exact times. Training data for clockface, a small model that reads a clock face and returns the time.

The label is exact by construction. Blender is told where to put the hands, so the time is known to arbitrary precision and there is no annotation step and no annotation error. That property is the reason this project is tractable.

These are renders, not photographs. A score measured on this data is training telemetry, never a result. The model card reports on real photographs only.

Current release: v2 (11,998 images)

Images11,998 renders, 384x384 JPEG
EngineBlender 5.2 EEVEE, 2 samples
Seed22
Camera roll+/-25 degrees, clock upright
Off-axis view0-45 degrees
Dial size16%-43% of image width (p10-p90)
Numeralsarabic 5539, ticks 3656, roman 1861, bare 944

Each row carries the time, both hand angles, and the dial's projected geometry (dial_cx, dial_cy, dial_r, dial_up_deg) so a model can be trained to locate the face before reading it.

Randomised over numeral style and font, hand shape, colours, case material, glass, four lighting regimes, camera angle, depth of field, glare and motion blur.

v1 is on the v1 branch, and it is defective

The original 10,000-image release had a geometry bug. Aiming the camera aligns its up-vector with world +Y, so as the camera orbited the dial spun in the frame: 12 o'clock landed at 147, 319, 232, 233, 295 and 242 degrees across six samples that were all generated with the same nominal roll setting.

Under an arbitrary in-image rotation, a tick-only or bare dial has no cue for where 12 is, so its label stops being a function of the pixels. That is 38% of v1 carrying labels that cannot be learned. A model trained on it does not converge.

v1 is kept on its own branch for reproducibility. Do not train on it.

loaddataset("lyte-codes/clockface-synth-dataset-10k") # v2 loaddataset("lyte-codes/clockface-synth-dataset-10k", revision="v1") # defective

(The repository name says 10k; v2 holds 11,998.)

Fonts

Numerals are rendered with 89 system fonts, of which 86 are Apple/Monotype proprietary faces (Arial, Apple Chancery, AppleGothic and similar) and 3 are open-licensed. What is distributed here is rendered pixels, not font software, and typeface designs are not copyrightable in the US -- the same basis on which any PDF is distributed. Stated explicitly so anyone building on it can make their own call.

Reproducing

Fully reproducible from the generator and the seed; the images are a convenience, not the source of truth.

python3 clockface-synth/generate_parallel.py --n 12000 --workers 3 \ --out data-v2 --res 384 --samples 2 --seed 22 --synth-version 2 \ --max-roll 25 --fill-min 0.30 --fill-max 0.90 --max-off-axis 45

Two of the 12,000 renders had an orientation solve that did not converge (residual > 0.1 degrees) and were dropped, leaving 11,998.

Licence

CC BY 4.0. The generator is Apache 2.0.