Aplikasi backend ini dibangun menggunakan framework Hapi untuk menyediakan API prediksi klasifikasi kanker (Cancer/Non-cancer) menggunakan model TensorFlow.js. Data riwayat prediksi disimpan secara persisten menggunakan Google Cloud Firestore.
Proyek ini dirancang untuk memenuhi submisi "Belajar Penerapan Machine Learning dengan Google Cloud".
- Prediksi Klasifikasi: Mengklasifikasikan gambar yang diunggah menjadi "Cancer" atau "Non-cancer".
- Riwayat Prediksi: Menyimpan dan mengambil riwayat prediksi dari database Firestore.
- Penanganan Error: Validasi ukuran file (maks 1MB) dan format input.
- Node.js (Runtime Environment)
- @hapi/hapi (Web Framework)
- @tensorflow/tfjs-node (Machine Learning Model Loader & Inference)
- @google-cloud/firestore (NoSQL Database)
- Docker (Containerization)
.
├── src
│ ├── exceptions # Custom Error classes (ClientError, InputError)
│ ├── server # Konfigurasi Server, Routes, dan Handler
│ └── services # Logika bisnis (Inference, Firestore, Load Model)
├── Dockerfile # Konfigurasi Docker image
├── package.json # Dependensi proyek
└── ...
Sebelum menjalankan aplikasi, pastikan Anda telah menginstal:
- Node.js (Disarankan v20 sesuai Dockerfile)
- Google Cloud Service Account Key (File JSON untuk akses Firestore)
- Clone repository ini:
git clone <repository-url>
cd <folder-repository>
- Install dependencies:
npm install
- Konfigurasi Environment Variable:
Aplikasi ini membutuhkan beberapa variabel lingkungan. Anda dapat mengaturnya di sistem operasi Anda atau membuat file
.env. Variabel yang digunakan:
PORT: Port server (default:3000)MODEL_URL: URL publik ke filemodel.json(default:https://storage.googleapis.com/machinelearning-ryo/model.json).GOOGLE_APPLICATION_CREDENTIALS: Path absolut ke file JSON Service Account Google Cloud Anda (wajib untuk akses Firestore).
Penting: Jangan lupa menambahkan file
serviceaccount.jsonatau kunci rahasia ke dalam.gitignoreagar tidak terunggah ke repositori publik.
Untuk menjalankan di mode production:
npm run start
Untuk menjalankan di mode development (dengan nodemon):
npm run start:dev
Server akan berjalan di http://localhost:3000.
- Build Image:
docker build -t submission-backend .
- Jalankan Container:
docker run -p 3000:3000 submission-backend
Melakukan prediksi pada gambar yang diunggah.
- Method:
POST - Header:
Content-Type: multipart/form-data - Body:
image: File gambar (Maksimal 1MB)
Contoh Response Sukses (201 Created):
{
"status": "success",
"message": "Model is predicted successfully",
"data": {
"id": "77e30dcd-...",
"result": "Cancer",
"suggestion": "Segera periksa ke dokter!",
"createdAt": "2024-05-01T10:00:00.000Z"
}
}
Kriteria Prediksi:
- Confidence Score > 50% = Cancer
- Confidence Score <= 50% = Non-cancer
Mengambil seluruh riwayat prediksi yang tersimpan di Firestore.
- Method:
GET
Contoh Response Sukses (200 OK):
{
"status": "success",
"data": [
{
"id": "77e30dcd-...",
"history": {
"result": "Cancer",
"createdAt": "2024-05-01T10:00:00.000Z",
"suggestion": "Segera periksa ke dokter!",
"id": "77e30dcd-..."
}
},
...
]
}
Aplikasi menangani beberapa skenario error umum:
- Payload Too Large (413): Jika ukuran gambar melebihi 1MB.
- Input Error (400): Jika terjadi kesalahan dalam proses prediksi (Bad Request).
ISC



