iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0
AI/ ML & Data

我的深度學習-從0開始實作物件偵測系列 第 14

【Day 14】前置作業 - 建立DataFrame

  • 分享至 

  • xImage
  •  

一、前言

昨天已經初始化好使用的套件了,今天要來處理資料集的部分,由於標籤檔是XML的檔案,因此要對其做一些處理,這邊會提取標籤檔的資料並對每筆資料新增類別,建立成DataFrame。

二、格式化XML及建立DataFrame

# 本篇使用Jupyter Notebook進行實作

  • 資料集中共有兩個資料夾,圖片以及標籤檔,首先先創建一個資料夾並將資料解壓至裡面。

  • 接著在Jupyter Notebook中接續昨天初始化完的環境。

  1. 首先設定Dataset的路徑,以及提取文件名稱的副程式。
import re
dataset_path = 'r'C:\Users\使用者\Documents\projects\Car_License
def get_number_in_the_string(s):
    return int(''.join(filter(str.isdigit, s)))
  1. 接著進行格式化XML以及建立DataFrame。
# 初始化一個字典用來儲存圖片以及標籤的內容
labels_dict = dict(
    img_path=[],
    xmin=[],
    xmax=[],
    ymin=[],
    ymax=[],
    img_width=[],
    img_height=[]
)

# 提取所有的標籤檔
xml_files = glob(f'{dataset_path}\\annotations\\*.xml')

# 對XML檔案進行處理以及進行排序
for file in sorted(xml_files, key = get_number_in_the_string):
    info = xet.parse(file)
    root = info.getroot()
    
    # 提取XML檔案中尋找object的元素並提取邊界框的資訊
    member_object = root.find('object')
    labels_info = member_object.find('bndbox')
    xmin = int(labels_info.find('xmin').text)
    xmax = int(labels_info.find('xmax').text)
    ymin = int(labels_info.find('ymin').text)
    ymax = int(labels_info.find('ymax').text)

    # 取得圖片的完整路徑
    img_name = root.find('filename').text
    img_path = os.path.join(dataset_path, 'images', img_name)

    # 確認圖片是否存在
    if not os.path.exists(img_path):
        print(f"Image not found: {img_path}")
        continue

    image = cv2.imread(img_path)
    if image is None:
        print(f"Failed to read image: {img_path}")
        continue
    
    # 將對應的資訊新增進字典中
    height, width, _ = image.shape
    labels_dict['img_path'].append(img_path)
    labels_dict['xmin'].append(xmin)
    labels_dict['xmax'].append(xmax)
    labels_dict['ymin'].append(ymin)
    labels_dict['ymax'].append(ymax)
    labels_dict['img_width'].append(width)
    labels_dict['img_height'].append(height)
    
    #將字典轉為Pandas的Dataframe
    alldata = pd.DataFrame(labels_dict)
    
    #顯示Dataframe的前3行
    alldata.head(3)

輸出的結果如下圖。
image
這樣就初步完成資料集的分類,接著會利用Scikit-learn將資料集拆分,那我們下篇見。
image


上一篇
【Day 13】前置作業 - 初始化環境
下一篇
【Day 15】前置作業 - 拆分資料集
系列文
我的深度學習-從0開始實作物件偵測30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言