---
# System prepended metadata

title: NCHC Hackthon WTMH
tags: [2023 NCHC Hackathon]

---

# NCHC Hackathon WTMH
## WTMH GUI
A ECG detection system using CNN
## 前置作業
- docker [載點](https://www.docker.com/products/docker-desktop/)
- Xming [載點](https://sourceforge.net/projects/vcxsrv/)
- github (給帳號名協作)
##  專案方向
- CuPy RAPIDS CuSignal CWT [參考 code](https://docs.cupy.dev/en/latest/reference/generated/cupyx.scipy.signal.cwt.html) 負責人: 朱俊憲，組員：陳政瑋
- ONNX to TensorRT example (前面兩行而已，後面是一些做測試的code）[參考 code](https://github.com/WarrenTseng/monai_endoscopy_tutorial/blob/main/TensorRT/Convert_to_TensorRT.ipynb) 負責人：謝侑良
- Pytorch Wavelet [參考 code](https://pytorch-wavelets.readthedocs.io/en/latest/readme.html) 負責人：李振楊，組員：卓子平、黃伊靜
## docker 使用
下載安裝 docker 和 Xming

確定有在 docker desktop 中開啟  WSL 
![image](https://hackmd.io/_uploads/HyFNiyrEa.png)
如果沒有，便在 powershell 打上
```
wsl --install
```
並重開機


如果有 ，開啟 powershell$\downarrow$

![image](https://hackmd.io/_uploads/SJoqH0N46.png)

在 Powershell 鍵入$\downarrow$，以下載 docker image
```
docker pull chokevin417/wtmh_gui
```
等待下載完成$\downarrow$

![image](https://hackmd.io/_uploads/HyzL3RENa.png)

在 docker GUI 中會出現 chokevin417/wtmh_gui  的 image$\downarrow$

![image](https://hackmd.io/_uploads/BJpzpC4Vp.png)

在 power shell 鍵入$\downarrow$
```
ipconfig
```
查詢 ip 位置$\downarrow$
![image](https://hackmd.io/_uploads/S1yApR4Ea.png)

我的是 172.20.128.1 ，所以在 powershell 鍵入$\downarrow$
```
set-variable -name DISPLAY -value 172.20.128.1:0.0
#(這是註解不要複製) 上面是要讓 docker 的顯示裝置能連到 Xmin 所以把 Display 這個參數指定為 docker 的 IP 
docker run -e DISPLAY=$DISPLAY --gpus all -t -d -i chokevin417/wtmh_gui
#(這是註解不要複製) 上面是要建造 docker  container  基於 chokevin417/wtmh_gui　這個 image 且顯示的 IP 是 我們剛剛設好的，而且能動用所有GPU  
```

建造成功後，在 docker GUI 中能看到多出了 container

![image](https://hackmd.io/_uploads/rkcMnySEp.png)

在 running 的狀態下，按下 CLI 就可以進入環境進行操作了 
![image](https://hackmd.io/_uploads/SyLW6krVp.png)
環境使用 linux語法操作 ([語法參考](https://blog.ossii.com.tw/?p=2241))

我們使用 ls 便可以看到環境中已有 1001.txt 這個測試檔案
![image](https://hackmd.io/_uploads/rJOKFHLVp.png)

結束使用後，可以使用按 STOP  終止環境 (關機)，下次進入可以用 START (開機)
![image](https://hackmd.io/_uploads/Sy9zRyHEp.png)

## SOURCE CODE
首先要設定 ssh key 以跟 github 連結，參考教學文[連結]

```
ssh-keygen
#(這是註解) 生成 SSH key
cat /root/.ssh/id_rsa.pub
#(這是註解) 顯示 SSH key
```
(https://zhuanlan.zhihu.com/p/454666519) 
複製 SSH key 到 Github 中
![image](https://hackmd.io/_uploads/ryfnoHINT.png)
```
git clone git@github.com:mn12you/wtmh_GUI
#(這是註解) 從 github 複製 source code
```
![image](https://hackmd.io/_uploads/ryJ6nrIEa.png)
以下方的程式碼將測試資料放入鍋做資料夾中，並進入工作資料夾
```
cp 1001.txt wtmh_GUI/
cd wtmh_GUI
```
再次 ls 便可看見 souce code ![image](https://hackmd.io/_uploads/BJdvTBIVa.png)
共 11 份檔案
- 1001.txt 測試資料包含 3小時的心電圖資料。
- CWT112.py 連續小波轉換的操作程式，包含怎麼切資料，怎麼做前處理(normalized)還有最後將資料轉換成 112*112 的形式。
- GUI.py 實際的專案檔，讓使用者參錯如何放資料並顯示結果。
- README.md 專案介紹 markdown 形式
- model112.pth 訓練好的模型權重檔 (pytorch)
- tfa_morlet_112m.py 實際計算連續小波轉換的程式，CWT112.py 會呼叫他
- CNN.py 模型架構
- Dockerfile.txt 建構 docker image 的 source code
- GUI_test.py m3 GUI 所使用的程式相同，但沒有圖形介面輸出，並會將 segmentation，CWT 和 CNN 的運算時間顯示於終端機裡
- docker_run_windows.txt 讓 docker 跑起來的 source code
- requirements.txt 除了 default python   packages 外還需要下載的 package 

可以嘗試在終端機上執行 GUI.py 和 GUI_test.py 執行結果如下
```
python GUI_test.py 
```
![image](https://hackmd.io/_uploads/rkiLG8IN6.png)

```
python GUI.py
```
![image](https://hackmd.io/_uploads/Sk_bQ8IV6.png)

## 專案目的
為了加速整體速度，我們從兩個方面著手，模型推論及連續小波轉換。
大家先著手修改 GUI_test.py。
請 CuPY 組和 Pytorch Wavelet 組專注在 CWT112.py中。
onnx 組 則是在 CNN 中。
請大家執行 GUI_test.py 並比較改動前後的時間。

## 在 docker 環境中使用 IDE 開發
可以參考教學文[連結](https://medium.com/%E5%A4%BE%E7%B8%AB%E4%B8%AD%E6%B1%82%E7%94%9F%E5%AD%98%E7%9A%84%E4%BA%BA%E9%A1%9E/%E4%BD%BF%E7%94%A8visual-studio-code-%E9%81%A0%E7%AB%AF%E6%93%8D%E4%BD%9Cdocker%E7%92%B0%E5%A2%83%E4%B8%8B%E7%9A%84%E6%AA%94%E6%A1%88-ebb35292a5b1)
開啟 VS code，點選 docker 
![image](https://hackmd.io/_uploads/BJPlDLLET.png)
點選想要開啟的檔案上面的 open 按鈕，便可開始編輯檔案
![image](https://hackmd.io/_uploads/B1PIPULNa.png)
對著所屬 container 按右鍵，點選 attaach shell
![image](https://hackmd.io/_uploads/rkJhw8UEa.png)
便可進入 container 的終端操控或執行程式
![image](https://hackmd.io/_uploads/ryQb_I8VT.png)














