| --- |
| license: mit |
| library_name: scikit-learn |
| tags: |
| - color-classification |
| - random-forest |
| - tabular-classification |
| - scikit-learn |
| --- |
| |
| # Color AI β chroma classifiers |
|
|
| Three trained color-naming classifiers: given a color, they name it β |
| "red", "navy", "charcoal", etc. Each is a `scikit-learn` |
| `RandomForestClassifier`, trained entirely on synthetic labeled data (no |
| photos, no dataset needed to build them) β see |
| [color-ai-core](https://pypi.org/project/color-ai-core/) on PyPI for the |
| code that trained these and the functions to use them correctly. |
|
|
| ## Files |
|
|
| | File | Code name | Colors | Trees | Samples/class | Validation accuracy | |
| |---|---|---|---|---|---| |
| | `color_classifier_nano.joblib` | `chromav1n-clf` | 12 | 60 | 400 | 92.4% | |
| | `color_classifier_micro.joblib` | `chromav1u-clf` | 24 | 80 | 500 | 82.7% | |
| | `color_classifier_microsuper.joblib` | `chromav1us-clf` | 24 | 80 | 800 | 84.4% | |
|
|
| **Nano** covers the basics: red, orange, yellow, green, teal, blue, |
| purple, pink, brown, black, gray, white. |
|
|
| **Micro** and **Micro Super** add 12 more: maroon, navy, olive, lime, |
| cyan, magenta, indigo, coral, mint, lavender, beige, charcoal. Micro |
| Super is the same 24 classes as Micro, just trained on more samples per |
| class (800 vs 500), which measurably improves accuracy β same anchors, |
| same architecture, purely more training evidence. |
|
|
| Micro and Micro Super also support a **two-stage fallback**: when the |
| model isn't confident (below 50%) in its specific pick, it's meant to |
| report the broader Nano-family color instead of guessing between two |
| close options (e.g. "brown" instead of a shaky call between beige and |
| charcoal). This logic lives in the `color-ai-core` package, not baked |
| into the `.joblib` file itself β see Usage below. |
|
|
| ## Usage |
|
|
| β οΈ These models do **not** take raw RGB as input. They were trained on a |
| 4-value feature vector β `[sin(hue), cos(hue), saturation, value]` β not |
| `[R, G, B]` directly. Feeding raw RGB straight to `.predict()` will run |
| without error but give meaningless results. Use the matching feature |
| function from `color-ai-core` rather than hand-rolling it: |
|
|
| ```bash |
| pip install color-ai-core huggingface_hub |
| ``` |
|
|
| ```python |
| from huggingface_hub import hf_hub_download |
| from color_ai_core import load_model, predict_color |
| |
| path = hf_hub_download(repo_id="YOUR_USERNAME/YOUR_REPO_NAME", |
| filename="color_classifier_micro.joblib") |
| clf = load_model(path) |
| |
| name, confidence, used_fallback = predict_color(clf, [220, 40, 30], tier="micro") |
| print(name) # "red" |
| ``` |
|
|
| `predict_color()` handles the RGB β feature conversion and the two-stage |
| fallback correctly β that's why it's the supported way to use these |
| files rather than calling `clf.predict()` directly. |
|
|
| ## Training |
|
|
| All three were trained on jittered synthetic data generated around fixed |
| HSV anchor points per color (e.g. red β hue 0Β°, high saturation, high |
| value) β noise is added to hue, saturation, value, and the final RGB to |
| simulate lighting and camera variation, so each model learns a color's |
| *range* rather than one exact shade. No photos were used to train these |
| specific files. `color-ai-core` also includes `train_from_images()` for |
| training a classifier on your own labeled photos instead, if you'd |
| rather have that. |
|
|
| ## License |
|
|
| MIT |
|
|