# labelImg 的祈佑小教室
* **目錄**
[**零. 建立Python環境**](https://hackmd.io/@zxcasd89525/Syw8BypDi#%E9%9B%B6-%E5%BB%BA%E7%AB%8BPython%E7%92%B0%E5%A2%83)
[**一. 安裝labelImg**](https://hackmd.io/@zxcasd89525/Syw8BypDi#%E4%B8%80-%E5%AE%89%E8%A3%9DlabelImg)
[**二. 啟動labelImg**](https://hackmd.io/@zxcasd89525/Syw8BypDi#%E4%BA%8C-%E5%95%9F%E5%8B%95labelImg)
[**三. 使用labelImg標記YOLO格式label**](https://hackmd.io/@zxcasd89525/Syw8BypDi#%E4%B8%89-%E4%BD%BF%E7%94%A8labelImg%E6%A8%99%E8%A8%98YOLO%E6%A0%BC%E5%BC%8Flabel)
[**四. 其他功能**](https://hackmd.io/@zxcasd89525/Syw8BypDi#%E5%9B%9B%E5%85%B6%E4%BB%96%E5%8A%9F%E8%83%BD)
#
## 零. 建立Python環境
**待完成,先自己想辦法,Python版本請低於3.10(比如說3.9.10),3.10會有未知錯誤。**
#
## 一. 安裝labelImg
1. **開啟終端機**
於window的搜尋框輸入"CMD",並開啟命令提示字元。
2. **安裝labelImg**
於命令提示字元輸入`pip install labelImg`
#
## 二. 啟動labelImg
1. 在儲存圖片的資料夾裡先建立classes.txt(我有幫你們建好),裡面放著所有類別的名字(一行放一個類別,如下圖所示)。


2. 在命令提示字元輸入`labelImg class_file {classes.txt的路徑}`如果成功開啟labelImg,代表成功安裝。
**classes.txt的路徑記得改成自己的**

3. 成功開啟的話會顯示如下圖的視窗

4. 左方的調整工具列可以調整位置,使用拖曳的方式。
>我是都習慣放上面啦,所以下面的教學也都是用這個版型。

#
## 三. 使用labelImg標記YOLO格式label
1. **切換至YOLO格式**
>先確定格式顯示為YOLO

>如果不是,直接按下去直到變成YOLO為止

2. **先點選Open Dir。**
>點選Open Dir

>假設剛剛有改過格式,應該會跳出警告視窗,按Yes就可以了。
>
2. **選擇想畫標記的圖片所在的資料夾。**

3. **畫面上會顯示這個資料夾的第一張圖片。**
>
上圖因為這張圖片`5.jpg`已經有同名的txt檔`5.txt`存在同一個資料夾,所以程式會讀取`5.txt`內的資料,自動幫我們畫上讀取到的框框。
4. **點選Change Save Dir**

>選擇與圖片資料夾同一個資料夾

5. **開始label囉~**
>點選Create RectBox或按下快捷鍵`W`可以開啟畫框框模式。

*左下角那個人還沒被標記到,所以將滑鼠移到它的位置,用壓下 左鍵並拖曳的方式畫一個能夠完全包覆住目標的bounding box,放開左鍵後會出現要你選擇這個bounding box的label,這邊因為這個框起來的物件類別是person,因此選擇person這個類別。*
>而因為一開始在開啟labelImg時有先將自訂的classes.txt做連接(就是二之2的那個指令),所以可以在要你選擇類別的框框裡看到classes.txt裡的類別,就可以直接選取不用輸入。

6. **儲存**
>點選Save或是用快捷鍵`Ctrl + S`,因為前面有先設定儲存 的路徑,所以會直接儲存在剛剛選擇的資料夾裡。

>儲存之後可以在資料夾內看到剛剛儲存的txt檔,會與圖片檔同名,以這張圖為例,圖片名為`5.jpg`,就會儲存`5.txt`的檔案,`5.txt`裡存著bounding box的資訊。

>第一個為類別編號,person是第一種類別,所以編號為0。
第二個為bounding box的中心點的x軸。
第三個為bounding box的中心點的y軸。
第四個為bounding box的width (寬度)。
第五個為bounding box的height(高度)。
有幾行就是有幾個框框。

數值會都在0到1之間是因為程式會自動做正規化處理,舉例來說假設圖片寬度與高度為`640*640`,而bounding box 的資訊為
`x = 150`
`y = 300`
`width = 50`
`height = 200`
那就會將x與width除以圖片寬度,y與height除以圖片長度
`x = 150/640`
`y = 300/640`
`width = 50/640`
`height = 200/640`
正規化後的數據為
`x = 0.234375`
`y = 0.46875`
`width = 0.078125`
`height = 0.3125`
7. **切換圖片**
如果這張圖片都想標記的物件都標記完了,並且也Save了,按下Next Image即可換下一張圖片,如果按下了卻發現上一張有需要修改的部分,也可以按下Prev Image來回到上一張。

8. **Auto Save**
如果怕每次標記完會忘記按Save,那可以開啟自動存檔,開啟Auto Save mode後,每次標記完後只要按下Next Image,程式就會幫你自動存檔。
>**點選上方的View。**

>**點選Auto Save mode。**

>**有打勾代表現在程式為Auto Save mode。**

#
## 四. 其他功能
1. **File List**
右下角有個File List的視窗,裡放的是該資料夾內的所有圖片,於該視窗點擊左鍵兩下即可將視窗彈出,在點擊兩下可以放回去。
>FileList視窗會顯示你目前在哪張圖片,也可以透過點擊兩下來直接跳到點擊的圖片。

## 結束
有錯誤可以留言回報,謝謝。