stackmeo 🐱

stackmeo is a small image-classification model that recognizes cat breeds from a photo. The name comes from "mèo", Vietnamese for cat.

Give it one picture of a cat and it returns the most likely breeds, each with a confidence score. It's kept lightweight so it's easy to drop into a hobby project, a demo, or an app.

What it recognizes

stackmeo knows 10 breeds:

  • Maine Coon: a large, friendly cat known for its bushy tail, tufted ears, and playful personality.
  • Ragdoll: a calm, affectionate cat that tends to go limp when you hold it.
  • British Shorthair: a sturdy, quiet, and easygoing cat with a dense coat and round face.
  • Siamese: a slender, vocal cat with striking blue eyes and sharp color points.
  • Persian: a fluffy, quiet "couch potato" with a flat face that needs daily grooming.
  • Sphynx: a hairless, high-energy cat with big ears and warm, suede-like skin.
  • Bengal: an active, athletic cat with a spotted coat that looks like a wild leopard.
  • Scottish Fold: a sweet-tempered cat known for its folded-over ears and round eyes.
  • Russian Blue: a graceful cat with a shimmering silver-gray coat and a gentle, quiet nature.
  • Abyssinian: a lean, curious, and playful cat with a ticked, multi-colored coat.

Quick start

pip install torch torchvision pillow huggingface_hub
import torch
from huggingface_hub import hf_hub_download
from PIL import Image
from torchvision import transforms

path = hf_hub_download("hgrrg/stackmeo", "test.pt")
model = torch.jit.load(path, map_location="cpu").eval()

LABELS = [
    "Maine Coon", "Ragdoll", "British Shorthair", "Siamese", "Persian",
    "Sphynx", "Bengal", "Scottish Fold", "Russian Blue", "Abyssinian",
]

preprocess = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),
])

img = preprocess(Image.open("my_cat.jpg").convert("RGB")).unsqueeze(0)
with torch.no_grad():
    probs = model(img).softmax(dim=1)[0]

top = probs.topk(3)
for score, idx in zip(top.values, top.indices):
    print(f"{LABELS[idx]}: {score:.1%}")

This prints the 3 most likely breeds for my_cat.jpg with a confidence score for each.

Limitations

  • It only knows cats. Show it a dog or a teapot and it will still answer with a cat breed, because it can't say "this isn't a cat".
  • Mixed-breed cats, and breeds that aren't in the list above, get matched to the closest known breed.
  • It works best on clear photos where the cat fills most of the frame.
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support