資料集的命名規則是什麼?¶
Format :¶
A_B_C_D
A : 資料集
- Original : 自行拍攝的影像資料(原創資料集)
- Opensource : 網路上下載的開源影像資料(開源資料集) </font>
B : Original資料集的拍攝日期或Opensource資料集的名稱
- 自行拍攝的影像資料 : 拍攝日期
- 開源資料集 : 資料集的名稱. </font>
C : 影像種類
- 影像種類包含以下四種 :
- rgb, dvs, fisheye, dewarp </font>
D : 標記方式
- bbox : Normal bounding box
- seg : Semantic segmentation
- clf : Classification
- rbbox : Rotated bounding box (bounding box with angle)
- poly : Polygon
- reg : Regression
</font>
※ 每種Label格式都有固定的Json存檔格式
使用方式¶
1. 連線至SQL資料庫和影像倉庫¶
In [1]:
from ImageSynchronizer import ImageSynchronizer
sync = ImageSynchronizer.synchronizer()
2. 資料集內容¶
連線到SQL資料庫後, 使用datasetsInfo 屬性可以列出所有資料集。
- datasetID : 資料集名稱
- version : 標記方式的版本,例如版本 1.0.0 的 bounding box 只包含 'person' 的類別, 但經過討論後,新的標記變成了 'person with face' 和 'person without face' 兩種類別,而標記版本則進版為 2.0.0.
- image_type : 本資料集包含了什麼樣類型的影像資料
In [2]:
# 列出所有資料集的資訊
sync.datasetsInfo
Out[2]:
3. 訂閱特定的資料集¶
In [3]:
# 定義要訂閱資料集的條件,並得到對應的 dataset ID
datasets = sync.datasetsInfo[sync.datasetsInfo['image_type']=='fisheye360']['datasetID']
# 僅訂閱 Original的資料集
datasets = [i for i in datasets if 'opensource' not in i]
# 發送訂閱請求
sync.subscribe(datasets=datasets)
In [4]:
# 顯示您鎖訂閱的資料集資訊
sync.datasetsInfo_subscribed
Out[4]:
4. Sync dataset to target folder¶
In [5]:
# 發出訂閱請求後,可以將訂閱的資料集同步至指定資料夾
sync.update_subscription(target_path = "./test")
# 這個步驟可能花費數小時,取決於訂閱的資料集大小
# Note : 這個 function 只會同步您指定資料夾內所沒有的圖片,已有的圖片不會同步至目標資料夾
# 如果資料集過大,您也可以指定需要同步的影像數量以加快同步速度
sync.update_subscription(target_path = "./test", amount = 50)
5. 使用客製的 draw_box function 預覽圖片和 Bounding Box¶
In [6]:
from ImageSynchronizer.utils import draw_box
import glob
import numpy as np
import matplotlib.pyplot as plt
anno_list = glob.glob(r"test/**/*.json")
rdn_anno = np.random.choice(anno_list,1)[0]
img = draw_box(rdn_anno)
plt.figure(figsize = (10,10))
plt.imshow(img[...,::-1])
Out[6]:
Annotation 標記轉換¶
ImageSynchronizer 對於不同的標記方式有自訂的 annotation 格式並存成Json檔。
使用者可以賺換 ImageSynchronizer json annotation 至不同的 annotation 格式 :
labelme 的 json 格式:
原生的 ImageSynchronizer annotaion json 檔案會被移動到資料夾 ImageSynchronizer_annotation 內, 且新生成的 labelme annotaion 會取代原始位置的 ImageSynchronizer annotaion
- rbbox 的標記方式若轉換成 labelme_json 格式會被存為為 polygon 的 Annotation。
- bbox 的標記方式若轉換成 labelme_json 格式會被存為為 rectangle 的 Annotation。
roLabelImg 的 XML 格式:
轉換後的 xml annotation file 會直接生成在與原生的 ImageSynchronizer annotaion json 相同的資料夾底下
In [7]:
# 批量轉換 ImageSynchronizer_json 至 rolabelimg_xml 的格式
from ImageSynchronizer.parse_annotation import parse_annotation
from IPython.display import display
import glob
anno_dir = "./test/original_20200207_fisheye_rbbox/*.json"
anno_list = glob.glob(anno_dir)
rdn_anno = np.random.choice(anno_list,1)[0]
parser = parse_annotation(rdn_anno)
display(parser.objects_df) # 使用 Dataframe 顯示所有 Bounding Box
parser.convert('rolabelimg_xml')