6.1 KiB
Detection by Case
Sistem Review Visual Batch Ayam Potong Salatiga & Cicalengka
1. Latar Belakang
Sistem real-time counting yang sudah berjalan di Salatiga dan Cicalengka menghasilkan log batch harian secara otomatis. Namun dalam beberapa kondisi lapangan — seperti batch dengan selisih hitungan signifikan, anomali jumlah, atau kasus yang perlu diinvestigasi lebih lanjut — tim membutuhkan cara untuk mereview rekaman batch tertentu secara visual tanpa harus menganalisis raw video secara manual.
Sistem "Detection by Case" hadir sebagai solusi on-demand yang memungkinkan user mengupload rekaman video batch tertentu, memproses inferensi menggunakan model yang sama dengan sistem real-time, dan menghasilkan video beranotasi untuk keperluan review.
2. Tujuan Sistem
- Memungkinkan user mereview visual counting pada batch tertentu yang dicurigai bermasalah
- Menghasilkan video beranotasi dengan skeleton pose, bounding box, ID tracking, dan overlay count
- Tidak mengganggu resource dan operasional sistem real-time yang sedang berjalan
- Tidak menyimpan data video secara permanen di storage Jetson
3. Ruang Lingkup
Sistem ini mencakup dua unit produksi:
- Ayam Potong Salatiga
- Ayam Potong Cicalengka
Masing-masing unit menggunakan model pose estimation yang sudah ditraining sesuai kondisi lapangan masing-masing.
4. Arsitektur Sistem
4.1 Komponen Utama
| Komponen | Keterangan |
|---|---|
| Web Interface | Form upload video, pilih unit (Salatiga/Cicalengka), tombol proses, progress indicator, dan tombol download hasil |
| Backend API | Flask/FastAPI yang menerima upload, mengelola antrian proses, menjalankan inference, dan menyajikan file hasil untuk didownload |
| Inference Engine | Model YOLOv8n-pose / YOLO11n-pose yang sudah ditraining per unit, dijalankan on-demand saat ada request |
| Job Queue | Antrian pemrosesan video — hanya satu video diproses dalam satu waktu untuk menjaga performa Jetson |
| Temp Storage | File video input dan output disimpan sementara di /tmp, dihapus otomatis setelah proses download selesai |
4.2 Alur Proses
User upload video
↓
Pilih unit (Salatiga / Cicalengka) → load model yang sesuai
↓
Video disimpan sementara di /tmp → masuk antrian
↓
Inference + render annotated video
↓
File tersedia untuk download
↓
Download selesai → semua file temp dihapus otomatis
4.3 Mekanisme Temporary Storage
Seluruh file video — baik input maupun output — tidak pernah disimpan secara permanen di storage Jetson. Mekanisme yang digunakan:
- File input: disimpan di
/tmpmenggunakan Pythontempfilemodule dengan auto-delete - File output: disimpan di
/tmpselama proses render berlangsung - Setelah download selesai: file dihapus otomatis melalui cleanup callback
- Jika proses gagal atau timeout: file dihapus melalui error handler
/tmpdapat dikonfigurasi sebagai tmpfs (RAM-based) untuk zero disk footprint
5. Fitur Utama
5.1 Web Interface
- Pilih unit: Salatiga atau Cicalengka (menentukan model yang digunakan)
- Upload video rekaman batch (format MP4, AVI, MOV)
- Progress bar yang menampilkan status pemrosesan secara real-time
- Estimasi waktu selesai berdasarkan durasi video
- Tombol download hasil video beranotasi
- Informasi ringkas hasil: total count, durasi video, jumlah batch terdeteksi
5.2 Output Video Beranotasi
- Skeleton pose per ayam dengan color-coded connections
- Bounding box dengan tracking ID per individu ayam
- Counting line dengan counter yang terupdate real-time
- HUD: total count, timestamp, nama unit
- Highlight visual saat talenan terdeteksi (batch closing event)
5.3 Job Queue
- Hanya satu video diproses dalam satu waktu
- User yang upload saat sistem sedang memproses akan mendapat notifikasi posisi antrian
- Estimasi waktu tunggu ditampilkan berdasarkan durasi video dalam antrian
6. Batasan Sistem
- Hanya satu video dapat diproses dalam satu waktu — tidak support concurrent processing
- Ukuran file upload dibatasi (rekomendasi maksimal 500MB atau 5 menit video) untuk menjaga performa
- Tidak ada penyimpanan history — setiap sesi adalah independen, tidak ada log riwayat upload
- Sistem ini berjalan on-demand dan tidak boleh dijalankan bersamaan dengan proses berat lainnya di Jetson
7. Tech Stack
| Layer | Teknologi |
|---|---|
| Backend | Python — Flask atau FastAPI |
| Inference | Ultralytics YOLOv8n-pose / YOLO11n-pose (.pt atau .engine) |
| Video processing | OpenCV (cv2) |
| Frontend | HTML/CSS/JS — minimal, tidak perlu framework berat |
| Real-time progress | Server-Sent Events (SSE) atau WebSocket |
| Temp file management | Python tempfile + atexit cleanup |
| Job queue | Python threading.Queue atau Redis Queue (opsional) |
| Hardware | NVIDIA Jetson Orin Nano (same device as real-time counter) |
8. Pertimbangan Performa
Sistem ini berjalan di hardware yang sama dengan sistem real-time counting. Beberapa pertimbangan penting:
- Detection by Case hanya boleh digunakan saat sistem real-time sedang tidak aktif, atau dengan pembatasan resource yang ketat
- Estimasi waktu render: video 15 menit ≈ 10–20 menit processing di Jetson Orin Nano
- GPU memory harus dibebaskan dari proses lain sebelum menjalankan inference on-demand
- Implementasi dapat ditambahkan flag/lock yang mencegah upload saat real-time counter sedang aktif
9. Tahapan Pengembangan
| Fase | Deliverable |
|---|---|
| Fase 1 — Backend | API upload, inference pipeline, temp file management, download endpoint |
| Fase 2 — Interface | Web UI upload form, progress indicator, download button |
| Fase 3 — Queue | Job queue, antrian notifikasi, estimasi waktu tunggu |
| Fase 4 — Testing | Uji coba dengan rekaman nyata Salatiga dan Cicalengka, validasi output visual |
10. Catatan
- Model yang digunakan harus sesuai per unit — model Salatiga tidak digunakan untuk video Cicalengka dan sebaliknya, karena kondisi lapangan berbeda
- Sistem ini bukan pengganti review manual, melainkan alat bantu visual untuk mempercepat investigasi kasus tertentu
- Perlu didiskusikan apakah sistem ini perlu autentikasi mengingat video rekaman cutting house bersifat internal