---
# System prepended metadata

title: 輔助比對 VoTT json檔案並整合追蹤物ID工具(Windows 10)
tags: [tool]

---

---
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`
