অধ্যায়Phase 4 · ভিডিও ও রিয়েল-টাইম সিস্টেম
4.1 16 মিনিট পড়া

Video Processing Pipeline

Frame-by-frame architecture।

🎬 গল্প দিয়ে শুরু
Video আসলে কিছুই না — প্রতি সেকেন্ডে ৩০টি ছবি, পরপর। তাই video processing মানেই frame-by-frame image processing। কিন্তু সঠিক pipeline architecture না থাকলে ৩০ FPS-এর video ৫ FPS-এ চলে।

Standard Pipeline

text
[ Capture ] → [ Pre-process ] → [ Analyze ] → [ Post-process ] → [ Output ]
  webcam       resize/cvtColor    model/CV     draw/annotate    display/save
  RTSP                                                            stream

প্রতিটি stage-এ frame একটি object — সাধারণত NumPy array।

Minimum viable pipeline

python
pipeline.py
import cv2, time

cap = cv2.VideoCapture("street.mp4")
W   = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
H   = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
writer = cv2.VideoWriter("out.mp4",
            cv2.VideoWriter_fourcc(*"mp4v"), fps, (W, H))

while True:
    ok, frame = cap.read()
    if not ok: break

    # 1. pre
    small = cv2.resize(frame, (640, 360))
    gray  = cv2.cvtColor(small, cv2.COLOR_BGR2GRAY)

    # 2. analyze
    edges = cv2.Canny(gray, 80, 180)

    # 3. post
    edges_bgr = cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR)
    out = cv2.addWeighted(small, 0.7, edges_bgr, 0.3, 0)
    out = cv2.resize(out, (W, H))

    # 4. output
    writer.write(out)
    cv2.imshow("pipeline", out)
    if cv2.waitKey(1) == 27: break

cap.release(); writer.release(); cv2.destroyAllWindows()

Codec ও Format

CodecExtensionকখন
mp4vmp4সাধারণ, browser-compatible
XVIDaviLocal debugging
MJPGaviHigh-bandwidth, lossless-feel
H264mp4Best compression (ffmpeg backend)

Frame metadata

python
print("FPS:    ", cap.get(cv2.CAP_PROP_FPS))
print("Frames: ", cap.get(cv2.CAP_PROP_FRAME_COUNT))
print("Width:  ", cap.get(cv2.CAP_PROP_FRAME_WIDTH))
print("Height: ", cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# Specific frame-এ jump
cap.set(cv2.CAP_PROP_POS_FRAMES, 300)
প্র্যাকটিস টাস্ক
  1. একটি video থেকে প্রতি ১০তম frame extract করে images/ folder-এ save করুন।
  2. Video-র মাঝখান থেকে শুরু করে শেষ পর্যন্ত শুধু grayscale version save করুন।
  3. input ও output পাশাপাশি (side-by-side) একটি বড় frame বানিয়ে write করুন।

সারসংক্ষেপ

  • Video = sequence of frames; processing = per-frame image op।
  • Standard pipeline: capture → pre → analyze → post → output।
  • Codec, fps, size set না করলে output corrupt হয়।
  • Pre-process-এ resize দিয়েই বড় speed gain।