GeoVideo Evidence Viewer 影像證據檢視器
C++/Qt6 桌面影像事件檢索與空間視覺化工具
以 C++20 與 Qt6 打造的桌面應用,用於檢視監控影片、索引動態事件、設定空間關注區(ROI)並在地圖上視覺化案件。採分層(領域/應用/基礎設施/UI)架構,已具備 SQLite 結構遷移、儲存庫、服務層相依注入與 OpenCV 影片中繼資料擷取;播放、ROI 編輯與動態偵測等管線仍在建置中。
已驗證 Demo 錄影 1
由 portfolio quality pass 從既有專案 demo 素材複製。
媒體總覽
快速瀏覽這個專案的截圖與錄影展示。
專案連結與 Demo 狀態
專案概覽
## 專案概述 GeoVideo Evidence Viewer 是一套以 **C++20 / Qt6** 開發的桌面應用,定位為作品集等級的影像證據檢視工具,適用於智慧城市、校園安防、設施監控、交通科技與安防覆核等情境。它讓使用者在本機檢視監控影片、索引動態相關事件、設定空間關注區(ROI),並在 2D/3D 場域地圖上視覺化案件。 ## 架構設計 專案採乾淨分層架構,將程式碼切為四層:`core/domain`(領域模型,如 Project、Camera、VideoSource、Roi、Event 與共用值物件 EntityId/TimeRange/Severity)、`application/services`(應用服務與 ServiceResult 結果型別)、`infrastructure`(SQLite 連線、SchemaMigrator 與 sqlite 儲存庫)以及 `app`(Qt6 主視窗與各停駐面板 widget)。`AppContext` 作為組合根,統一初始化資料庫並注入儲存庫與服務。 ## 資料與影像層 資料以內嵌 **SQLite** 儲存,`SchemaMigrator` 以 IMMEDIATE 交易執行版本化遷移,建立 projects、cameras、video_sources、rois、events 等資料表,搭配外鍵級聯與多組查詢索引(時間範圍、類型、覆核狀態等)。影像層透過 **OpenCV** 的 VideoCapture 擷取解析度、FPS 與影格數,並對 NaN 與非正值做防禦性轉換。 ## UI 與工程實務 介面以 Qt6 Widgets 打造停駐式工作區,中央為影片檢視,周圍環繞專案總覽、事件詳情、事件時間軸、事件搜尋與 OpenGL 空間視圖,支援巢狀/分頁停駐與版面記憶。建置採 **CMake + Ninja**,啟用 AUTOMOC/AUTORCC/AUTOUIC 與 compile_commands 匯出,並設定跨 Linux/Windows/macOS 目標。 ## 現況 資料層與應用骨架已可執行:新增專案、匯入影片(擷取中繼資料並寫入 SQLite)、版面保存與還原皆已運作;影片播放、ROI 編輯器、動態偵測管線、證據匯出與報告產生則為下一階段目標。
我的角色
獨立開發者(架構設計與全端桌面實作)
問題背景
智慧城市、校園安防與設施監控等場景需要可在本機檢視大量監控影片、標註關注區、檢索與覆核事件並產出案件報告的工具,但多數方案綁雲端、難客製或缺乏空間視覺化。
解決方案
以 Qt6 Widgets 建構停駐式(dock)工作區,中央為影片檢視、四周為專案總覽、事件詳情、時間軸、搜尋與 2D/3D 空間視圖;後端以 SQLite 內嵌資料庫管理專案、攝影機、影片來源、ROI 與事件,透過 SchemaMigrator 做交易式結構遷移,並以 AppContext 統一注入儲存庫與服務,OpenCV 負責影片中繼資料擷取。
目前成果
完成可執行的桌面骨架與資料層:Qt6 UI 殼層、版本化 SQLite schema(projects/cameras/video_sources/rois/events 含索引與外鍵)、SQLite 儲存庫、ProjectService/VideoImportService/EventReviewService 服務層,以及 OpenCV 影片解析與版面狀態保存。
作品亮點
- 乾淨分層架構:domain/application/infrastructure/app 四層分離,領域模型與 Qt UI 解耦
- 版本化 SQLite 結構遷移,採 IMMEDIATE 交易確保建表原子性,含完整外鍵與查詢索引
- 以 AppContext 集中相依注入,串接資料庫、儲存庫與應用服務
- OpenCV VideoCapture 擷取解析度/FPS/影格數,並對 NaN/負值做防禦性處理
- Qt6 停駐式工作區支援巢狀/分頁停駐與版面記憶(QSettings 還原)
- CMake + Ninja 自動掃描原始碼與 AUTOMOC,跨 Linux/Windows/macOS 目標設定
技術挑戰
- 在 C++/Qt 桌面環境中落實領域驅動分層,避免 UI 與資料存取耦合
- 設計可演進的 SQLite schema 與交易式遷移,兼顧外鍵約束與查詢效能
- 以 OpenCV 穩健讀取多格式影片中繼資料並處理無效屬性值
目標使用者
- 作品集審閱者與面試官
- 需要快速理解專案目的、技術棧與成熟度的技術讀者
技術亮點
- 偵測到的主要技術線索:C++20, Qt6, Qt6 Widgets, Qt6 Multimedia, Qt6 OpenGLWidgets, OpenCV, SQLite, CMake, Ninja, clangd
- 已有 README 作為後續補齊案例研究的依據
- 尚未確認公開 GitHub repository,作品集會先標示 GitHub 待補
系統架構
此專案目前由 portfolio catalog pipeline 依 README、Git metadata、package/build 設定與素材線索建立案例頁。正式架構說明仍需依實際 source code 補齊;目前可確認的技術線索包含:C++20, Qt6, Qt6 Widgets, Qt6 Multimedia, Qt6 OpenGLWidgets, OpenCV, SQLite, CMake, Ninja, clangd。
資料流程
目前尚未完成可公開的資料流程說明。若此專案含資料處理、AI pipeline 或後端 API,後續應補上 input、processing、storage、UI/output 的端到端流程。
專案結構
geovideo-env-check/ README.md # project documentation, when available source files # implementation reviewed by local audit package/build config # detected capability signals
安裝與執行
This project does not expose a verified runnable web command yet. Review the README/source tree and add exact install, run, test, and build commands before interview use. No verified build command was detected. Treat the current portfolio page as a case-study placeholder until build steps are reviewed.
後續改進
- 補齊正式 README、截圖與 demo recording
- 補上架構圖、資料流程與關鍵技術決策
- 確認 build/test 狀態並更新 portfolio release report
面試說明重點
- 先說明此專案目前的成熟度與可展示範圍
- 聚焦在可驗證的技術棧、程式結構與已完成部分
- 不要宣稱尚未部署、尚未錄影或尚未測試的能力已完成
後續規劃
- 接上實際影片播放、影格步進與時間軸導覽
- 實作 ROI 編輯器與 OpenCV 動態偵測管線,並寫回事件資料庫
- 完成快照/剪輯匯出與案件報告產生,以及 2D/3D 空間視覺化