Field Log

การแก้ปัญหาภาพกระตุกในระบบ Video Analytics

ภาพกระตุก (frame stutter / lag) เป็นปัญหาที่พบบ่อยในระบบ CCTV วิเคราะห์วิดีโอ บทความนี้รวบรวมสาเหตุหลักและวิธีแก้ที่ใช้ได้จริง

4 MIN READ
20/04/2026
การแก้ปัญหาภาพกระตุกในระบบ Video Analytics

การแก้ปัญหาภาพกระตุกในระบบ Video Analytics

ปัญหาที่พบในการทำ ระบบนับและติดตามยานพาหนะอัตโนมัติจากกล้อง CCTV

1. ปัญหาที่ Buffer เฟรมสะสม

ใช้ FFmpeg pipe แทน OpenCV VideoCapture สำหรับ HLS/RTSP

OpenCV มี internal buffer ที่สะสมเฟรมเก่าทำให้ได้ภาพที่ล่าช้า การใช้ FFmpeg pipe ส่ง raw frame มาตรงๆ และตั้งค่า -fflags nobuffer -flags low_delay ช่วยลด latency ได้มาก

ffmpeg -fflags nobuffer -flags low_delay \ -probesize 32 -analyzeduration 0 \ -i <rtsp_url> -pix_fmt bgr24 -f rawvideo pipe:1

เก็บแค่เฟรมล่าสุด ไม่ใช้ Queue แบบ FIFO

แทนที่จะใส่เฟรมลง Queue ให้ overwrite ตัวแปรเฟรมล่าสุดทุกครั้ง ใช้ Lock ป้องกัน race condition YOLO worker จะดึงเฟรมใหม่สุดเสมอ ไม่ต้องรอระบาย Queue

with latest_locks[cam_id]: latest_frames[cam_id] = frame.copy() frame_events[cam_id].set()

2. ปัญหาที่ YOLO ประมวลผลช้า

ลด imgsz และจำกัด classes

ลดขนาดภาพ input ของ YOLO เช่นจาก 1280 เหลือ 640 หรือ 480 ทำให้ inference เร็วขึ้นอย่างเห็นได้ชัด พร้อมกันนั้นระบุ classes ที่ต้องการเท่านั้น เช่น [0,2,3,5,7] ไม่ต้อง detect ทุก class

model.track(frame, imgsz=640, classes=[0,2,3,5,7])

แยก YOLO worker ต่อกล้อง ไม่ใช้ batch เดียวกัน

การ track หลายกล้องใน model เดียวทำให้ ByteTrack สับสน ID ข้ามกล้อง การแยก thread ต่อกล้องทำให้ track แม่นยำขึ้น แต่ใช้ VRAM มากขึ้นเล็กน้อย

ใช้ model ขนาดเล็กลง เช่น YOLOv8n หรือ YOLOv8s

YOLOv8n (nano) เร็วกว่า YOLOv8m หลายเท่า accuracy ต่างกันเล็กน้อย แต่เพียงพอสำหรับงาน traffic counting ที่ไม่ต้องการ classify วัตถุชิ้นเล็ก


3. ปัญหาที่ Display / OpenCV

จำกัด FPS การแสดงผล

ไม่จำเป็นต้อง render ทุกเฟรมที่ YOLO ประมวลผล การจำกัด display ที่ 25 FPS และ resize ภาพก่อน concat ช่วยลด CPU ที่ใช้ render ได้มาก

frame = cv2.resize(f, (640, 360)) time.sleep(max(0, 1/25 - elapsed))

ปิด debug window ใน production

การเปิด cv2.imshow() สำหรับกล้องหลายตัวพร้อมกันกินทรัพยากร CPU และ GPU ของ display อย่างมาก ใน production ควรตั้ง debug.window: false แล้วดูผ่าน web dashboard แทน


4. ปัญหาที่ Network / กล้อง

ตรวจสอบ bandwidth และ codec ของกล้อง

กล้อง H.265 (HEVC) ใช้ bandwidth น้อยกว่า H.264 แต่ใช้ CPU decode มากกว่า ถ้า CPU ไม่รองรับ hardware decode ให้เปลี่ยนกล้องเป็น H.264 หรือเพิ่ม decode card

ลด FPS และ resolution ที่ตัวกล้อง

สำหรับงาน traffic counting ไม่จำเป็นต้องใช้ 4K หรือ 30fps กล้องที่ตั้งเป็น 1080p/15fps เพียงพอสำหรับการนับ ลดภาระ network และ decode ลงได้ครึ่งหนึ่ง


สรุปแนวทางแก้ไข

เป้าหมายวิธีแนะนำ
ผลกระทบสูงสุดFFmpeg pipe + latest frame only
ทำได้เร็วที่สุดลด imgsz + ปิด debug window
ระยะยาวYOLO nano + ลด FPS กล้อง
Share this log to social network