---
title: 'NTUT VoTT 專案編譯測試與Release (Windows 10)'
disqus: hackmd
---
[TOC]
## NTUT VoTT 專案編譯測試與Release (Windows 10)
## 1. 專案說明
### 開發說明
此包 source code 是基於在 [microsoft/VoTT](https://github.com/microsoft/VoTT/) 2.2.0版本上開發新功能,下列為新增功能
```
標註後自動追蹤,以減少每幀需重新標註之繁瑣工作
```
### 專案source code架構:
VoTT_NTUT/WIN10/ => VoTT Source Code
CVTRK/WIN10/ => openCV Tracker
### 工具介紹:
工具測試影片如下:
https://youtu.be/wWEyVSttrYE
或參考 **7. 自動追蹤範例**
Auto Track 按鈕輸入值解說

```
若以下在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. 安裝WSL
### 啟動Windows子系統 Linux版
以系統管理員身分開啟 PowerShell 並執行:
```
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```
### 檢查執行 WSL 2 的需求
檢查您的版本及組建號碼,請選取 [Windows 標誌鍵 + R]、輸入 winver,然後選取 [確定]


### 啟用虛擬機器功能
以系統管理員身分開啟 PowerShell 並執行:
```
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```
完成後,請先**重新開機**
### 下載 Linux 核心更新套件
[WSL2 Linux 核心更新套件 (適用於 x64 電腦)](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi)
下載好後**請完成安裝**
### 將 WSL 2 設定為預設版本
以系統管理員身分開啟 PowerShell 並執行:
```
wsl --set-default-version 2
```
### 安裝Linux版本
此部分會開啟 Microsoft Store
:::info
這邊會需要用到微軟帳號,若無帳號請先建立帳號,反之在**取得軟體**時,請登入帳號
:::
[安裝Ubuntu 18.04 LTS](https://www.microsoft.com/store/apps/9N9TNGVNDL3Q)
由於我已安裝,所以取得會變成啟動

取得後請至
開啟Ubuntu
第一次啟動,系統會要求建立username 以及 password

(此圖擷取自:https://docs.microsoft.com/zh-tw/windows/wsl/install-win10)
### 安裝Windows 終端機(推薦)
請至Windwos Store下載Windows終端機

取得後請至
開啟Windows Terminal 
推薦的原因在於,它可以開啟多分頁(Powershell or Ubuntu 18.04)

在開新分頁時,點選箭頭,即可選擇不同系統
**到這邊WSL安裝完成**
### 安裝Ubuntu 相關套件
利用Windows Terminal開啟Ubuntu 18.04
### 安裝指令:
```
$ sudo apt-get update
$ sudo apt-get install git tig vim tmux
```
### tmux 測試,下面為指令
```
$ tmux
水平分割
$ ctrl + b 放開後接著按下 shift + "
切換到切割頁面
$ ctrl + b 放開後按下 上 or 下 選擇分頁割面
垂直分割
$ ctrl + b 放開後接著按下 shift + %
切換到切割頁面
$ ctrl + b 放開後按下 左 or 右 選擇分頁割面
離開
$ exit
```
水平分割

垂直分割

### 產生 SSH key 並交給學長
:::info
當上述都完成後,要先產生ssh key,因為之後的測試,再推commit進遠端需要權限!!
這邊的概念是,遠端的github如何知道 使用者(你) 是否有權限對這個倉庫做修改上傳??
```gherkin=
github的機制是,看看這個github遠端帳號有沒有你這台電腦的key,判斷行為如下:
有:
=> 代表這個github遠端帳號認識你這台電腦,可以讓你做修改上傳
沒有:
=> 代表這個github遠端帳號根本不知道你是誰,所以你無權限做修改上傳
```
:::
### 安裝OPENSSH CLINET
```gherkin=
$ sudo apt-get install ssh
```
### 輸入以下指令產生key
```gherkin=
$ ssh-keygen
一路 enter 到完成 key 的產生
```

### 將public key 交給學長
```gherkin=
首先到 key 的位置 然後使用ls查看
$ cd /home/your_name/
$ cd ~/.ssh
這邊注意路徑~符號是代表你的家目錄,所以等同於/home/帳號名稱/,
注意 linux 的符號路徑,與 windows 區別如下
### linux
路徑符號使用 /
### windows
路徑符號使用 \
$ ls
若要查看有沒有隱藏資料夾使用下列指令
$ ls -a
```

```gherkin=
觀察 id_rsa.pub 裡面的內容
$ cat id_rsa.pub
```

請將 rsa.pub 寄到masteree108@gmail.com(並著名名字)
學長收到後會把這個key加到github遠端,如下圖,
代表遠端的github帳號已經可以認得你這台電腦了,
所以你這台電腦就有修改這個倉庫的權限了!!


### 使用 repo 套件下載 專案程式碼
---
:::info
雖然目前有 vott source 和 python track code 兩包,但之後的 code 可能會越來越多,所以使用 repo 來管理整個專案,才不用每次都使用 git 指令一包一包下載
:::
### 創建資料夾後,使用 repo 下載專案
```gherkin=
首先安裝 repo 套件
$ cd ~
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ./repo
$ chmod +x repo
$ sudo cp repo /usr/bin/repo
之後到 c: 建立專案資料夾
$ cd /mnt/c
$ mkdir VoTT
$ cd VoTT
```
:::warning
這邊請先安裝python
```
$ sudo apt install python-minimal
```
否則repo可能會有問題
:::
```gherkin=
管理倉庫來源下載
```
[VoTT管理專案的倉庫](https://github.com/masteree108/VoTT_NTUT_WIN10_repo/blob/master/default.xml)

```gherkin=
若沒有申請 KEY 在遠端 GITHUB,用 HTTPS 下載:
$ repo init -u https://github.com/masteree108/VoTT_NTUT_WIN10_repo.git -b master
若已經有申請 KEY 在遠端 GITHUB ,請選用 SSH 下載:
$ repo init -u git@github.com:masteree108/VoTT_NTUT_WIN10_repo.git -b master
```
:::warning
若是在下載時有出現
Permissions 0770 for '/home/xxxxx/.ssh/id_rsa' are too open.
可用下列指令修改權限,再重新下載即可
$ chmod 400 ~/.ssh/id_rsa
:::
```gherkin=
現在VoTT的資料夾只有.repo還沒有各別的專案資料夾
$ ls -a 可看到只有.repo資料夾

```
```gherkin=
更新來源(等同於從遠端下載)
$ repo sync
sync 後會看到兩包 source code 資料夾
指定連結到遠端的主分支
$ repo start master --all
```

```gherkin=
關於 repo start master --all 驗證
這是代表本倉庫的分支要連結到遠端的哪個分支.由於目前我這邊沒有設定任何分支,所以以 master 主分支為準
可以使用如下指令觀察
$ cd CVTRK/WIN10
$ git branch -a
可觀察到目前連結到的是 master 分支
```

## 3. VoTT 編譯程式與專案建置範例
請先確認node.js版本以及npm的版本如下圖所示:

### (1) VoTT_NTUT 專案編譯:
- 1.開啟VSCode

- 2.點選左上角 檔案 > 開啟資料夾 並開啟VoTT專案
- 以範例來說:
##### C:\VoTT\VoTT_NTUT\WIN10

- 點選 選擇資料夾
- 3.按下 ctrl + `(注音符號ㄅ旁邊的符號) 即可自動開啟cmd

- 4. 輸入
```
npm ci (安裝所需之package)
npm start (啟動VoTT)
```


若編譯成功會自動開啟 vott介面
瀏覽器上的目前沒使用可以直接關掉
從log中可以注意到 NTUT VoTT 版本

本組使用本地端開發,如下圖

### (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

### (3) VoTT 影片專案
#### 建立專案資料夾
請至C: 建立三個資料夾
```
1. Drone_Source/ //用來放置來源影片,需要時只需放一支影片否則會影響vott開啟的速度
2. Drone_Source_all/ //存放所有影片,有需要再移到 Drone_Source 資料夾
3. Drone_Target/ //用來放置專案的.vott檔案
```
請先下載影片 [影片位置](https://drive.google.com/drive/folders/1VCM0J8mkNEFt3fMp-v-T0JeXdgNTbjeX)
例如:下載 Drone_007.mp4,請放入 Drone_Source/Drone_007
#### 建立專案
首先,請至Drone_Target 資料夾
建立資料
(請取名為Drone_XXX)
例如:要標的影片為Drone_007.mp4,資料夾則取名為Drone_007
再來利用VSCode開啟VoTT專案並啟動
(若忘記可以查看上方 ***3. VoTT 編譯程式與專案建置範例*** 的部分)
VoTT啟動後,請點選New Project

* 專案名稱:NTUT_Drone

* Security Token: 選擇 "**(2) security token:**" 所建立的設定,
下拉即可找到 **NTUTDrone Token** 選項

* Source Connection
選擇右邊的Add Connection會進入Connection Settings畫面

按照下圖配置

Provider 選擇 Local File System
Local File System 選擇剛剛建立的 "**Drone_Source**"資料夾
按下Save Connection回到 Project Settings
* Target Connection
選擇右邊的Add Connection會進入Connection Settings畫面
按照下圖配置
輸入Display Name: Drone_007 (_00X請依據影片名稱創立)
Provider 選擇 Local File System
Local File System 選擇剛剛建立的 "**Drone_Target**" 資料夾
按下Save Connection回到 Project Settings
*此為範例圖: 實際狀況請依照要標註之影片為主*

*此為範例圖: 實際狀況請依照要標註之影片為主*
Target Connection選擇剛剛設定的資料夾

* Video Settings 請輸入5,下圖為整個專案設定,按下 Save Project 按鈕完成新建專案設定
*此為範例圖: 實際狀況請依照要標註之影片為主*

* 完成後會看到的專案畫面
*此為範例圖: 實際狀況請依照要標註之影片為主*

## 4. CVTRK 之 vott_tracker.exe 建立
#### 製作 vott_tracker.exe
- 1. 請先開啟 VSCode
下載 git bash
```
輸入: git bash
選擇下圖並安裝
```

按下CTRL + ` 開啟terminal
以下為切換 terminal 的方法
點選 Git Bash

並使用Bash移動至 CVTRK資料夾位置
```
$ cd /c/VoTT/CVTRK/WIN10/
```
- 2. 輸入 ./build_exe.sh

執行完後資料夾出現 vott_tracker.exe

- 3. 跑完後 檢查是否有將 vott_tracker.exe 複製到相對應的資料夾
請移動至 VoTT 資料夾位置
有兩種方法可檢查:
1. 直接使用檔案總管 移動到C:\VoTT\VoTT_NTUT\WIN10\NTUT\exe 查看是否有vott_tracker.exe 若有則代表製作成功
2. 利用bash
```
$ cd C:/VoTT/VoTT_NTUT/WIN10/NTUT/exe
```

```
$ ls 查看是否有vott_tracker.exe 若有則代表製作成功
```

若上述完成後即可使用 自動追蹤功能
## 5. 自動追蹤範例
#### 開啟 VoTT 工具 使用標注工具
使用 VSCode 開啟 VoTT 專案
```
按下 Ctrl + `
輸入npm start 即可啟動
(啟動VoTT方式 如同 3. VoTT 編譯程式與專案建置範例說明)
```
開啟專案後執行追蹤


新增tag

並使用下圖工具 標住在要追蹤的人物上

:::info
請注意: 標記的人物 請一定要加上id_XXX再加上動作
若是第一位標記的人物 id tag為 id_001
以此類推
動作tag 則看人物動作來做選擇/新增
:::

#### 使用追蹤工具
下圖輸入2,代表追蹤2秒(最多追 9 個 frame),
若不是再該秒第 1 幀 追蹤,如在 第0:09秒第 2 幀開始追蹤,
那只會自動追 7 個 frame
以下由 第0:00秒 第 1 幀,初始設定之FPS開始追蹤

會跳出追蹤視窗

追蹤完成提示

此時按下 D 按鍵,可看到後面的 9幀 已經追蹤完畢

A 按鍵為 到上 1 幀
#### 追蹤 log 檢查:
若是有追蹤失敗或想知道追蹤程式的log可參閱每次追蹤的log檔案
注意此log會依序將最新的資訊往下貼上
##### 可至VoTT專案中 NTUT/log/log.txt 點開觀看

## 6. 開發常用模式(關閉自動追蹤功能)
:::info
由於開發過程不希望每次每次修改 code 都需要製作出 vott_tracker.exe會耗費太多時間,所以這邊採用指令的方式進行操作
:::
一樣利用VSCode 開啟VoTT專案
**找到下圖中 紅線標示之檔案 main.ts**

將const runTrackerSwitch = true改為 = false;

改好後 按下Ctrl + S 儲存檔案
:::info
只要有修改過檔案
可利用WSL Linux 18.04 進入到專案資料夾中
使用tig觀察修改紀錄
首先輸入tig

Unstaged Changes則為這次修改的結果
按下d 進入可看到這次修改那些地方
紅色為原本的
綠色為修改過

:::
#### 開啟 vott 並標注人物
```
一樣VSCode開啟 VoTT專案並啟動VoTT
```
:::info
注意按下 auto track 按鈕後並不會自動執行 vott_tracker.exe

但會保留如下檔案
以下檔案會產生在Drone_Target資料夾中
:::
```
vott_source_info.json
vott_target_path.json
```

這兩個檔案是要帶入 vott_tracker.exe 使用的資訊
若是自動執行 vott_tracker.exe 追蹤成功後就會自動刪除這兩個檔案
因此在上一個段落中
**將const runTrackerSwitch = true改為 = false;**
就是不讓vott_tracker.exe去執行
以免刪除這兩個檔案
#### vott_tracker.py 測試指令
- 1.首先 使用VSCode開啟CVTRK專案
- 2.開啟後 按下Ctrl+`
- 3.輸入下方指令
```gherkin=
$ python vott_tracker.py ../../../Drone_Target/vott_source_info.tmp ../../../Drone_Target/vott_target_path.json
v0.04之後的版本請用
$ python vott_tracker.py ../../../Drone_Target/vott_source_info.json ../../../Drone_Target/vott_target_path.json
```
### 測試 vott與 CVTRK相關程式
請參考[此文章 ](https://hackmd.io/@NTUTVOTT/HkDpdiE8D) 下載程式碼
vott_tracker.py測試指令
```gherkin=
```

- 4.按下Enter

可以看到 vott_tracker.exe自動執行
並在最後將兩個json檔都刪除
## 7. Release 流程(尚未完成,等下次實際 release 再詳細編輯)
#### CVTRK部分
修改 vott_tracker.exe 版本號碼
從 v0.0.3 => 改成 v0.0.4

製作 vott_tracker.exe
- 1. 請先開啟 VSCode
下載shell

```
點選左側倒數第三個icon
輸入: shell
安裝第一個項目
```
按下CTRL + ` 開啟terminal
以下為切換terminal的方法
點選 "選取預設殼層"

上方會出現選擇terminal的選項

請選擇"Git bash"
並使用Bash移動至 CVTRK資料夾位置
以範例來說:
##### C:\VoTT\CVTRK\WIN10

- 2. 輸入 ./build_exe.sh

- 3. 跑完後請使用檔案總管 開啟VoTT專案中的NTUT/exe資料夾

- 4. 將最新版的 vott_tracker.exe 壓縮成.zip 推至[雲端](https://drive.google.com/drive/u/0/folders/1ekddsLwGHdLfagIRX4hBn2iNh8eQmLPr)
- 5. 修改 release_note
請先使用WSL Linux 18.04移動至CVTRK/WIN10資料夾
輸入以下指令
$ 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) WSL Linux18.04 移動至.repo/manifests/NTUT_version 修改版本號碼


製作 NTUT_version.exe
```
修改版本號
$ vim NTUT_version.py
```

```
執行下列程式會自動將 NTUT_version.exe 放入 /VoTT_NTUT/WIN10/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/ 修改版本號碼
**請利用WSL Linux18.04移動至VoTT_NTUT/WIN10**
上傳至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
```
## 8. 重點整理
___
### 版本控管的部分
使用 WSL Linux 18.04
在 Windows上使用repo,請使用WSL ↓

### 執行CVTRK的部分
請使用Conda,因為python的版本跟package的版本上比較好控管
(以下為教學)
https://hackmd.io/@NTUTVOTT/SJbese-Iv
[Anaconda下載](https://www.anaconda.com/products/individual#windows)

增加環境變數至系統
選取環境變數


[環境變數參考網站](https://ithelp.ithome.com.tw/articles/10218384)
VSCODE 安裝 python 相關套件

VSCODE 安裝 terminal 相關套件

開啟 VSCODE 的 terminal 並選擇 cmd
ctrl + ~

建立一個python 3.7環境
```gherkin=
$ conda create -n py37 python=3.7
```
切換至剛剛建立的環境
```gherkin=
$ conda activate py37
```
可看到指令列最旁邊多出py37
VS_CODE:

安裝相關套件
```gherkin=
$ pip install shortuuid
$ pip install pyinstaller
$ pip install numpy
$ pip install opencv-python==4.0.0.21
$ pip install opencv-contrib-python==4.0.0.21
$ conda install pyqt
```
[可至此查詢opencv版本](https://pypi.org/project/opencv-python/#history/)
若要移除opencv更新版本可參考如下指令
```gherkin=
pip uninstall -y opencv-contrib-python
pip uninstall -y opencv-python
```
vott_tracker.py測試指令
:::info
請先確定在C:/Drone_Target 資料夾裡有以下檔案:
1. vott_source_info.json
2. vott_target_path.json
:::
```gherkin=
python vott_tracker.py ../../../Drone_Target/vott_source_info.tmp ../../../Drone_Target/vott_target_path.json
v0.04之後的版本請用
$ python vott_tracker.py ../../../Drone_Target/vott_source_info.json ../../../Drone_Target/vott_target_path.json
```
###### tags: `setup`, `VoTT`