--- title: '輔助比對 VoTT json檔案並整合追蹤物ID工具(Windows 10)' disqus: hackmd --- 輔助比對 VoTT json檔案並整合追蹤物ID工具(Windows 10) === [TOC] ## 版本資訊 文件版本:v0.0.1 進度: 完成 執行環境: window10(ubuntu 20.04 測試OK ) ## 一、 文件說明 ### 工具介紹 介紹 **輔助比對 VoTT json檔案並整合追蹤物ID工具** 安裝與使用方式。此工具可以用在輔助修正不同使用者標註影片但追蹤物ID標註個不同的情況。若在無此工具下進行修正只能在VoTT內一幀一幀內手動修正ID,如下圖1解說,會造成過多的人力耗損,並且在無人機的視角下,過小的人物標註在辨別上也有一定難度,無疑是增加標註修正者的負擔。 若不使用此工具使用者必須在影片交界處手動修正ID **圖1** ![](https://i.imgur.com/hpKoRAV.png) ## 二、 資料前處理與比對方式架構說明 ### (1) 資料前處理與比對方式架構圖 如下圖2,在圖像前處理方面由於在無人機視角下人物過小,若直接進行比較會因為特徵點較少而導致匹配效果不佳,另外在工具顯示畫面需要人工再次檢測如下圖3,此時若直接調整圖片大小勢必會比較模糊,如下圖4,所以圖片必須先經過 super resolution 與 detail ehance 方式進行前處理。另外match方式請參考 (2)比對方式驗證與結果 **圖2 架構圖** ![](https://i.imgur.com/FjbcTRJ.png) **圖3 此工具的人物檢測畫面** ![](https://i.imgur.com/0vO0UFL.jpg) **圖4 若直接放大圖片會較為模糊** ![](https://i.imgur.com/dxKHkXZ.png) ### (2) 比對方式驗證與結果 補充 (1) 資料前處理與比對方式 採用緣由 以下說明使用5個人物進行比較(id_001~id_005),如下圖5 **圖5 比較人物資訊** ![](https://i.imgur.com/YgKDLpL.png) **表1 實驗結果** 因此採用項目4 ![](https://i.imgur.com/iv2uqIF.png) ## 三、 程式架構說明 此工具採用圖形化介面所以需要使用 python 的 Tkinter 套件,另外在處理人物match 、json檔案處理與系統動作順序(excel檔案)皆有自己的class進行處理 ``` 1. main.py: 管理calss:tool_display 與 class:feature_match_process 2. tool_display.py: 負責顯示畫面與按鈕事件處理 使用queue 與 shared memory 來進行與 feature_match_process 的 process 間的通訊 3. feature_match_process.py: 使用 queue 與 shared memory 來進行與 feature_match_process 的 process 間的通訊 管理 class:operate_vott_id_json 處理json資料的讀寫 (可參考下圖6) 管理 class:cv_sift_match 進行畫面的人物擷取、圖像前處理與ID比對修正 管理 class:system_file 來儲存此工具所需之系統資訊與儲存結果在excel檔案 (可參考下圖6) 以上 class 都會使用class:log.py 進行log儲存,並會將所有log彙集置result/log.txt 以上描述可參考圖7 程式架構圖 ``` **圖6 feature_match_process 使用 class:operate_vott_id_jso讀取所有json檔案(只讀timestamp與asset-id)後,會將資料整理成處理資訊並使用 class:system_file 存成excel,這樣系統只需依照excel的順序進行所需的josn資料匯入即可** ![](https://i.imgur.com/fPZrrrf.png) **圖7 程式架構圖** ![](https://i.imgur.com/XAyKyKd.png) ## 四、 執行環境安裝及設定 由於使用 python 來撰寫程式,必須安裝 anaconda 若是對於 anaconda 安裝不熟悉可參考[此篇文章](https://hackmd.io/@NTUTVOTT/SJMXCwn0P) 以下包含所有的必要套件,先照下列步驟安裝設定 #### (1)螢幕解析度 螢幕解析度設定成1920*1080 變更文字、應用程式與其他項目的大小設定為100% (此設定不更改可能會造成tool顯示錯誤) ![](https://i.imgur.com/qRukXKD.png) #### (2)創建 python 環境 ```gherkin= conda create -n opencv4.5 python=3.8 ``` #### (3)切換至 opencv4.5 套件環境 ```gherkin= conda activate opencv4.5 ``` ![](https://i.imgur.com/TCszR6s.png) #### (4)安裝必要套件 關於 opencv版本,若要查詢目前的版本有哪些可使用以下方式 退出 conda 環境 ```gherkin= conda deactivate ``` 查詢 opencv 版本 ```gherkin= pip install opencv-python== ``` ![](https://i.imgur.com/bW99jzp.png) 切回 opencv4.5 環境並安裝如下套件 ```gherkin= conda activate opencv4.5 pip install opencv-python==4.5.1.48 pip install opencv-contrib-python==4.5.1.48 pip install jupyterlab pip install matplotlib pip install sklearn pip install scikit-image pip install imutils pip install tk pip install shortuuid (x)pip install pandas pip install SharedArray (x)pip install psutil pip install easygui pip install platform ``` ## 五、 執行步驟 #### (1)選擇要修正的影片JSON 選擇當下想要修正Id的JSON檔案,按下按鈕後選擇所想要的路徑 ![](https://i.imgur.com/4gcmFEJ.png) :::warning 如下圖,在開啟資料夾頁面會看不到檔案,請先自行知道來源資料夾的位置 ::: ![](https://i.imgur.com/PPnwkmE.png) #### (2)按下執行修正來RUN自動修正 按下執行修正並等待一段時間後,等待結果視窗出來。 ![](https://i.imgur.com/B4CNAq1.png) #### (3)雙重確認自動修正的效果 跳出視窗後可以看到TOOL自動比對相同人物並配上對應的Id,這時候需確認是否為相同人物: 相同人物:維持同樣Id 不相同人物:自行給予新Id或是配對到上禎該對應的人物 ![](https://i.imgur.com/2xKslEO.png) #### (4)確認是否有相同Id 當Id出現相同時需要修正為新的Id或是配對到上一禎該對應的人物。 ![](https://i.imgur.com/lRujt5x.png) #### (5)人數不同時候需確認原因 當下一禎出現人物比上一禎多時候需回Vott 或是產生影片來確認此人物在上一禎是否有漏框的情形,如有漏框請在Vott中補上boundbox。 ![](https://i.imgur.com/tgP5qrJ.png) #### (6)確認完成 按下確認完成並依此類推完成更多時間的Id修正 ![](https://i.imgur.com/EShHzpm.png) ## 六、 示範影片 {%youtube 11RW4ov7CC8 %} ## 七、 參考資料 [tkinter 建立視窗讀圖(選擇檔案)](https://home.gamer.com.tw/creationDetail.php?sn=4877710) https://www.itread01.com/content/1546262471.html https://blog.csdn.net/joson1234567890/article/details/78639014 https://blog.csdn.net/fjdmy001/article/details/78498150 [tkinter.messagebox --- Tkinter 消息提示](https://docs.python.org/zh-tw/3/library/tkinter.messagebox.html) [更改 Tkinter 標籤字型大小](https://www.delftstack.com/zh-tw/howto/python-tkinter/how-to-change-the-tkinter-label-font-size/) [How to change Tkinter Button Font?](https://pythonexamples.org/python-tkinter-button-change-font/) [Creating and Deleting Directories with Python](https://stackabuse.com/creating-and-deleting-directories-with-python/) [OpenCV-Python cv2.imdecode()和cv2.imencode() 图片解码和编码](https://blog.csdn.net/dcrmg/article/details/79155233) [python把两个图片合成一张图](https://blog.csdn.net/qq_42393859/article/details/108464416) [Multiprocessing Serialization in Python with Pickle](https://medium.com/@jwnx/multiprocessing-serialization-in-python-with-pickle-9844f6fa1812) [10x Faster Parallel Python Without Python Multiprocessing](https://towardsdatascience.com/10x-faster-parallel-python-without-python-multiprocessing-e5017c93cce1) [imencode()+imdecode()使用](https://www.twblogs.net/a/5d02fc67bd9eee487be9761b) [Send and receive images using Flask, Numpy and OpenCV](https://gist.github.com/kylehounslow/767fb72fde2ebdd010a0bf4242371594) [easy GUI](https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/366840/) http://yhhuang1966.blogspot.com/2018/10/python-gui-tkinter.html [How to Create an Entry Box using Tkinter](https://datatofish.com/entry-box-tkinter/) [Tkinter 教程 - 佈局管理](https://www.delftstack.com/zh-tw/tutorial/tkinter-tutorial/tkinter-geometry-managers/) [multiprocessing.shared_memory --- 可从进程直接访问的共享内存](https://docs.python.org/zh-tw/3/library/multiprocessing.shared_memory.html) [如何設定 Tkinter Entry 文字輸入控制元件的預設文字](https://www.delftstack.com/zh-tw/howto/python-tkinter/how-to-set-default-text-of-tkinter-entry-widget/) [如何隱藏、恢復和刪除 Tkinter 控制元件](https://www.delftstack.com/zh-tw/howto/python-tkinter/how-to-hide-recover-and-delete-tkinter-widgets/) [如何刪除 Tkinter 文字框的內容](https://www.delftstack.com/zh-tw/howto/python-tkinter/how-to-clear-tkinter-text-box-widget/) [设置tkinter窗口的全屏属性](https://www.pynote.net/archives/1254) ###### tags: `tool`