Published Zenodo record / Archives restricted / Access by request

Embedded Machine Learning Laboratory · UT Dallas

ICMarking
Synthetic

Defects by design.
Labels by construction.

A synthetic image dataset of defective integrated circuit markings generated by physics-informed guidelines.

Md Sami Ul Hoque · Nasser Kehtarnavaz

University of Texas at Dallas

SYNTHETIC SPECIMENRelease image
Exact defect-free counterpart for the featured exampleScratch release example on source TVIC29
CAPTURE GROUPTVIC29_C000
IMAGE CLASSScratch
Drag to reveal the defect

Adapted from Robert.Baruch · CC BY-SA 4.0

6,000synthetic images
6image classes
4defect types
40source images
6,757visible instances

The motivation

Real defects are scarce.
Useful training data
should not be.

Start with a defect-free IC image. Model what causes a defect. Keep the rendering parameters and generated labels together.

The physics-informed guidelines distinguish damage to the package surface from changes to the marking itself. Scratch, contamination, missing text, smeared text, and their combinations are generated with labels taken directly from the renderer.

Read the evidence and its limits

Physics-informed guidelines

From a clean capture
to a labeled defect.

Follow the decisions that connect the source image, physical cause, rendered appearance, and annotation.

1 / 5 · Source & regionsGuided explanation using existing release examples, not live generation.
Release example for the selected generation step

Source & regions

Separate the surface from the marking.

Identify the package face, marking strokes, and protected structures. This separates where surface defects may appear from where text defects may alter the marking.

Paper §3.2. The image is a clean release rendering of the source, not a raw source photograph.

Adapted from Robert.Baruch · CC BY-SA 4.0

SURFACE · ABRASION

Scratch

Intermittent contact creates an irregular bright trace with changing width, density, and texture.

SURFACE · DEPOSITION

Contamination

Deposited and partly wiped residue forms textured patches, fragments, and satellite droplets.

MARKING · LOSS

Missing text

Insufficient marking energy removes portions of existing character strokes.

MARKING · REDISTRIBUTION

Smeared text

Defocus, melting, or ink spread widens and redistributes the photographed marking.

These are cause-derived image-formation approximations, not first-principles material or optical simulations.

Look closer

Explore the dataset.

A traceable sample of 600 release images, 100 per class. Inspect the clean counterpart and annotations without downloading an archive.

600 specimens · showing 12Click a specimen to inspect its labels

A dataset you can trace

Different defects.
A shared clean capture.

Images in a capture group share the same defect-free rendering. This keeps the comparison controlled and the annotations tied to the changes.

TVIC29_C000Same source, pose, illumination, and sensor variation

Adapted from Robert.Baruch · CC BY-SA 4.0

Adapted from Robert.Baruch · CC BY-SA 4.0

Adapted from Robert.Baruch · CC BY-SA 4.0

Adapted from Robert.Baruch · CC BY-SA 4.0

Adapted from Robert.Baruch · CC BY-SA 4.0

Adapted from Robert.Baruch · CC BY-SA 4.0

Balanced image classes

Full-release class counts and visible defect instances
Image classImagesInstances
Defect-free1,0000
Scratch1,0001,000
Contamination1,0001,400
Missing text1,0001,000
Smeared text1,0001,000
Combined1,0002,357

“Combined” is an image-level class. Its component defects retain their own types, masks, polygons, and boxes.

Evaluate on unseen source images.

A source image belongs to only one subset. This is the stricter check of generalization across the source collection.

Training
3,605
Validation
1,204
Test
1,191

Keep each capture group within one subset. Both protocols concern the openly licensed sources, not the real evaluation data.

Beyond the balanced release

1,018 capture groups connect the balanced collection. A separate 467-image cosmetic supplement is not part of the 6,000 images. The archive includes 18 auxiliary clean counterparts recovered from the original captures. The viewer always uses the matching stored counterpart, not an approximate regeneration.

