關於 #
IFCS(Integrated Fish Counting System), 整合魚類計數系統,是將建立魚道監控自動計數系統所需的一切相關工具整合至一起而開發的圖像化操作介面(GUI)。只需要建立好資料來源,就可以使用 IFCS 從零建立起監控計數系統。
特色 #
- 圖像化操作介面
- 影片標記
- 素材管理系統
- 魚類個體追蹤記數
- 自動化部署
需求 #
硬體需求 #
- NVIDIA 或 AMD 顯存 8GB 以上的獨立顯卡。(AMD 顯卡只支援 Linux 作業系統)。
- AMD 或 INTEL 8 核心以上 CPU
- 記憶體 16 GB 以上
作業系統 #
- Window 10 以上
- Linux
安裝 #
Windows #
- 從此處下載執行檔: https://codeberg.org/even311379/IFCS/releases
- 來自源代碼編譯
- 下載 premake https://premake.github.io/download/ 將其設置在環境路徑內。
- 執行以下命令:
git clone https://codeberg.org/even311379/IFCS.git --recursive ./gen_win_project.bat
- 使用 visual studio 開啟並編譯 。
Linux #
只提供源代碼編譯 。
git clone https://codeberg.org/even311379/IFCS.git --recursive
./build.sh
Python 運行環境設定 #
IFCS 的 AI 運算使用 yolo v9,因此必需要設置好其運行環境。建議使用 virtualenv
及 pip
安裝所有相依套件。不需使用 conda
。
手動設定 #
-
安裝 GPU 版本的 pytorch https://pytorch.org/get-started/locally/ 依作業系統及顯卡版本選擇,如 windows 及 nvidia 顯卡:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
-
安裝 yolo v7 與剩餘套件 。
git clone https://github.com/wongkinyiu/yolov9.git cd yolov9 pip install -r requirements.txt
前往https://github.com/WongKinYiu/yolov9/releases/tag/v0.1 ,下載以下檔案至 yolov9 目錄下:
- gelan-c.pt
- gelan-e.pt
- yolov9-c.pt
- yolov9-e.pt
-
在 IFCS 設定頁面中,將 virtualenv 的 python 位置及 yolo v9 的位置填入。
自動設定 #
在 IFCS 設定頁面點選自動設定即完成。相關檔案會位在:
- windows: APPDATA/IFCS
- linux: ~/.config/IFCS
建立專案 #
第一次打開 IFCS 時會引導建立第一個專案,此後每次打開時會自動開啟最近的專案。 第一開啟新專案時,設定面版也會同時打開,你可以按需求調整。之後隨時可在最上方 Project -> Setting 再次打開。 在你所指定的專案目錄,會產生此專案所有的檔案。 進階使用者可以直接打開並編輯里面的 yaml 檔案。你所有在 IFCS 底下添加的數據都會存在其中。 建立專案時,也會進行 git 初始化。你可以接著使用 git 來進行此專案的版本控制 。
工作流程 #
IFCS 將需要的工作流程分成以下四個階段,點選即可進入不同的工作區。
資料準備 #
產生訓練時需要的全部標記,除了圖片以外,可以直接用影片進行標記,步驟如下:
放入影像/圖片 #
-
將影像/圖片放入專案中相對應的目錄 (可點擊資料瀏覽器下方
開啟專案目錄
)- PROJECT/Clips
- PROJECT/Images
-
支援的格式如下:
- 影片:
mp4
,mov
,wmv
,avi
,flv
,mkv
- 圖片:
jpg
,jpeg
,png
- 影片:
放入後,資料瀏覽器中會自動顯示出檔案
新增類別 #
畫面右側為類別管理,在下方輸入新類別名稱再點下新增即可。 可點兩下名稱來修改。
選擇影片/圖片 #
點選左側任一影片/圖片,會在中央的區域顯示出來。可以使用右鍵移動,滾輪縮放畫面。 若是影片,可撥放、移動到任一幀、調整影片的起始與結束幀。 另有以下快捷鍵可快速切換影片位置:
- 撥放/暫停 (A)
- 往後移動 N 幀 (S)
- 往前移動 N 幀 (D)
進行標記 #
分成兩種模式進行標記,可隨時切換:
- 新增(W)
- 點選右側的類別,接著新增的類別就會是此類別。
- 在畫面中左鍵拖放,即可新增上一步所指定的類別。
- 編輯(E)
- 調整大小: 左鍵拖放個別標四個角落的點點即可調整大小。
- 位移: 左鍵拖放個別標中央的點點來移動位置。
- 改變類別: 點選個別標記左上方的下拉式選單,選擇要改變成哪個類別。
- 移除此標記: 點選個別標記右上方的 X 刪除這個標記
期餘按鍵功能如下:
- 重設畫面位置與縮放
- 跳至上一個已有標記的畫面(Q)
- 跳至下一個已有標記的畫面(R)
- 撤銷(Control + z) 返回上一步
- 重做(Control + x) 回到下一步
訓練模型 #
以下需要一定的機器學習、yolo 模型的相關背景知識,才能理解參數該如何設置。相關背景知識介紹並不在此使用手冊所含蓋的範圍。
產生訓練集 #
將已完成的標記打包成可以放入 yolo 模型訓練的型式。過程包含選擇哪些標記、類別要輸出、類別合併、資料分割、調整大小等。
開始訓練 #
選擇要使用的訓練集,模型,與設定好相關的參數後,會顯示預計在後台執行的指定,按下開始訓練即會在後台開始執行,可在後台查看運行狀況。
- 此處僅是將 yolo v9 提供的訓練指令,轉換成圖像化操作介面,所有參數皆為 yolo v9 所提供,在此不做介紹。
- 可直接複制預計執行的指令,自己開啟控制台運行。完全可以不需要 IFCS。
- 可使用 TensorBoard 檢查模型訓練的成效。
偵測 #
產生偵測結果 #
選擇模型、影片、設定相關參數後,按下 偵測
,即在後台開始執行。
- 此處僅是將 yolo v9 提供的偵測指令,轉換成圖像化操作介面,所有參數皆為 yolo v9 所提供,在此不做介紹。
分析 #
檢查實際使用偵測後的結果是否能達到預期。
-
畫面中
可設定 ROI 進一步的鎖定要監控的範圍。
- 信賴閾值: 進一步將閾值低於此的結果移除。
-
通過數
設定魚道方向、起始點後,按下
更新個體追蹤
,即可查看此影片的通過數分析結果。不同的計數參數會導至結果差異很大,需要根據需求調整,可調整的參數包含:- 信賴閾值: 進一步將閾值低於此的結果移除。
- 最大速度閾值: 如果某一個體的速度超過此閾值,則將其移除。
- 緩充幀閾值: 如果某一進入魚道的個體,在未通過前,超過 N 幀不在繼續被偵測到,即將此個體視為雜訊而排除。
- 其它類別: 同一個體可能在不同幀中被判斷成不同類別。此時後先將在此所設的
其它
類別排除,在依出現最多次的類別當作此個體的類別。
~~~~~
請提供更好的捷圖
~~~
下方可以同時查看個體數據與產生示範影片。
~~~~~
請提供更好的捷圖
~~~
部署 #
產生自動定時執行偵測與計數的 python 程式。設置完並按下產生運行程式後,會在輸出目錄生成相關檔案,點選該目錄底下的 Run.bat
或 Run.sh
(linux),就會按照設置定時執行。也可以在之後直接修改輸出目錄底下的 IFCS_DeployConfig.yaml
來修改設置。
輸入與輸出 #
輸入路徑為一包含多個子目錄的目錄,每個子目錄的名稱會被示為鏡頭名稱,而每個鏡頭目錄底下應包含多個錄影檔案,每個檔案為名稱需為此固定格式: %Y%m%d%H%M__%Y%m%d%H%M.mp4
。如:202104221130__202104221230.mp4。分別代表此影片的起始時間。如果您的監控影片有在 youtube 上串流直播,可以使用 IFCS 程式底下額外準備的 python 程式(位在 IFCS_FOLDER/Scripts/youtube_backup
)直接存成與部署程式所要求的格式。
輸出路徑為生成的自動運行程式所位在的位置。
任務設置 #
自動任務包含每小時進行 N 次偵測與每小時取 X 分鐘進行通過計數,可設定現在立刻針對指定的日期執行,或是每日定期對前一日的影片執行。每一顆鏡頭再填入模型與計數的設置完成。可將 偵測
工作區中調試出的最佳的參數群填入。
感謝 #
此專案使用了以下的開源專案
- ImGui
- OpenGL
- OpenCV
- YoloV9
- Pytorch
- Spdlog
- yamlcpp
- premake
授權 #
https://codeberg.org/even311379/IFCS MIT 開源專案