📝 實戰經驗

螢幕使用行為監控系統

Screen Monitor — Agent-Server 分離架構,人工監看 + VLM 自動判讀雙方案

📋 專案概述

Screen Monitor 是一套企業級螢幕使用行為監控系統,採用 Agent-Server 分離架構,支援人工監看VLM 視覺模型自動判讀雙方案,偵測違規行為後自動鎖屏警告。

系統由被控端(Agent)和監測端(Server)兩部分組成。被控端負責螢幕錄製、串流推送和本地鎖屏;監測端負責 WebUI 直播介面、VLM 排程分析和狀態管理。

🎯 核心功能

📹

實時螢幕錄製

被控端持續錄製螢幕並本地歸檔,使用 mss 高性能截圖 + OpenCV 編碼

📡

WebSocket 直播

低延遲視訊串流,支持多人同時監控,10 FPS 實時推送

🤖

VLM 自動判讀

每 5 分鐘自動截圖送 AI 模型分析,違規信心度 ≥ 0.6 自動鎖屏

👁️

人工監控

WebUI 直播介面,監控員可手動鎖屏/解鎖

🔒

智能鎖屏

全螢幕鎖屏蓋板,顯示違規原因,支持管理員密碼解鎖

🔔

系統匣告知

常駐系統匣顯示監控狀態與規則,確保告知式監控

⚙️

Windows 服務化

開機自啟、防移除、故障自動重啟(Tamper Protection)

💾

離線緩衝

網絡斷開時本地緩衝事件,重連後自動回放

🏗️ 技術架構

🖥️ 監測端 (Server)

  • • FastAPI + Uvicorn(REST API + WebSocket)
  • • VLM 排程器(5 分鐘輪詢)
  • • LM Studio(RTX 5090)qwen2-vl-7b
  • • 狀態管理器(集中式)

💻 被控端 (Agent)

  • • mss + OpenCV(螢幕截圖/錄影)
  • • WebSocket 自動重連
  • • Tkinter 鎖屏蓋板
  • • pystray 系統匣
  • • pywin32 Windows 服務
PythonFastAPIWebSocketVLMOpenCVasyncioWindows ServicepystrayLM StudioJinja2websocketspywin32

🔥 技術難點與解決方案

WebSocket 自動重連與離線緩衝

網絡不穩定時,使用指數退避重連算法(1s → 2s → 4s → ... → 30s 上限)。離線期間異常事件寫入本地 JSON 緩衝,重連成功後批量回放,確保事件不丟失。

VLM 排程與置信度閾值

使用 run_in_executor 將同步 VLM 調用放入線程池,避免阻塞事件循環。設置置信度閾值(默認 0.6)控制誤報,支持管理員暫停/恢復自動判讀。

雙向鎖屏狀態同步

兩個獨立鎖源:Server 控制的違規鎖和連線狀態鎖。狀態優先級:連線鎖 > 違規鎖 > 無鎖。本地密碼解鎖後通過事件同步給 Server。

跨線程與異步協作

錄影線程、網絡異步循環、Tkinter GUI 線程間通信用 asyncio.run_coroutine_threadsafe 調度。GIL 保護全局變量跨線程安全。

Windows 服務化與防移除

使用 pywin32 安裝為 LocalSystem 服務,普通用戶無權停止/移除。設置 sc failure 故障恢復策略(60 秒後自動重啟),單例 Mutex 防多重實例。

雙端分離打包部署

PowerShell 打包腳本生成兩個部署包,各端只含所需代碼和依賴。配置從 UTF-8 範本複製,避免編碼問題,內附部署說明。

📊 項目統計

~6,300
總代碼行數
8 個
核心模塊
11 個
API 端點
50+
配置參數
20+
依賴庫
~50 MB
部署包大小

🔒 安全與合規

告知式常駐:系統匣顯示監控進行中狀態
完整審計:所有操作、錄影、截圖皆有 LOG 與舉證歸檔
資產擁有者部署:設計給企業/家長/設備所有權人部署於自有設備
不提供隱蔽安裝、不規避使用者察覺

🚀 應用場景

🏢

企業員工監控

監控敏感行為(訪問違規網站、數據洩露等)

👨‍👩‍👧

家長監護

監控未成年人螢幕使用,防止瀏覽不當內容

📚

公共場所監控

圖書館、考試中心等場景自動檢測作弊

📋

內容審核

人工審核與 AI 自動判讀結合,提高效率