Evidence, with its boundaries

Three ways to ask:
does it work?

Distribution similarity, recognition by a rule-based inspector, and transfer to the real IC marking dataset of [1] answer different questions.

APPEARANCE

Distribution similarity

Scratch results are mixed across measures. Contamination has lower point estimates than patch blending on most measures.

Small reference populations and calibration overlap limit the conclusion. Sensitivity ranges do not establish equivalence.

Paper §5.1 · Table 7
RECOGNITION
92.8%

Inspector recognition

On the synthetic test split, with thresholds fitted on synthetic validation images. Published thresholds yield 88.6% in the manuscript.

Recognition of synthetic images is not the same as prospective factory performance.

Paper §5.2
TRANSFER
11.3 ± 0.6 / 14

Real defect images found

Mean over training seeds, full release, product-matched protocol, at the reported false-alarm-constrained operating point.

That operating point and the training-protocol choice used the real evaluation images.

Paper §4.5 · Table 8

Explore the reported results

Change the measure. See the trade-off.

Existing manuscript results only. No model runs in the browser.

Found / 14 · higher is better · scale 0–14

Bars show means; whiskers show ± sample SD, clipped to the valid scale. These are not confidence intervals or significance tests. Select a method to see its detection and false-alarm results together.

Choose a bar to inspect the method.
Read the detector comparison and fixed-confidence results

Values are extracted from the manuscript table. The fixed-confidence columns are shown alongside the retrospectively selected operating point; false alarms must be read with detection counts.

Detector transfer on real frames. FB: mean false boxes per defect-free frame. Values are mean ± sample SD over training seeds. Bracketed source numbers refer to the manuscript bibliography.
Training imagesReal defect pixelsFound / 14Scratch / 6Contamination / 8FBCorrect-class recallFound / 14 at 0.25FB at 0.25
Guidelines, full release, product-matchedno11.3 ± 0.65.0 ± 0.06.3 ± 0.60.31 ± 0.150.60 ± 0.0411.3 ± 0.60.85 ± 0.42
Guidelines, full release, source-disjointno11.0 ± 0.05.0 ± 0.06.0 ± 0.00.17 ± 0.220.60 ± 0.0411.3 ± 0.61.29 ± 0.44
Guidelines, matched 5,000, product-matchedno11.3 ± 1.25.0 ± 0.06.3 ± 1.20.19 ± 0.200.48 ± 0.0411.7 ± 0.60.44 ± 0.15
Guidelines, matched 5,000, source-disjointno11.0 ± 1.05.0 ± 0.06.0 ± 1.00.27 ± 0.110.55 ± 0.0410.7 ± 1.20.61 ± 0.33
Patch blending [1]yes10.0 ± 2.04.7 ± 0.65.3 ± 1.50.29 ± 0.260.69 ± 0.158.0 ± 1.70.08 ± 0.06
Stable Diffusion Inpainting [38]no2.7 ± 1.20.7 ± 0.62.0 ± 1.00.43 ± 0.050.14 ± 0.077.3 ± 0.60.80 ± 0.02
NSA [10]no3.0 ± 2.01.7 ± 1.51.3 ± 0.60.19 ± 0.170.001.7 ± 0.60.36 ± 0.39
CutPaste-style [8]no2.3 ± 0.61.0 ± 0.01.3 ± 0.60.34 ± 0.110.002.0 ± 1.00.60 ± 0.12
DRAEM-style [9]no2.0 ± 1.01.7 ± 0.60.3 ± 0.60.34 ± 0.190.002.3 ± 0.60.51 ± 0.47
Line primitiveno1.3 ± 1.50.7 ± 0.60.7 ± 1.20.06 ± 0.060.002.3 ± 0.60.67 ± 0.13
Scope matters.

The evidence concerns one IC package and one imaging setup. Missing-text, smeared-text, and combined classes have only indirect or synthetic checks. These results are not a claim of production-line readiness.

