---
# System prepended metadata

title: NTUT VoTT 專案編譯測試與Release (ubuntu 18.04)
tags: [VoTT, setup]

---

---
title: 'NTUT VoTT 專案編譯測試與Release (ubuntu 18.04)'
disqus: hackmd
---

[TOC]
## NTUT VoTT 專案編譯測試與Release (ubuntu 18.04)

## 1. 專案說明

### 開發說明
此包 source code 是基於在 [microsoft/VoTT](https://github.com/microsoft/VoTT/) 2.2.0版本上開發新功能,下列為新增功能
```
標註後自動追蹤，以減少每幀需重新標註之繁瑣工作
```
### 專案 source code 架構:
VoTT_NTUT/UBU18/   =>  VoTT source code
CVTRK/UBU18/       =>  openCV tracker

### 工具介紹:

工具測試影片如下（使用win10影片解說,其功能與 ubuntu 動作相同）：
https://youtu.be/wWEyVSttrYE

或參考 **7. 自動追蹤範例**


auto track 按鈕輸入數值解說
![](https://i.imgur.com/vtjVgej.png)

```
若以下在VoTT專案設定frameRate=5
(1) 輸入0可追1幀
ex:
在第3幀時按下auto track即會自動將第4幀追完

(2) 輸入0以上的數字可追相對應幀數
ex:
若是輸入1在第3幀時按下auto track即會自動將第4、5幀追完
若是輸入2在第3幀時按下auto track即會自動將第4、5幀和下一秒的1~5幀追完
```

## 2. 相關開發工具下載
請先參考下列文件安裝相關工具

[Python環境架設(ubuntu 18.04)](https://hackmd.io/@NTUTVOTT/SJMXCwn0P) => 章節 vott 與 CVTRK相關程式 不需執行
[VoTT 安裝流程與建立專案(Ubuntu 18.04)](https://hackmd.io/@NTUTVOTT/rymTpoVUD) => 只需要執行 2. 安裝相關套件

下載 repo 工具（管理整包專案使用）
```
$ cd /tmp
$ curl https://storage.googleapis.com/git-repo-downloads/repo > repo
$ sudo chmod +x repo
$ cp reop /usr/bin
```
下載 git 工具 
```
$ sudo apt-get install
$ git config --global user.email "you@example.com" 
$ git config --global user.name "Your Name" 
```

下載 tig 工具 
```
$ sudo apt-get tig
```

## 3. 申請 masteree108 github source code 管理與修改權限
```
$ cd ~/
$ sudo apt update
$ sudo apt install openssh-server
$ ssh-keygen -t rsa
$ cd .ssh
```
一路 enter 產生ssh key
![](https://i.imgur.com/VnFi3Sb.png)

請將 rsa.pub 寄到masteree108@gmail.com（並著名名字）,id_rsa 自行保留
![](https://i.imgur.com/He4dgaC.png)


## 4. 專案 source code 下載
:::info
！！注意！！若是您電腦的SSH public key已經交由masteree108帳號
去開通權限則使用SSH下載，反之請用HTTPS下載
:::

    
```gherkin=
$ cd ~/
$ mkdir -p NTUT_VoTT_pj/source
$ cd NTUT_VoTT_pj/source
若沒有申請KEY在遠端GITHUB,用HTTPS下載:
    $ repo init -u https://github.com/masteree108/VoTT_NTUT_UBU18_repo.git -b master

若已經有申請KEY在遠端GITHUB,請選用SSH下載:
    $ repo init -u git@github.com:masteree108/VoTT_NTUT_UBU18_repo.git -b master
```

```gherkin=
若是下載成功,資料夾內會出現.repo檔案
$ ll
```
![](https://i.imgur.com/bDsdWPU.png)



```gherkin=
### 從遠端更新來源(第一次使用等同於下載）
$ repo sync
下載成功後以目前的版本會有如下資料夾(若有新功能請更新此處）
```
![](https://i.imgur.com/AmnJhvz.png)


```gherkin=
### 對每個資料夾指定遠端分支,以master為主
$ repo start master --all
```
    
* 若是以後要從遠端更新專案,只需要下$ repo sync指令即可全部資料夾更新
  若是要單獨更新個別資料夾可以使用下列兩種方式,進入目標資料夾後（內有.git的資料夾）
  $ repo sync . 
  或是 
  $ git pull --rebase


## 5. VoTT 編譯程式 與 專案建制範例 
### (1) VoTT_NTUT 專案編譯:
```
編譯
$ cd ~/NTUT_VoTT_pj/source/VoTT_NTUT/UBU18
$ npm ci
$ npm start
```
若編譯成功會自動開啟 vott介面
瀏覽器上的目前沒使用可以直接關掉
log 可看到 NTUT VoTT 版本
![](https://i.imgur.com/w2GQdbx.png)


本組使用本地端開發,如下圖
![](https://i.imgur.com/ru2YSf1.png)

### (2) security token:

> 引述官方文件如下

#### NOTE: Project files can be shared among multiple people. In order to share sensitive project settings, all parties must

為了讓專案讓LAB的同學共同使用, security token 使用先前研究留下來的key
```gherkin=
Name : NTUTDrone Token
Key : qITjd1Rj6hFqC7uB0OGxPKYVxIFSdcMrprQAMS5rEhc=
```

點選左下角的齒輪,輸入之前的 security token
    ![](https://i.imgur.com/aSEvMqN.png)

### (3) VoTT 影片專案
建立專案資料夾
```
$ cd NTUT_VoTT
$ mkdir Drone_Source/ //用來放置來源影片,需要時只需放一支影片否則會影響vott開啟的速度
$ mkdir Drone_Source_all/ //存放所有影片,有需要再移到 Drone_Source 資料夾
$ mkdir Drone_Target/ //用來放置專案的.vott檔案*
```

請先下載影片 [影片位置](https://drive.google.com/drive/folders/1VCM0J8mkNEFt3fMp-v-T0JeXdgNTbjeX)
例如下載 Drone_007.mp4,請放入 Drone_Source/資料夾

建立專案
```
$ cd Drone_Target
$ mkdir Drone_007
$ cd ../
$ cd source/VoTT_NTUT/UBU18
$ npm start
```
按下 New Project
![](https://i.imgur.com/huEByt1.png)
* 專案名稱：NTUT_Drone
![](https://i.imgur.com/SjAUMTo.png)

* Security Token: 選擇 "**4. 關於 security token**" 所建立的設定,
  下拉即可找到 **NTUTDrone Token** 選項
  ![](https://i.imgur.com/oDF61qV.png)

* Source Connection
  選擇右邊的Add Connection會進入Connection Settings畫面
  ![](https://i.imgur.com/1l3C9hj.png)

  按照下圖配置 
  ![](https://i.imgur.com/NTorrKl.png)

  Provider 選擇 Local File System
  Local File System 選擇剛剛在 "**（1）建立一個專案資料夾**" 建立的source資料夾 Drone_Source/
  按下Save Connection回到 Project Settings
  
 * Source Connection* 選擇剛剛建立的
  ![](https://i.imgur.com/4y64sYw.png)
  
 * Target Connection
  選擇右邊的Add Connection會進入Connection Settings畫面
  按照下圖配置
  輸入Display Name: Drone_007 (_00X請依據影片名稱創立)
  Provider 選擇 Local File System
  Local File System 選擇剛剛在 "**（1）建立一個專案資料夾**" 建立的target資料夾 Drone_Target/Drone_007
  按下Save Connection回到 Project Settings

   ![](https://i.imgur.com/UULlnWu.png)

  
   Target Connection選擇剛剛設定的資料夾
 
   ![](https://i.imgur.com/zejIQu6.png)

 
* Video Settings 請輸入5,下圖為整個專案設定,按下 Save Project 按鈕完成新建專案設定

    ![](https://i.imgur.com/aq5LNZi.png)


* 完成後會看到的專案畫面
![](https://i.imgur.com/q0kk6cW.jpg)



## 6. CVTRK 之 vott_tracker.exe 建立

```
製作 vott_tracker.exe
$ cd ~/NTUT_VoTT_pj/source/CVTRK/UBU18
轉換到 ## 2. 相關開發工具下載 建立 的python 環境 
$ conda activate tracker
執行 build_exe.sh 會產生 vott_tracker.exe 並且自動複製到~/NTUT_VoTT_pj/source/VoTT_NTUT/UBU18/NTUT/exe
$ ./build_exe.sh
```

檢查是否有將 vott_tracker.exe 複製到相對應的資料夾
```
$ cd ~/NTUT_VoTT_pj/source/VoTT_NTUT/UBU18/NTUT/exe
$ ll
```

若上述完成後即可使用 自動追蹤功能

## 7. 自動追蹤範例
#### 開啟 VoTT 工具 使用標注工具 
```
$ cd ~/NTUT_VoTT_pj/source/VoTT_NTUT/UBU18
$ npm start
```

開啟專案後執行追蹤,範例為追蹤兩人
![](https://i.imgur.com/nM8Yb41.png)

![](https://i.imgur.com/b41J0km.png)





新增下列tag
![](https://i.imgur.com/2eBvGxP.png)
並使用下圖工具 標住在要追蹤的人物上
![](https://i.imgur.com/C24awPG.png)

id_001, walk
![](https://i.imgur.com/sBpGGOQ.png)
id_002, basketball
![](https://i.imgur.com/cejgsew.png)

![](https://i.imgur.com/oVpWYWC.png)



#### 使用追蹤工具
下圖輸入2,代表追蹤2秒（最多追 9 個 frame）,
若不是再該秒第 1 幀 追蹤，如在 第0:09秒第 2 幀開始追蹤,
那只會自動追 7 個 frame


以下由 第0:09秒 第 1 幀開始追蹤
![](https://i.imgur.com/swh2MBi.png)
會跳出追蹤視窗
![](https://i.imgur.com/xIQV49f.jpg)


追蹤完成提示
![](https://i.imgur.com/rOAGHz0.png)

此時按下 D 按鍵,可看到後面的 9幀 已經追蹤完畢 
![](https://i.imgur.com/1xeKxx3.png)
A 按鍵為 到上 1 幀

進入專案資料夾,可明確看到手動標注1幀 + 追蹤了9幀 
```
$ cd ~/NTUT_VoTT_pj/Drone_Target/Drone_007/
$ ll
```
![](https://i.imgur.com/UTf9tTe.png)

#### 追蹤 log 檢查:
若是有追蹤失敗或想知道追蹤程式的log可參閱每次追蹤的log檔案
注意此log會依序將最新的資訊往下貼上 
```
$ cd ~/NTUT_VoTT_pj/source/VoTT_NTUT/UBU18/NTUT/log
$ cat log.txt
```


## 8. 開發常用模式(關閉自動追蹤功能)

:::info 
由於開發過程不希望每次修改 code 都需要製作出 vott_tracker.exe會耗費太多時間,所以這邊採用指令的方式進行操作
:::

#### 首先先將 vott自動執行 tracking 的功能 disable
```
$ cd ~/NTUT_VoTT_pj/source/VoTT_NTUT/UBU18/src/electron
$ vim main.ts
修改如下
const runTrackerSwitch = false;

指令 tig 也可以看到修改
$ tig
```
![](https://i.imgur.com/sRLz7iX.png)
按下enter, 再按下d
![](https://i.imgur.com/qsm9rhl.png)


#### 開啟 vott 並標注人物 

```
$ cd ~/NTUT_VoTT_pj/source/VoTT_NTUT/UBU18
$ npm start
```
注意按下 auto track 按鈕後並不會自動執行 vott_tracker.exe
![](https://i.imgur.com/tNCmqHL.png)
但會產生如下檔案
```
$ ~/NTUT_VoTT_pj/Drone_Target
$ ll
可看到檔案
vott_source_info.json
vott_target_path.json
```

可觀察這兩個檔案,這是要帶入 vott_tracker.exe 使用的資訊
,若是自動執行 vott_tracker.exe 追蹤成後後才會刪除這兩個檔案 


#### vott_tracker.py 測試指令
執行下方指令並將將上述檔案位置帶入
```gherkin=
$ cd ~/NTUT_VoTT_pj/source/CVTRK/UBU18/

切換環境
$ conda activate tracker

$ python3 vott_tracker.py ../../../Drone_Target/vott_source_info.tmp ../../../Drone_Target/vott_target_path.json
v0.04之後的版本請用
$ python3 vott_tracker.py ../../../Drone_Target/vott_source_info.json ../../../Drone_Target/vott_target_path.json
```

## 9. Release 流程（尚未完成,等下次實際 release 再詳細編輯）
下列修改架設為 v0.0.3 => v0.0.4
#### CVTRK
修改  vott_tracker.exe 版本號碼
```
$ cd ~/NTUT_VoTT_pj/source/CVTRK/UBU18
$ vim vott_tracker.py 
逢10進位
-    pym.PY_LOG(False, 'D', py_name, 'vott_tracker.exe version: v0.0.3')
+    pym.PY_LOG(False, 'D', py_name, 'vott_tracker.exe version: v0.0.4')
```

製作 vott_tracker.exe

```
$ cd ~/NTUT_VoTT_pj/source/CVTRK/UBU18
轉換到 ## 2. 相關開發工具下載 建立 的python 環境 
$ conda activate tracker
執行 build_exe.sh 會產生 vott_tracker.exe 並且自動複製到~/NTUT_VoTT_pj/source/VoTT_NTUT/UBU18/NTUT/exe
$ ./build_exe.sh
```
將最新版的 vott_tracker.exe 壓縮成.zip 推至[雲端](https://drive.google.com/drive/u/0/folders/1ekddsLwGHdLfagIRX4hBn2iNh8eQmLPr)
```
$ cd ~/NTUT_VoTT_pj/source/VoTT_NTUT/UBU18/NTUT/exe
壓縮 vott_tracker.exe
```

修改 release_note
```
$ git status
$ git add release_note
$ git commit
$ git push

增加版本號標籤 
$ git tag v0.0.4

若要刪除tag
$ git tag -d v0.0.4

推送 tag 至遠端 
$ git push --tags
```


#### VoTT_NTUT
**一、　修改版本號**
(1) .repo/manifests/NTUT_version 修改版本號碼
製作 NTUT_version.exe
```
$ cd ~/NTUT_VoTT_pj/source/.repo/manifests/NTUT_version
$ vim NTUT_version.py
修改版本號
$ conda activate tracker
執行下列程式會自動將 NTUT_version.exe 放入 ~/NTUT_VoTT_pj/source/VoTT_NTUT/UBU18/NTUT/exe
$ ./build_exe.sh
```

上傳至github
```
$ git add NTUT_version.py
$ git add NTUT_version.exe
$ git commit
    (NTUT)(NTUT_version) update NTUT_version.exe for vott v0.0.3 to v0.0.4

    execute below command,it will be created NTUT_version.exe and copied it to
    VoTT/UBU18/NTUT/exe/ automatically
    $./build_exe.sh

    make sure VoTT_NTUT/UBU18/NTUT/exe/ has NTUT_version.exe

    Dependence: 
    .repo/manifests
     VoTT_NTUT/UBU18
     
$ git push
```

(2) VoTT_NTUT/ 修改版本號碼

上傳至github
```
$ git add NTUT/exe/NTUT_version.exe
$ git commit

    (NTUT)(NTUT_version) update NTUT_version v0.0.3 to v0.0.4

    Dependence:
     .repo\manifests commit:'(NTUT)(NTUT_version) update NTUT_version.exe form vott v0.0.3 to v0.0.4'
     VoTT_NTUT\UBU18
```
**二、　release 修改**

上傳至github
```
$ git status
$ git add release_note
$ git commit
$ git push

增加版本號標籤 
$ git tag v0.0.4

若要刪除tag
$ git tag -d v0.0.4

推送 tag 至遠端 
$ git push --tags
```
## 10. 匯出 VoTT
若第 **9. Release 流程** 完成後 
請參 [考此份文件](https://hackmd.io/@NTUTVOTT/BkhHcHUhD) 做出 vott.exe
此項目為做出 vott.exe

是用方法請參考[ 此份文件](https://hackmd.io/@NTUTVOTT/r1TcVOvhv)

###### tags: `setup`, `VoTT`