Spaces:
Sleeping
Sleeping
|
Download README.md from crtal/siPeka-model-api: direct link, hf CLI and curl.
- Browser
- Download file 3.3 kB
-
https://huggingface.co/spaces/crtal/siPeka-model-api/resolve/main/README.md
- Command line
-
hf download hf://spaces/crtal/siPeka-model-api/README.md
-
curl -L -o README.md https://huggingface.co/spaces/crtal/siPeka-model-api/resolve/main/README.md
3.3 kB
metadata
title: Food Spoilage Detection
emoji: π
colorFrom: green
colorTo: red
sdk: docker
app_file: app.py
pinned: false
siPeka β Food Spoilage Detection API
A REST API that classifies fruits and vegetables as fresh or spoiled using a fine-tuned Swin Transformer Tiny.
Live demo: huggingface.co/spaces/crtal/siPeka-model-api
Tech Stack
| Layer | Technology |
|---|---|
| API Framework | FastAPI |
| Model Architecture | Swin Transformer Tiny (torchvision) |
| Training | PyTorch 2.10 Β· AdamW Β· Cosine Annealing LR |
| Inference | CUDA / CPU (auto-detected) |
| Containerization | Docker |
| Deployment | Hugging Face Spaces |
| CI/CD | GitHub Actions |
API Reference
GET /
Returns basic API info.
Response
{
"message": "Food Spoilage Detection API is running.",
"usage": "POST an image to /predict",
"supported_classes": ["fresh", "spoiled"]
}
GET /health
Health check endpoint.
Response
{ "status": "ok" }
POST /predict
Classifies an image as fresh or spoiled.
Request
| Field | Type | Description |
|---|---|---|
file |
multipart/form-data |
Image file (.jpg, .jpeg, .png) |
Constraints
- Max file size: 20 MB
- File must be a valid image readable by PIL
Responses
200 OK β Successful prediction
{
"status": "success",
"prediction": "fresh",
"confidence": 0.95,
"model": "swin_transformer_tiny_finetuned"
}
200 OK β Low confidence (image may not be a food item)
{
"status": "ambiguous",
"confidence": 0.61,
"message": "Model confidence too low. The image might not be a recognized food item or is too low quality.",
"suggestion": "Please provide a clearer image of a fruit or vegetable."
}
400 Bad Request β Invalid input
{ "detail": "File too large. Maximum size is 20 MB." }
{ "detail": "Could not read image. Please upload a valid image file." }
500 Internal Server Error β Inference failure
{ "detail": "Error processing image: <reason>" }
Example
curl -X POST "https://crtal-sipeka-model-api.hf.space/predict" \
-F "file=@apple.jpg"
Run Locally
git clone https://github.com/yukienjoyer7/sipeka-model-api.git
cd sipeka-model-api
pip install -r requirements.txt
uvicorn app:app --host 0.0.0.0 --port 7860
Training
1. Prepare data
python scripts/prepare_data.py
Restructures the raw dataset into binary fresh / spoiled classes and splits into train / val / test (70 / 15 / 15).
2. Train
python scripts/train.py \
--arch swin_t_finetune \
--output models/spoilage_model_swin_finetuned.pth \
--epochs 20 \
--lr 0.0001 \
--scheduler
--arch |
Description |
|---|---|
mobilenet |
MobileNetV2, head only |
swin_t |
Swin Transformer Tiny, head only |
swin_t_finetune |
Swin Transformer Tiny, last block + head unfrozen |
swin_s |
Swin Transformer Small, last block + head unfrozen |
3. Evaluate
python scripts/evaluate.py \
--arch swin_t_finetune \
--weights models/spoilage_model_swin_finetuned.pth
Prints a full classification report and confusion matrix on the test set.