Understand the files

One image.
Connected annotations.

The identifier links the image, defect masks, bounding boxes, polygons, capture group, and generation record.

labels/val/TVIC29_C000_scratch.txt
0 0.560937 0.479687 0.756250 0.259375

YOLO detection: class ID, normalized center x, center y, width, height. One row represents one visible instance.

These paths use the uploaded archive layout. Standard image and box-label discovery has been checked for both image views and split protocols.

Inside the uploaded dataset archive

docs/

Annotation format definitions and preserved validation results. 2 files

examples/

Executed browsing and statistics notebooks, plus loading, training, and face-crop scripts. 5 files

face_crop/

The same images cropped to the package face, with transformed labels and their own dataset definitions. 18,003 files

images/

Full grayscale images in source-disjoint train, validation, and test folders. 6,000 files

labels/

YOLO bounding boxes, arranged for the standard detector loader. 6,000 files

labels_coco/

Pixel-space boxes and polygons in COCO format. 3 files

labels_polygons/

Normalized instance polygons for segmentation. 6,000 files

masks/

Union and component renderer-support masks. These are not exhaustive maps of every changed pixel. 8,103 files

provenance/

Per-image generation records, source attribution, and auxiliary defect-free counterparts. 21 files

splits/

CSV source membership and capture-group-safe product-matched image lists. 2 files

supplement_cosmetic/

Separate cosmetic hard negatives and their labels and face crops, outside the balanced main collection. 935 files

Top-level orientation, attribution, license, checksum, dataset-definition, and metadata files accompany these folders. The following documentation is read directly from the verified archive.

README.md
# ICMarkingSynthetic 1.0

Synthetic images of IC package markings support defect detection and automatic labeling. The balanced collection contains 6,000 images from 40 openly licensed source photographs, with defect-free counterparts and construction-derived labels. It includes good, scratch, contamination, missing text, smeared text and combined images; it is not evidence of factory readiness.

## Start here

1. Open `examples/01_browse.ipynb` to inspect images and labels.
2. Open `examples/02_statistics.ipynb` to reproduce the composition counts.
3. Run `python examples/03_train_yolo.py --help` for the two training protocols.
4. Run `python examples/04_face_crop.py --help` to verify or recreate face crops.

Install `numpy==1.26.4 pillow pandas==2.2.3 matplotlib jupyter`; training additionally needs `ultralytics`. Notebooks have saved outputs. Run scripts from this folder.

| Folder or file | Contents |
|---|---|
| images/, masks/ | Full images and renderer support masks, by split |
| labels/, labels_polygons/, labels_coco/ | YOLO boxes, YOLO polygons, COCO JSON for COCO tools |
| face_crop/ | Matching cropped images, boxes, polygons and training YAML |
| image_classes.csv | One class and split row per balanced image |
| splits/ | Source-disjoint and product-matched membership CSVs |
| provenance/ | Complete JSONL read by examples/load.py; flat CSV; auxiliary clean counterparts |
| supplement_cosmetic/ | Separate cosmetic examples and their CSV |
| examples/ | Executed notebooks, loading, training and crop scripts |
| docs/ | FORMATS.md and preserved validation results |
| dataset*.yaml | Full-image Ultralytics configurations |
| SOURCES.csv | Source authors, licenses and modifications |
| DATASET_CARD.md | Scope, composition and limitations |
| croissant.json | Machine-readable catalog for Croissant tools |
| CHECKSUMS.sha256 | File-integrity hashes |
| LICENSE-IMAGES.txt, LICENSE-ANNOTATIONS.txt | Image and annotation license texts |

Images: CC BY-SA 4.0. Annotations and provenance: CC BY 4.0. Preserve source attribution. Masks are renderer support, not guaranteed exhaustive changed-pixel masks.

