# 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 `/tmp` menggunakan Python `tempfile` module dengan auto-delete - File output: disimpan di `/tmp` selama proses render berlangsung - Setelah download selesai: file dihapus otomatis melalui cleanup callback - Jika proses gagal atau timeout: file dihapus melalui error handler - `/tmp` dapat 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