beefresearch-bima / README.md
abrarwahid's picture
update readme
8f4a33a
|
Raw
History Blame Contribute Delete
4.39 kB
---
license: mit
library_name: scikit-learn
tags:
- computer-vision
- image-processing
- unsupervised-learning
- bag-of-visual-words
- sift
- surf
- kmeans
- meat-quality
- beef-grading
---
# Pipeline Beef Research BIMA: Deteksi Mutu Kesegaran Daging Sapi Multidomain
Pipeline **unsupervised** (SIFT/SURF -> Bags of Visual Words -> Clustering) untuk
dataset citra daging sapi multidomain (RPH & UMKM), seluruh proses klasifikasi mutu dilakukan tanpa pelatihan supervised
(tanpa SVM/KNN), murni berbasis unsupervised learning.
## 1. Setup Environment (uv, Python 3.7, OpenCV 3.4.2.16)
```bash
# Install python 3.7 lewat uv (jika belum ada di mesin)
uv python install 3.7
# Buat & sync environment sesuai pyproject.toml
uv sync
# (opsional) verifikasi SIFT & SURF tersedia (harus tercetak True True)
uv run python -c "import cv2; s=cv2.xfeatures2d.SIFT_create(); f=cv2.xfeatures2d.SURF_create(); print(True, True)"
```
> Catatan: jika `uv python install 3.7` gagal karena python-build-standalone tidak
> lagi menyediakan build 3.7 di platform Anda, gunakan pyenv/conda untuk
> menyediakan interpreter 3.7, lalu arahkan uv ke sana dengan
> `uv venv --python /path/to/python3.7` sebelum `uv sync`.
## 2. Siapkan Data
Susun dataset mentah sesuai struktur pada README dataset (folder `DAY-1/`, `DAY-2/`,
penamaan `[HARI]_[DOMAIN]_[KODE]_[NOMOR].JPG`). Atur path pada `config.py`
(`RAW_DATA_DIR`).
Jika Anda sudah punya sebagian label ground truth (dari pelabelan awal tim
peneliti / Peternakan), siapkan file CSV opsional `labels.csv` dengan kolom
`filename,label` (label: `segar` / `tidak_segar`) β€” dipakai HANYA untuk
validasi eksternal klaster (ARI/NMI/Purity), bukan untuk training.
## 3. Menjalankan Pipeline
Pipeline terbagi menjadi 5 tahap, masing-masing bisa dijalankan terpisah
(hasil antara di-cache di `outputs/interim/`) atau sekaligus dengan `all`.
```bash
uv run python run_pipeline.py --step preprocess
uv run python run_pipeline.py --step extract
uv run python run_pipeline.py --step bovw
uv run python run_pipeline.py --step cluster
uv run python run_pipeline.py --step evaluate
# atau jalankan semua tahap sekaligus
uv run python run_pipeline.py --step all
```
## 4. Struktur Output
```
outputs/
β”œβ”€β”€ interim/ # cache pickle antar tahap (boleh dihapus & rerun)
β”‚ β”œβ”€β”€ manifest.pkl # metadata semua citra (hari/domain/kode/label)
β”‚ β”œβ”€β”€ masks/ # mask ROI hasil segmentasi (npz per citra)
β”‚ β”œβ”€β”€ descriptors_sift.pkl
β”‚ β”œβ”€β”€ descriptors_surf.pkl
β”‚ β”œβ”€β”€ codebook_sift.pkl
β”‚ β”œβ”€β”€ codebook_surf.pkl
β”‚ β”œβ”€β”€ histograms_sift.npy
β”‚ └── histograms_surf.npy
β”œβ”€β”€ figures/ # semua grafik (PCA/TSNE, perbandingan metrik, dsb.)
β”œβ”€β”€ tables/ # semua tabel hasil (CSV) siap ditempel ke laporan
└── logs/
└── pipeline.log
```
## 5. Tahapan Pipeline (ringkas)
1. **Preprocessing & Segmentasi ROI** (`src/preprocessing.py`, `src/segmentation.py`)
Resize, denoising, konversi HSV, dan **segmentasi latar belakang berbasis
flood-fill dari tepi citra** (bekerja untuk backdrop hitam Day-1 maupun
karton biru muda Day-2 tanpa perlu aturan warna berbeda per hari) sehingga
fitur yang diekstraksi terfokus pada permukaan daging, bukan latar
belakang yang kebetulan berkorelasi dengan hari/tahap kesegaran.
2. **Ekstraksi Fitur Lokal** (`src/feature_extraction.py`)
SIFT dan SURF dijalankan terpisah, keypoint dibatasi hanya pada area mask
ROI daging (parameter `mask` di `detectAndCompute`).
3. **Bags of Visual Words** (`src/bovw.py`)
Codebook dibangun dengan `MiniBatchKMeans` (beberapa ukuran cluster diuji:
50/100/150/200 sesuai indikator capaian proposal), setiap citra direpresentasikan
sebagai histogram fitur ternormalisasi.
4. **Clustering Unsupervised** (`src/clustering.py`)
K-Means (k=2) dan Gaussian Mixture dibandingkan
untuk membagi citra ke 2 klaster akhir (Segar/Tidak Segar).
5. **Evaluasi & Komparasi SIFT vs SURF** (`src/evaluation.py`, `src/visualization.py`)
Validasi internal (Silhouette, Davies-Bouldin, Calinski-Harabasz), validasi
eksternal opsional (ARI/NMI/Purity bila ada `labels.csv`), efisiensi
komputasi (waktu ekstraksi & jumlah keypoint rata-rata), serta visualisasi
PCA/t-SNE dari histogram BoVW.