Citation: Md Sami Ul Hoque and Nasser Kehtarnavaz, ICMarkingSynthetic, 2026. Reserved DOI: 10.5281/zenodo.23600809.

Copyright (c) 2026 Md Sami Ul Hoque and Nasser Kehtarnavaz
docs/FORMATS.md
# Files and annotation formats

Images are 8-bit grayscale PNGs. The source-disjoint train/val/test folders contain 6,000 balanced images. A capture group shares one clean capture; keep every member together when splitting.

YOLO box rows: `class center_x center_y width height`, normalized by full image width and height. Class IDs 0, 1, 2, 3 mean scratch, contamination, missing text and smeared text. Good images have empty labels; combined images have separate defect boxes, not a fifth box class.

YOLO polygon rows: `class x1 y1 x2 y2 ...`, also normalized. External contours can omit holes and smaller disconnected regions. COCO files use pixel-space boxes and polygons and are read by COCO tools.

`provenance/records.jsonl` stores the complete nested record for each balanced image; `examples/load.py` and generator regeneration read it. `provenance/counterparts/records.jsonl` resolves the 18 clean counterparts outside the balanced set. `provenance/records.csv` projects both sets into Excel-friendly columns; filter `in_balanced_6000 == yes` before counting. Component types, severities and mechanisms are ordered semicolon lists. Seeds are 64-bit integers: use string or uint64 columns, not floating point.

`face_x1`, `face_y1`, `face_x2`, `face_y2` are the recorded crop corners, identical to `roi_xyxy`. They already include the six-pixel margin and frame clipping. Do not add padding again. The raw face boundary cannot always be recovered by subtracting padding, because clipping loses information. `examples/04_face_crop.py` uses the exact recorded crop and shifts/clips annotations.

`splits/source_disjoint.csv` maps source IDs to splits. `splits/product_matched.csv` maps image IDs to splits while keeping capture groups together. `image_classes.csv` combines both protocols. Ultralytics does not read split CSV directly: its product-matched YAML contains image paths generated from these same rows. Run training from the relevant full-image or face_crop folder.

`SOURCES.csv` retains all fields from the source attribution records. `supplement_cosmetic/manifest.csv` retains nested fields as JSON strings in CSV cells. Its 467 images are not part of the balanced 6,000. `croissant.json` is the standard catalog consumed by Croissant tools. No other JSON document is merely a second human-readable description.

The provenance `sha256` field is a 16-character prefix of a decoded-pixel hash. `CHECKSUMS.sha256` stores full hashes of encoded files. These are different checks. Renderer masks are not exhaustive changed-pixel support; this limitation is retained rather than repaired silently.

## One complete record

