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

Webcam Handling

VideoCapture API।

🎬 গল্প দিয়ে শুরু
Webcam — সবচেয়ে সহজ live video source। কিন্তু সঠিক handling না জানলে ২ FPS-এ চলে, ছবি delayed হয়, crash করে। এই অধ্যায়ে professional-grade webcam handling।

Basic Capture

python
import cv2

cap = cv2.VideoCapture(0)             # 0 = default cam
if not cap.isOpened():
    raise RuntimeError("Webcam খুলছে না")

while True:
    ok, frame = cap.read()
    if not ok: break
    cv2.imshow("cam", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'): break

cap.release(); cv2.destroyAllWindows()
Index trial
USB webcam plug করলে 0 কাজ না করলে 1, 2 ট্রাই করুন। Mac-এ permission popup অবশ্যই allow করুন।

Backend ও Resolution Set

python
import cv2

# Windows-এ DSHOW দ্রুত open হয়
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
# Linux: cv2.CAP_V4L2; Mac: cv2.CAP_AVFOUNDATION

cap.set(cv2.CAP_PROP_FRAME_WIDTH,  1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
cap.set(cv2.CAP_PROP_FPS,          30)
cap.set(cv2.CAP_PROP_BUFFERSIZE,   1)   # লেটেন্সি কমায়

IP Camera / RTSP / Phone

python
# IP webcam (Android app)
cap = cv2.VideoCapture("http://192.168.0.105:8080/video")

# RTSP CCTV
cap = cv2.VideoCapture("rtsp://user:pass@192.168.1.50:554/stream1")

# Video file
cap = cv2.VideoCapture("clip.mp4")

Camera properties tuning

python
# Exposure, gain, brightness
cap.set(cv2.CAP_PROP_AUTO_EXPOSURE, 0.25)   # manual
cap.set(cv2.CAP_PROP_EXPOSURE,      -6)
cap.set(cv2.CAP_PROP_BRIGHTNESS,    128)
cap.set(cv2.CAP_PROP_CONTRAST,      128)
Driver-dependent
সব camera সব property support করে না। Set করে get করে দেখে নিন আদৌ apply হলো কিনা।

Selfie-style mirror flip

python
frame = cv2.flip(frame, 1)   # natural mirror

Robust webcam wrapper

python
cam.py
import cv2, time

class Cam:
    def __init__(self, src=0, w=1280, h=720):
        self.cap = cv2.VideoCapture(src)
        self.cap.set(cv2.CAP_PROP_FRAME_WIDTH,  w)
        self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, h)
        self.cap.set(cv2.CAP_PROP_BUFFERSIZE,   1)
        time.sleep(1.0)                  # warm-up
        if not self.cap.isOpened():
            raise RuntimeError("Camera open failed")

    def read(self):
        for _ in range(3):
            ok, f = self.cap.read()
            if ok: return f
        return None

    def close(self):
        self.cap.release()
প্র্যাকটিস টাস্ক
  1. নিজের webcam-এ resolution 1280×720, FPS 30 set করে আসলেই হচ্ছে কিনা verify করুন।
  2. Android-এ IP Webcam app install করে phone-কে wireless camera বানান।
  3. Cam wrapper class extend করে snapshot() method যোগ করুন যা JPEG save করে।

সারসংক্ষেপ

  • VideoCapture-এ সঠিক backend ও buffer size = কম latency।
  • Property set করার পর get করে verify করুন।
  • RTSP/IP cam URL syntax-ই প্রধান চ্যালেঞ্জ।
  • Production-এ wrapper class রাখলে retry, logging সহজ।