點擊查看更多
點擊關閉

訪客計數

--- 次訪問

快速統計

15
專案
1
更新
1
活躍專案
3
已完成

本日名言

"一個分裂的世界,四分五裂得沒人有機會拼湊得起,仍去嘗試的話有甚麼意義呢?"
— 賽蒙·羅傑斯
返回專案列表
暫時停滯 2024年3月 - 2024年4月

端到端區網區控系統

基於 Client-Server 架構的局域網監控系統,透過 Socket 通訊與 OpenCV 技術實現即時影像串流與音訊擷取,適用於宿舍監控與家庭安防場景。

LAN Media Stream Python OpenCV Socket

專案簡介

End-to-End LAN Monitor Application 是一個局域網音視訊監控系統,旨在實現區域網路內的遠端監控功能。專案採用 Client-Server 雙角色架構,允許使用者透過 LAN 連接遠端存取攝影機與麥克風,適用於宿舍監控、家庭安防等場景。系統基於 Socket 通訊與 OpenCV 視訊處理技術,提供即時影像串流與音訊擷取能力。

核心理念

  • 雙角色系統設計:Agent(被監控端)與 Monitor(監控端)職責分離
  • 即時串流傳輸:基於 TCP/IP 的可靠影像與音訊數據傳輸
  • 輕量化實作:使用 Python 標準庫與成熟的開源工具,降低開發與部署成本

我的職責

作為專案的唯一開發者,我負責:

系統架構設計

  • 設計 Agent-Monitor 雙角色架構,實現角色分離與模組化
  • 建立基於 Socket 的 TCP 通訊協議,確保數據傳輸可靠性
  • 實作自定義封包格式:9 位元組標頭(序列號 + 資料類型 + 長度)+ 數據載荷

核心功能實作

  • 視訊擷取與編碼:使用 OpenCV 擷取攝影機畫面,JPEG 壓縮後透過 Socket 傳輸
  • 網路通訊協議:實作 ACK 確認機制、序列號管理(0-65535 循環)、封包分塊傳輸(8192 bytes/chunk)
  • 輸入驗證系統:正則表達式驗證 IPv4 位址、端口範圍檢查(1024-49151)、端口佔用偵測
  • 錯誤處理與日誌:使用 Python logging 模組記錄連接狀態、ACK 遺失、解碼錯誤等異常

測試與除錯

  • 解決 Socket 連接穩定性問題(進行中)
  • 測試 LAN 內不同網段的連接可靠性
  • 優化視訊品質與傳輸延遲

核心功能

1. Agent(被監控端)

  • 視訊擷取:透過 OpenCV VideoCapture 存取本地攝影機
  • 數據編碼:JPEG 壓縮影像幀,降低網路頻寬需求
  • Socket 伺服器:監聽指定端口,接受 Monitor 連接請求
  • ACK 機制:等待接收端確認封包,確保數據完整性
  • 序列號管理:16-bit 序列號循環(0-65535),追蹤封包順序

2. Monitor(監控端)

  • Socket 客戶端:連接至指定 IP 與端口的 Agent
  • 數據接收:解析 9 位元組標頭,重組分塊數據
  • 影像解碼:將 JPEG 字節流解碼為 NumPy 陣列
  • 即時顯示:使用 OpenCV imshow 顯示影像流(計畫中)

3. 輸入驗證與錯誤處理

  • IPv4 正則驗證^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}...$
  • 端口範圍檢查:限制 1024-49151(已註冊端口範圍)
  • 端口佔用偵測:嘗試綁定 localhost 檢查端口是否被佔用
  • 異常處理:ValueError(無效輸入)、OSError(端口佔用)、ConnectionError(連接中斷)

4. 封包格式設計

[2 bytes] 序列號 (Sequence Number)
[5 bytes] 資料類型 (Data Type: 'VIDEO', 'AUDIO', etc.)
[2 bytes] 數據長度 (Payload Length)
[N bytes] 數據載荷 (Payload Data)

使用技術

核心函式庫

  • OpenCV (4.9.0.80):視訊擷取與影像編解碼
  • NumPy (1.21.4):陣列操作與數值計算
  • PyAudio (0.2.14):音訊擷取(整合中)
  • Socket (標準庫):TCP/IP 網路通訊

系統架構

  • Python 3.x:核心開發語言
  • Client-Server 模式:雙向通訊架構
  • 多執行緒設計:視訊/音訊擷取與網路傳輸分離(計畫中)