```json
{
  "image_id": "TVIC02_C000_scratch",
  "split": "train",
  "pm_split": "train",
  "source_id": "TVIC02",
  "capture_group": "TVIC02_C000",
  "capture": {
    "profile": "aoi",
    "angle_deg": 1.98,
    "scale": 1.006,
    "tx": 3.4,
    "ty": -0.6,
    "gain": 1.062,
    "gamma": 1.064,
    "bias": 3.9,
    "blur": 0.39,
    "noise": 3.6
  },
  "roi_xyxy": [
    173,
    48,
    473,
    265
  ],
  "marking_technology": "laser",
  "label": "scratch",
  "cosmetic": null,
  "is_combined_fault": false,
  "component_classes": [
    "scratch"
  ],
  "components": [
    {
      "class": "scratch",
      "mechanism": "abrasion_double_track",
      "severity_label": "low",
      "severity_value": 0.25,
      "mask_px": 2636,
      "parameters": {
        "length_fraction": 0.631,
        "reject_floor_retry_index": 0,
        "envelope_width_px": 11.14,
        "grooves": 6,
        "gate_duty": 0.69,
        "marking_overlap_fraction": 0.057,
        "scratch_p50": 171.82546997070312,
        "marking_p50": 255.0,
        "psf_sigma": 0.75
      }
    }
  ],
  "instances": [
    {
      "class": "scratch",
      "component": 0,
      "instance": 0,
      "bbox_xyxy": [
        225,
        62,
        446,
        115
      ],
      "area": 2525,
      "contrast": 73.6,
      "visible": true,
      "polygon": [
        225.0,
        78.0,
        226.0,
        79.0,
        231.0,
        79.0,
        232.0,
        78.0,
        245.0,
        79.0,
        247.0,
        77.0,
        250.0,
        77.0,
        253.0,
        79.0,
        259.0,
        79.0,
        260.0,
        78.0,
        262.0,
        80.0,
        266.0,
        79.0,
        273.0,
        80.0,
        278.0,
        79.0,
        280.0,
        77.0,
        284.0,
        77.0,
        287.0,
        80.0,
        290.0,
        77.0,
        294.0,
        77.0,
        295.0,
        80.0,
        299.0,
        80.0,
        304.0,
        78.0,
        306.0,
        83.0,
        307.0,
        81.0,
        319.0,
        82.0,
        320.0,
        83.0,
        322.0,
        82.0,
        327.0,
        83.0,
        330.0,
        81.0,
        333.0,
        83.0,
        347.0,
        80.0,
        353.0,
        81.0,
        355.0,
        79.0,
        353.0,
        77.0,
        354.0,
        76.0,
        362.0,
        76.0,
        364.0,
        74.0,
        368.0,
        77.0,
        367.0,
        78.0,
        362.0,
        78.0,
        361.0,
        79.0,
        363.0,
        81.0,
        365.0,
        80.0,
        369.0,
        81.0,
        371.0,
        79.0,
        372.0,
        80.0,
        374.0,
        79.0,
        376.0,
        81.0,
        382.0,
        81.0,
        383.0,
        80.0,
        388.0,
        81.0,
        391.0,
        77.0,
        393.0,
        77.0,
        396.0,
        80.0,
        399.0,
        79.0,
        401.0,
        80.0,
        416.0,
        76.0,
        422.0,
        76.0,
        426.0,
        73.0,
        432.0,
        74.0,
        434.0,
        72.0,
        443.0,
        74.0,
        445.0,
        72.0,
        445.0,
        70.0,
        443.0,
        68.0,
        429.0,
        68.0,
        428.0,
        69.0,
        421.0,
        69.0,
        416.0,
        71.0,
        412.0,
        71.0,
        411.0,
        74.0,
        409.0,
        73.0,
        402.0,
        76.0,
        396.0,
        76.0,
        393.0,
        73.0,
        383.0,
        73.0,
        382.0,
        72.0,
        379.0,
        73.0,
        376.0,
        71.0,
        351.0,
        72.0,
        341.0,
        69.0,
        339.0,
        71.0,
        330.0,
        71.0,
        329.0,
        72.0,
        328.0,
        68.0,
        315.0,
        68.0,
        312.0,
        70.0,
        309.0,
        69.0,
        307.0,
        71.0,
        305.0,
        70.0,
        298.0,
        72.0,
        295.0,
        71.0,
        293.0,
        72.0,
        292.0,
        71.0,
        284.0,
        71.0,
        278.0,
        73.0,
        271.0,
        73.0,
        270.0,
        72.0,
        263.0,
        72.0,
        262.0,
        73.0,
        257.0,
        72.0,
        256.0,
        73.0,
        254.0,
        72.0,
        251.0,
        75.0,
        248.0,
        72.0,
        232.0,
        72.0,
        231.0,
        73.0,
        226.0,
        73.0
      ]
    }
  ],
  "clean_counterpart": "TVIC02_C000_good",
  "image": "images/train/TVIC02_C000_scratch.png",
  "mask": "masks/train/TVIC02_C000_scratch.png",
  "changed_px": 4007,
  "changed_outside_face_px": 0,
  "seed": 1902019745343097344,
  "generator_version": "icmarkingsynthetic-generator-1.0",
  "sha256": "0c6a51c7e3313d74"
}
```
DATASET_CARD.md
# ICMarkingSynthetic

