VoTT 利用VoTT標圖後產生的.json檔案讓python執行目標自動追蹤
===
[TOC]
## 1.文件版本
```gherkin=
version = v0.0.1
若是目前版本的code與此文件差異過大,請回到以下release程式版本進行閱讀:
NTUT_VoTT_2020_10_13_v0.0.1
```
![](https://i.imgur.com/SsKnUq7.png)
```gherkin=
注意若本地端程式有改請先使用git stash存下來
$ git reset --hard d78f7b001dcc174287c2fe5d0a73d036735ccf0c
還原程式,直接從遠端sync
$ git pull --rebase
或
$ repo sync .
若是有數個專案資料夾都有修改,直接到專案上層
$ repo sync
```
## 2.架構圖
```gherkin=
依據架構圖,可分為兩大區塊
(1) 使用者使用VoTT標示工具後
VoTT會產生***-asset.json 和 for_python_path.log
(2) 手動執行python vott_tracker.py
會追蹤目標1秒,並將追蹤後的資訊寫回VoTT存放josn位置
```
![](https://i.imgur.com/SQsLVW7.png)
## 3. vott 產生 for_python_path.log 讓python使用
### (1) 利用log 抓取所需路徑
以下為內容範例,其做用是讀取影片相關路徑
file:VoTT/Drone_Project/Drone_Source/001/Drone_001.mp4#t=163.2,83bd1e1009a806d8e4f71e4c14db4604-asset.json
最後會取得下面三個路徑
```gherkin=
video_path: 讓python載入影片並使用opencv的tracker進行追蹤
ex: VoTT/Drone_Project/Drone_Source/001/Drone_001.mp4
target_path: python產生的json檔案存回的路徑
ex: VoTT/Drone_Project/Drone_Target/001/
json_file_path: 利用讀取VoTT產生的json檔案內容,來獲取位置、影片時間等相關資訊
ex: VoTT/Drone_Project/Drone_Target/001/83bd1e1009a806d8e4f71e4c14db4604-asset.json
```
### (2) 讀取程式片段
注意以下的target_path(for_python_path.log path)必須固定在此位置
當執行python vott_tracker.py後
會到read_file_name_path(target_path) 函式去獲得"(1) 內容說明"的三個路徑
最後將處理好的路徑回傳
![](https://i.imgur.com/R1X2p1m.png)
這邊必須注意,若是source與target不在同一層位置,並且各自下層的名稱不同,則會導致錯誤
```gherkin=
source path ex:
VoTT/Drone_Project/Drone_Source/001
target path ex:
VoTT/Drone_Project/Drone_Target/001
```
![](https://i.imgur.com/aBlDANO.png)
## 4. python 架構(尚未完成)
vott_tracker.py 一共使用4個class如下
```gherkin=
read_vott_id_json as RVIJ : 讀取json檔案使用
write_vott_id_json as WVIJ : 寫入新的json檔案使用
cv_tracker as CVTR : OpenCV 追蹤器的使用與影片處理
log as PYM : 顯示並儲存log
```
以下是各自的初始化程式片段
![](https://i.imgur.com/gjCp42y.png)
## 讀取json(尚未完成)
## opencv追蹤器
目前使用的是CSRT測試過最穩定的演算法,若要變更可由下列帶入演算法
![](https://i.imgur.com/om2FSNq.png)
追蹤器對應表,在cv_tracker.py內
![](https://i.imgur.com/jT2MLpN.png)
## 影片不同fps,讀取bounding box處理方法
### (1) 策略圖
目前的策略解說如下圖,即便來源影片與VoTT讀取時設定的fps不相同,也能取得最接近的bbox
下圖是python讀取影片過後得出為29fps,這樣與VoTT設定的fps不相同,但採用取分佈在29張裡對應的14張位置作法(注意取的張數必須從標示後開始算起)即可解決問題
![](https://i.imgur.com/dSmiaw2.png)
### (2) 簡化程式片段
從簡化過的小程式片段觀察,以下為程式路徑
```gherkin=
VoTT/CVTRK/UBU18/doc_and_testcode/fix_bbox_shift_issue/
python strategy2_test.py
```
![](https://i.imgur.com/uDDMrs8.png)
擷取出來的間隔區段與對應張數
![](https://i.imgur.com/mkx25IC.png)
### (2) 實際程式片段
其實就是照搬簡化程式片段,也是使用迴圈數目符合哪個區段,則取出frame的bounding box
![](https://i.imgur.com/7dYxZy8.png)
## 寫回json(尚未完成)
### (1) 結構圖
此處為了不影響讀取frame的時間,將寫回json的部份都另開thread處理
### (2) 程式片段
處理資料,準備要開啟thread
![](https://i.imgur.com/YUSBQnw.png)
thread class
![](https://i.imgur.com/Vn2pFpE.png)
## log位置
若是有正確執行追蹤流程,結束後會在下列位址找到儲存的log
VoTT/CVTRK/UBU18/log/log.txt
###### tags: `study`