開發工具

  • Visual Studio:專案管理(.pyproj, .sln)
  • logging:除錯日誌記錄(agent.log, monitor.log)
  • Git:版本控制

專案狀態

當前版本:開發中(pipeline 分支)

  • 核心功能狀態:視訊擷取與 Socket 傳輸已實作
  • 已知問題:Socket 連接穩定性需修復、視訊品質待優化

功能完成度

  • 已完成
    • Agent/Monitor 角色分離架構
    • Socket TCP 通訊協議
    • OpenCV 視訊擷取
    • 自定義封包格式與 ACK 機制
    • 輸入驗證系統
  • 🔄 進行中
    • 音訊擷取整合(PyAudio)
    • Socket 連接穩定性修復
    • 視訊品質優化
  • 📋 計畫中
    • 從終端升級至圖形介面(GUI)
    • 更多自動化功能
    • 連接請求批准機制

開發挑戰與收穫

1. Socket 通訊協議設計

挑戰:如何確保 LAN 內影像數據的可靠傳輸?

解決方案

  • 設計自定義封包格式(標頭 + 載荷)
  • 實作 ACK 確認機制,封包遺失時自動重傳
  • 使用序列號追蹤封包順序,避免亂序問題

收穫

  • 深入理解 TCP/IP 協議原理
  • 學習封包設計的權衡(標頭大小 vs. 可擴展性)
  • 掌握多執行緒同步與異常處理

2. OpenCV 影像編碼優化

挑戰:原始影像幀過大(640x480 RGB 約 900KB),造成網路延遲。

解決方案

  • 使用 JPEG 壓縮(cv2.imencode)將單幀降至 20-50KB
  • 調整幀率(0.1 秒間隔)平衡流暢度與頻寬

待優化

  • 動態調整 JPEG 品質參數
  • 實作 H.264 硬體編碼支援

收穫

  • 理解影像壓縮演算法的權衡
  • 學習網路頻寬管理技巧

3. 端口與 IP 驗證系統

挑戰:使用者可能輸入無效 IP 或已佔用的端口,導致連接失敗。

解決方案

  • 正則表達式嚴格驗證 IPv4 格式
  • 嘗試綁定 localhost 檢查端口可用性
  • 循環提示直到輸入有效

收穫

  • 掌握正則表達式複雜模式
  • 理解 Socket 綁定與端口衝突機制
  • 提升使用者體驗設計意識

4. ACK 機制實作

挑戰:如何確保接收端正確收到每個封包?

解決方案

  • 發送端等待 2 位元組 ACK(包含序列號)
  • 若 ACK 不匹配或超時,重新發送封包
  • 最多重試 3 次,避免無限等待

收穫

  • 理解可靠傳輸協議設計(類似 TCP 的 ACK)
  • 學習超時處理與重試策略

未來規劃

短期目標

  • 修復 Socket 連接穩定性問題
  • 整合 PyAudio 音訊擷取功能
  • 優化視訊品質(動態 JPEG 參數)

中期目標

  • 開發圖形使用者介面(可能使用 Tkinter 或 PyQt)
  • 實作連接請求批准機制(安全性)
  • 支援多 Monitor 同時連接單一 Agent

長期目標

  • 加入運動偵測自動錄影
  • 支援雲端儲存整合(如 Google Drive)
  • 行動裝置 App 開發(跨平台監控)

專案亮點

技術創新

  • ✅ 自定義封包格式與 ACK 機制,確保數據可靠性
  • ✅ Agent/Monitor 角色分離,易於擴展與維護
  • ✅ 輕量化設計,僅依賴少量成熟函式庫

實用價值

  • ✅ 解決宿舍/家庭遠端監控需求
  • ✅ 完全基於 LAN,無需雲端服務,保護隱私
  • ✅ 低成本實作(純軟體方案,無需硬體投資)

學習成果

  • ✅ 深入實作網路程式設計(Socket, TCP/IP)
  • ✅ 掌握影像處理與編碼技術(OpenCV, JPEG)
  • ✅ 理解分散式系統設計(Client-Server 架構)

程式語言:Python 3.x
程式碼規模:約 300-400 行(不含註解)
主要模組Roles/Agent.py (103 行), Roles/Monitor.py, End_to_end_LAN_Monitor_Application.py (78 行)
開發狀態:進行中(pipeline 分支)