Authors: Md Sami Ul Hoque and Nasser Kehtarnavaz, Embedded Machine Learning Laboratory, University of Texas at Dallas.

Purpose: research on synthetic marking defects, detection and automatic labeling. Defects are cause-derived image-formation approximations, not first-principles material simulations. This archive contains synthetic images from openly licensed source photographs, not real evaluation frames. Missing and smeared text lack real-image evaluation in the reported study. Results are not evidence of factory readiness.

Composition:
```json
{
  "by_class": {
    "good": 1000,
    "scratch": 1000,
    "contamination": 1000,
    "missing_text": 1000,
    "smeared_text": 1000,
    "combined": 1000
  },
  "source_disjoint": {
    "train": 3605,
    "val": 1204,
    "test": 1191
  },
  "product_matched": {
    "train": 4569,
    "val": 716,
    "test": 715
  }
}
```

Saved masks represent renderer support. They are not guaranteed to contain every changed pixel. In the recovered counterpart subset, 18 of 38 pairs contain all changes of at least two gray levels within a one-pixel dilation of the saved mask; all 38 changed-pixel counts match provenance. Masks were preserved, not repaired. Polygons describe external contours and may omit holes or smaller disconnected regions. The sha256 provenance field is a 16-character prefix of the decoded pixel hash, not a PNG-file hash; use CHECKSUMS.sha256 for file integrity.

See SOURCES.csv for source licenses and modifications; no source photograph is asserted to be public domain merely because it is openly accessible.

Copyright (c) 2026 Md Sami Ul Hoque and Nasser Kehtarnavaz

Research access · Restricted archives

Explore now.
Request the full release.

The dataset and companion generator are deposited in a published Zenodo record. The record is public; both archives remain restricted and are available on approved request.

ZENODO DOI10.5281/zenodo.23600809
Published recordFiles restricted

View the Zenodo record. Contact the authors below to request access; approval and file delivery are handled separately.

Request access by email

Opens your email app. Nothing is submitted automatically.

Dataset archive

Full images and face crops, renderer masks, box and polygon labels, split definitions, source attribution, and clean counterparts.

ICMarkingSynthetic-v1.0.zip

1.29 GB · Uploaded · Restricted

Generator archive

Prepared sources, generation modules, frozen parameters, validation tools, and examples. MIT-licensed code; image licenses remain separate.

icmarkingsynthetic-generator-v1.0.zip

6.34 MB · Uploaded · Restricted
Archive integrity

These SHA-256 values identify the uploaded copies.

ICMarkingSynthetic-v1.0.zip
968e4a88e0837b7fb4648a9b6718016111a69727767dec841c61e394eaf31e63
icmarkingsynthetic-generator-v1.0.zip
00effb4212776fedd6f7cdf27abf31d586b5c4f835b03fbd3928bf31bfc87f83

How to request access

A short email is enough to begin.

Requests are reviewed by the authors. Access is not automatic. The license and attribution requirements for each component are stated in its archive.

  1. Introduce your work. Include your name, affiliation, and a brief research purpose.
  2. Say what you need. Specify the dataset, generator, or both, and include the DOI.
  3. Wait for the authors’ reply. The authors will discuss availability and arrange approved access. Do not send confidential review details.

Institutional contact: mdsamiul.hoque@utdallas.edu. Corresponding author: kehtar@utdallas.edu.

Generator contents, installation, and reproduction limits
# ICMarkingSynthetic generator

Install from the extracted folder: `python -m pip install .` (Python 3.12).

