VoTT 利用VoTT標圖後產生的.json檔案讓python執行目標自動追蹤
===
[TOC]
## 1.文件版本
```gherkin=
version = v0.0.1
若是目前版本的code與此文件差異過大,請回到以下release程式版本進行閱讀:
NTUT_VoTT_2020_10_13_v0.0.1
```

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

## 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) 內容說明"的三個路徑
最後將處理好的路徑回傳

這邊必須注意,若是source與target不在同一層位置,並且各自下層的名稱不同,則會導致錯誤
```gherkin=
source path ex:
VoTT/Drone_Project/Drone_Source/001
target path ex:
VoTT/Drone_Project/Drone_Target/001
```

## 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
```
以下是各自的初始化程式片段

## 讀取json(尚未完成)
## opencv追蹤器
目前使用的是CSRT測試過最穩定的演算法,若要變更可由下列帶入演算法

追蹤器對應表,在cv_tracker.py內

## 影片不同fps,讀取bounding box處理方法
### (1) 策略圖
目前的策略解說如下圖,即便來源影片與VoTT讀取時設定的fps不相同,也能取得最接近的bbox
下圖是python讀取影片過後得出為29fps,這樣與VoTT設定的fps不相同,但採用取分佈在29張裡對應的14張位置作法(注意取的張數必須從標示後開始算起)即可解決問題

### (2) 簡化程式片段
從簡化過的小程式片段觀察,以下為程式路徑
```gherkin=
VoTT/CVTRK/UBU18/doc_and_testcode/fix_bbox_shift_issue/
python strategy2_test.py
```

擷取出來的間隔區段與對應張數

### (2) 實際程式片段
其實就是照搬簡化程式片段,也是使用迴圈數目符合哪個區段,則取出frame的bounding box

## 寫回json(尚未完成)
### (1) 結構圖
此處為了不影響讀取frame的時間,將寫回json的部份都另開thread處理
### (2) 程式片段
處理資料,準備要開啟thread

thread class

## log位置
若是有正確執行追蹤流程,結束後會在下列位址找到儲存的log
VoTT/CVTRK/UBU18/log/log.txt
###### tags: `study`