1. **Regenerate one image:** `python scripts/regenerate_image.py --dataset ../ICMarkingSynthetic-v1.0 --id TVIC29_C000_scratch --output out --require-exact` verifies decoded-pixel identity, failing on a mismatch.
2. **Rebuild the dataset:** `python scripts/build_release.py --output rebuilt` renders the selected plan; add `--limit 50` for a short trial.
3. **Render on your prepared image:** `python examples/quickstart.py --image my_image.png --face my_face.png --marking my_marking.png` writes fresh examples using your grayscale image and binary masks.

Open `examples/quickstart.ipynb` for the executed visual walkthrough. Run commands from this folder. NumPy and OpenCV are pinned because scalar precision and interpolation changes affect exact pixels; do not upgrade them for reproduction. Notebook users can install `jupyter pandas==2.2.3` after installing this package.

| Folder or file | Purpose |
|---|---|
| icmarkingsynthetic/ | Capture, defect, label and validation implementations |
| profiles/ | Three live JSON profiles, read by load_profile() |
| sources/ | Prepared images and masks; generation_plan.json read by build_release.py, plus a human-readable CSV |
| SOURCES.csv | Full attribution and metadata for the 40 prepared sources |
| scripts/ | Prepare, calibrate, regenerate, rebuild and validate commands |
| examples/ | Executed notebook, matching Python example and new-defect template |
| tests/ | Determinism, surface confinement and profile-change tests |
| .github/workflows/ | Isolated installation and reproduction checks |
| CHECKSUMS.sha256 | File-integrity hashes |

The three profile files hold tunable defect profile parameters. `calibrate_profile.py` compares descriptor tables to evaluate their settings; it does not automatically infer every physical parameter. Mathematical constants and fixed implementation choices remain in the code. Run a fresh Python process after editing profiles. `ICMARKINGSYNTHETIC_PROFILES` may point to a temporary profile directory for an isolated experiment.

Code: MIT. Source images: CC BY-SA 4.0; annotations: CC BY 4.0. Keep SOURCES.csv and the separate license texts. Source attribution is not replaced by the code copyright.

Platform test status is recorded in TESTED_PLATFORMS.md. No unexecuted platform is claimed as passing. For your own Python or notebook session, import `icmarkingsynthetic` before NumPy, OpenCV or Matplotlib. The package selects the release-compatible NumPy CPU path automatically; the supplied scripts already use this order. If NumPy was imported first on an AVX-512 machine, restart the session and import the generator first.

Copyright (c) 2026 Md Sami Ul Hoque and Nasser Kehtarnavaz
# Isolated installation tests

Tests completed on 2026-10-24 (UTC), corresponding to 23 October in US Central time.

| Platform | Isolated input | Result |
|---|---|---|
| Windows desktop, Python 3.12 | Both complete distribution ZIPs, new virtual environment | PASS |
| Windows laptop, Python 3.12 | Both complete distribution ZIPs, new virtual environment | PASS |
| Ubuntu GitHub Actions, Python 3.12 | Code ZIP and the documented 60-image dataset fallback, new virtual environment | PASS |

Each test installs without access to another project directory, verifies `TVIC29_C000_scratch` with `--require-exact`, runs the quickstart (16 images and 16 masks, covering four severities), builds exactly 50 balanced images against frozen expected pixel hashes, and passes five unit tests. The Ubuntu sample includes the named regeneration example and 59 initial plan rows; it retains their original seeds and expected digests. A separate four-run Ubuntu matrix checks the numerical compatibility setting.

The complete Windows reconstruction matched all 6,000 balanced image digests. The distributed full-image, face-crop, mask, supplement and counterpart PNGs were also compared by file SHA-256, not merely visual similarity.

Exact reproduction is checked under Python 3.12, NumPy 1.26.4, OpenCV 4.11.0.86, Pillow 12.3.0 and Matplotlib 3.11.2. NumPy 2 changes scalar promotion; newer OpenCV kernels and NumPy's AVX-512 power implementation can alter pixels. The package disables NumPy AVX512F before NumPy initializes. Import `icmarkingsynthetic` first in a custom notebook, before NumPy, OpenCV or Matplotlib; otherwise restart the session when the package asks you to do so. This is numerical compatibility, not a change to the defect profiles or seeds.

macOS, ARM, other Python versions, and full-dataset reconstruction on Linux have not been verified. An Ubuntu small-sample pass is not a claim of full-release Linux checksum equivalence. The code refuses to report exact reproduction when a recorded pixel digest differs.
Before using the files

Renderer masks are not guaranteed to contain every changed pixel. Exact reproduction depends on the documented software versions and numerical compatibility settings. Windows full-release checks and an Ubuntu small-sample check are documented in the generator archive; other platforms remain unverified. Read both archive READMEs and the tested-platforms document. This release is not evidence of factory readiness.

Reference this work

Citation & attribution.

Manuscript under review at Electronics (MDPI).

The manuscript citation is provisional. The published dataset DOI appears in the access section and is not a published-paper DOI.

@unpublished{hoque2026icmarkingsynthetic,
  title = {Physics-Informed Guidelines for Generating a Synthetic Image Dataset of Defective Integrated Circuit Markings},
  author = {Hoque, Md Sami Ul and Kehtarnavaz, Nasser},
  year = {2026},
  note = {Manuscript under review}
}
IMAGES

CC BY-SA 4.0

Per-image attribution links every synthetic example to its openly licensed source.

ANNOTATIONS & PROVENANCE

CC BY 4.0

Labels and generation records are documented separately from source-image rights.

GENERATOR

MIT

The generator code is MIT-licensed. Prepared source images retain their own image-license and attribution requirements.

View all source-image attributions
SourceAuthorOriginal licenseModifications
TVIC02Mister rfCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC08Robert.BaruchCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC12Raimond SpekkingCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC13Raimond SpekkingCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC15Raimond SpekkingCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC16Raimond SpekkingCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC18viagallery.comCC BY 2.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC19viagallery.comCC BY 2.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC22Robert.BaruchCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC23Robert.BaruchCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC14Mister rfCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC29Robert.BaruchCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC30Robert.BaruchCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC31Raimond SpekkingCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC33Raimond SpekkingCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC35Raimond SpekkingCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC36Raimond SpekkingCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC37Raimond SpekkingCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC39Raimond SpekkingCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC40Raimond SpekkingCC BY-SA 4.0Line-local coherent photographed character strokes lifted toward white; no glyph or logo redrawing. Synthetic capture and defects applied for this collection.
TVIC41<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC42<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC43<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC44<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC45<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC46<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC47<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC48<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC49<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC50<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Clean overhead open-license source replacing the visibly scratched Siemens photograph; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC51<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC52<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Clean overhead open-license source replacing the occluded CAND022 photograph; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC53<a href="//commons.wikimedia.org/wiki/User:Markus_Kuhn" title="User:Markus Kuhn">Markus Kuhn</a>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC54<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC55<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC56<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC57<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC58<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC59<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.
TVIC60<bdi><a href="https://www.wikidata.org/wiki/Q108103612" class="extiw" title="d:Q108103612"><span title="Wikipedian and OpenStreetMap mapper from Cologne, Open Data activist">Raimond Spekking</span></a></bdi>CC BY-SA 4.0Strict top-view open-license source; tight package-and-leads crop; grayscale tone normalization; package-face-restricted marking brightness and positive-only edge sharpening; isolated dust-sized highlights removed outside protected marking; no inpainting, text redrawing, logo redrawing, or inserted fault. Synthetic capture and defects applied for this collection.

[1] Dai, J.; Koundinya, M.S.; Alam, L.; Kehtarnavaz, N. Auto-Labeling of IC Markings via Reinforcement Learning. IEEE Access 2026, 14, 64249-64262. https://doi.org/10.1109/ACCESS.2026.3687036

Specimen viewer

Defect-free counterpart
Synthetic defect image
Synthetic image