日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Yolov5 使用精灵标注助手制作数据集

發布時間:2025/5/22 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Yolov5 使用精灵标注助手制作数据集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

精靈標記助手下載:http://www.jinglingbiaozhu.com/

首先點擊菜單文件->新建,然后選擇位置標注,選擇圖片文件夾,點擊創建按鈕,軟件會自動加載文件夾下的圖片(png,jpg,gif)并創建一個項目。

  • 項目名稱:根據自己的需求命名

  • 圖片文件夾:圖片文件所在電腦磁盤的路徑

  • 分類值:根據對圖片劃分的類別,對不同類的框命名

    可以選擇 曲線框,多邊形框,矩形框等對圖片進行標注。

    注:所選框不能超出圖片大小,如圖下

    為了有更好的識別效果,上面的圖片應該進行如下標記:

注意:每次標記完一張圖后,要對圖片進行保存,通過快捷鍵 ctrl + s 或者點擊圖片下方的 ?,

當左下角彈出 √保存成功,則證明該張圖片的標記已經保存,如果標記的圖片沒有進行保存,在切換圖片的過程中,前一張的圖片標記框會自動消失,此時需要對圖片重新標記。

快捷鍵

  • R:矩形框
  • ←:前一張圖片
  • →:后一張圖片
  • 空格:移動
  • 放大縮小圖片:ctrl + 鼠標滾輪
  • 保存標記:ctrl + s

所有的數據集標注完成后,將標注的信息導出。

注:選擇導出格式時候必須選擇pascal—voc導出XML直接選擇XML會在后面無法讀取到標注
的信息


導出后,會在目錄中生成一個 outputs 文件夾,導出的文件就是pascal-voc的xml,效果如下:

輸出的標注文件XML保存在Annotations中

數據集標記好后,將原始圖片數據集放到images文件夾中,如圖所示

以下操作是對導出的XML文件和原圖片進行解析。

makeTxt.py

創建 makeTxt.py 文件
makeTxt.py主要是將數據集分類成訓練數據集和測試數據集,默認train,val,test按照8:1:1
的比例進行隨機分類。

import os import randomtrainval_percent = 0.9 train_percent = 0.9 xmlfilepath = './datasets/Annotations' # 數據集位置 txtsavepath = './datasets/images' # 圖片位置 tmage_sets_path = './datasets/ImageSets' # 將數據集分為 訓練數據集和測試數據集進行存放的位置 total_xml = os.listdir(xmlfilepath)num = len(total_xml) list = range(num) tv = int(num * trainval_percent) tr = int(tv * train_percent) trainval = random.sample(list, tv) train = random.sample(trainval, tr)# 先找ImageSets文件夾如果不存在則創建 if not os.path.exists(tmage_sets_path):os.makedirs(tmage_sets_path)ftrainval = open('datasets/ImageSets/trainval.txt', 'w') # 以只寫方式打開文件。如果文件存在會被覆蓋。如果文件不存在,創建新文件 ftest = open('datasets/ImageSets/test.txt', 'w') ftrain = open('datasets/ImageSets/train.txt', 'w') fval = open('datasets/ImageSets/val.txt', 'w')for i in list:name = total_xml[i][:-4] + '\n'if i in trainval:ftrainval.write(name)if i in train:ftrain.write(name)else:fval.write(name)else:ftest.write(name)ftrainval.close() ftrain.close() fval.close() ftest.close()

voc_label.py

創建 voc_label.py 文件
代碼如下:
classes=[……] 中填入的一定要是自己在數據集中所標注的類別名稱,標記了幾個類別就填寫幾個類別名,填寫錯誤的話會造成讀取不出xml文件里的標注信息。

# xml解析包 import xml.etree.ElementTree as ET import pickle import os from os import listdir, getcwd from os.path import joinsets = ['train', 'test', 'val'] classes = ['杯子', '鍵盤', '鼠標', '手機'] #填入剛剛標記數據集的類別名稱# 進行歸一化操作 def convert(size, box): # size:(原圖w,原圖h) , box:(xmin,xmax,ymin,ymax)dw = 1. / size[0] # 1/wdh = 1. / size[1] # 1/hx = (box[0] + box[1]) / 2.0 # 物體在圖中的中心點x坐標y = (box[2] + box[3]) / 2.0 # 物體在圖中的中心點y坐標w = box[1] - box[0] # 物體實際像素寬度h = box[3] - box[2] # 物體實際像素高度x = x * dw # 物體中心點x的坐標比(相當于 x/原圖w)w = w * dw # 物體寬度的寬度比(相當于 w/原圖w)y = y * dh # 物體中心點y的坐標比(相當于 y/原圖h)h = h * dh # 物體寬度的寬度比(相當于 h/原圖h)return (x, y, w, h) # 返回 相對于原圖的物體中心點的x坐標比,y坐標比,寬度比,高度比,取值范圍[0-1]# year ='2012', 對應圖片的id(文件名) def convert_annotation(image_id):'''將對應文件名的xml文件轉化為label文件,xml文件包含了對應的bunding框以及圖片長款大小等信息,通過對其解析,然后進行歸一化最終讀到label文件中去,也就是說一張圖片文件對應一個xml文件,然后通過解析和歸一化,能夠將對應的信息保存到唯一一個label文件中去labal文件中的格式:calss x y w h 同時,一張圖片對應的類別有多個,所以對應的bunding的信息也有多個'''# 對應的通過year 找到相應的文件夾,并且打開相應image_id的xml文件,其對應bund文件in_file = open('datasets/Annotations/%s.xml' % (image_id), encoding='utf-8')# 準備在對應的image_id 中寫入對應的label,分別為# <object-class> <x> <y> <width> <height>out_file = open('datasets/labels/%s.txt' % (image_id), 'w', encoding='utf-8')# 解析xml文件tree = ET.parse(in_file)# 獲得對應的鍵值對root = tree.getroot()# 獲得圖片的尺寸大小size = root.find('size')# 如果xml內的標記為空,增加判斷條件if size != None:# 獲得寬w = int(size.find('width').text)# 獲得高h = int(size.find('height').text)# 遍歷目標objfor obj in root.iter('object'):# 獲得difficult ??difficult = obj.find('difficult').text# 獲得類別 =string 類型cls = obj.find('name').text# 如果類別不是對應在我們預定好的class文件中,或difficult==1則跳過if cls not in classes or int(difficult) == 1:continue# 通過類別名稱找到idcls_id = classes.index(cls)# 找到bndbox 對象xmlbox = obj.find('bndbox')# 獲取對應的bndbox的數組 = ['xmin','xmax','ymin','ymax']b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text),float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text))print(image_id, cls, b)# 帶入進行歸一化操作# w = 寬, h = 高, b= bndbox的數組 = ['xmin','xmax','ymin','ymax']bb = convert((w, h), b)# bb 對應的是歸一化后的(x,y,w,h)# 生成 calss x y w h 在label文件中out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n') # 返回當前工作目錄 wd = getcwd() print(wd)for image_set in sets:'''對所有的文件數據集進行遍歷做了兩個工作:1.將所有圖片文件都遍歷一遍,并且將其所有的全路徑都寫在對應的txt文件中去,方便定位2.同時對所有的圖片文件進行解析和轉化,將其對應的bundingbox 以及類別的信息全部解析寫到label 文件中去最后再通過直接讀取文件,就能找到對應的label 信息'''# 先找labels文件夾如果不存在則創建if not os.path.exists('datasets/labels/'):os.makedirs('datasets/labels/')# 讀取在ImageSets/Main 中的train、test..等文件的內容# 包含對應的文件名稱image_ids = open('datasets/ImageSets/%s.txt' % (image_set)).read().strip().split()# 打開對應的2012_train.txt 文件對其進行寫入準備list_file = open('datasets/%s.txt' % (image_set), 'w')# 將對應的文件_id以及全路徑寫進去并換行for image_id in image_ids:list_file.write('datasets/images/%s.jpg\n' % (image_id))# 調用 year = 年份 image_id = 對應的文件名_idconvert_annotation(image_id)# 關閉文件list_file.close()
  • 分別運行makeTxt.py和voc_label.py。
  • makeTxt.py主要是將數據集分類成訓練數據集和測試數據集,默認train,val,test按照8:1:1
    的比例進行隨機分類,運行后ImagesSets文件夾中會出現四個文件,主要是生成的訓練數據集和測
    試數據集的圖片名稱,同時data目錄下也會出現這四個文件,內容是訓練數據集和測試數據集的圖
    片路徑。


    labels文件夾下 txt文件的內容如下:

根據數據集會寫一些對圖片文件和txt文件處理的腳本,
例如:以下是在標記數據集的過程中并沒有對一些數據集進行標記然后,將已經標記的數據集進行分開
存放在另一個文件夾中。

import os, shutil'''匹配訓練的圖片 和 標記 文件名字是否對應 把對應的名字復制到其它文件中 ''' def mycopyfile(srcfile, dstfile): # 復制文件函數if not os.path.isfile(srcfile):print("%s not exist!" % (srcfile))else:fpath = os.path.dirname(dstfile) # 獲取文件路徑if not os.path.exists(fpath): # 如果沒有復制的文件目錄就創建復制到那里的文件目錄os.makedirs(fpath) # 沒有就創建路徑shutil.copyfile(srcfile, dstfile) # 復制文件到默認路徑print("copy %s -> %s" % (srcfile, os.path.join(fpath, dstfile)))def operation(images_path, txt_path, copy_images_path, copy_txt_path):os.chdir(images_path) # 用于改變當前工作目錄到指定的路徑。 相當于 cd #當操作的文件不在當前目錄時必須先進入目錄print("開始復制....")cout = 0for images_file in os.listdir(images_path):images_name = os.path.splitext(images_file)[0] # 獲取文件名images_suffix = os.path.splitext(images_file)[1] # 獲取后綴for txt_file in os.listdir(txt_path):txt_name = os.path.splitext(txt_file)[0] #獲取文件名txt_suffix = os.path.splitext(txt_file)[1] # 獲取后綴if images_name == txt_name:mycopyfile(images_path + images_name + images_suffix, copy_images_path + images_name + images_suffix)mycopyfile(txt_path + images_name + txt_suffix, copy_txt_path + images_name + txt_suffix)print("images文件復制%s個,txt文件復制%s個,總共復制%s個文件" % (len(os.listdir(copy_images_path)), len(os.listdir(copy_txt_path)), len(os.listdir(copy_images_path)) + len(os.listdir(copy_txt_path))))if __name__ == '__main__':# 圖片路徑 #文件名不能包含冒號images_path = 'C:\\Users\\vvcat\\Desktop\\yolov5\\total\\images\\'# txt文件路徑txt_path = 'C:\\Users\\vvcat\\Desktop\\yolov5\\total\\labels\\'# 圖片復制路徑copy_images_path = 'C:\\Users\\vvcat\\Desktop\\yolov5\\neaten\\images\\'# txt文件復制路徑copy_txt_path = 'C:\\Users\\vvcat\\Desktop\\yolov5\\neaten\\labels\\'operation(images_path, txt_path, copy_images_path, copy_txt_path)

總結

以上是生活随笔為你收集整理的Yolov5 使用精灵标注助手制作数据集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 激情小说欧美色图 | 正在播放91 | 丝袜老师办公室里做好紧好爽 | 日本美女上床 | 成人精品久久 | 韩国三级做爰视频 | 色综合久久久久久久 | 亚洲国产精品狼友在线观看 | 成人亚洲国产 | 日韩欧美高清一区 | 国产成人在线观看免费网站 | 亚洲一区二区三区免费观看 | 国产欧美一区二区三区视频在线观看 | 国产福利一区二区视频 | 成人午夜淫片免费观看 | 日本一区二区精品视频 | 亚洲AV无码久久精品色三人行 | 成年人免费在线观看视频网站 | 国产乱码久久久 | 精品蜜桃av| 九九热精品视频在线观看 | 在线亚洲综合 | 黄色激情毛片 | 久久久久久久久久一区二区三区 | 天堂资源网| 亚洲女人久久久 | 视频一区 中文字幕 | 91av免费观看 | 日韩一区二区三区免费在线观看 | 99在线观看免费 | 最新天堂在线视频 | 久久亚洲精选 | 在线看福利影 | 日韩成人免费在线 | 欧美a级在线免费观看 | 国产又粗又猛又色又 | 内射合集对白在线 | 91天堂在线| 日本aⅴ在线观看 | 粗大的内捧猛烈进出在线视频 | 日韩av线 | 西西午夜影院 | 电影寂寞少女免费观看 | 爱爱福利社 | 天天干夜夜草 | 麻豆三级在线观看 | 亚洲成人av电影在线 | 日韩伦人妻无码 | 海角社区在线视频播放观看 | 中国大陆毛片 | 国产人与禽zoz0性伦 | 懂色av一区二区在线播放 | 老司机成人网 | 可以看毛片的网站 | 日韩爱爱免费视频 | 国产一级久久 | 国产不卡毛片 | 98久久 | 大乳村妇的性需求 | 起碰在线| 壮汉被书生c到合不拢腿 | 欧美日韩免费一区二区 | 自拍亚洲一区 | 午夜一级黄色片 | 成年人黄网站 | 亚洲在线| 中文有码av | 欧美| 日韩不卡在线观看 | 精品日韩一区二区三区 | 五月99久久婷婷国产综合亚洲 | 国产男男gay| 国产成人无码久久久精品天美传媒 | 一区二区国产视频 | 色天堂视频 | 天堂中文在线观看 | 亚洲www视频| www.色婷婷| 国产伦精品一区二区三区四区免费 | 久久国产精品影院 | 青青草手机在线观看 | 啪视频网站 | 国产伊人精品 | 哺乳援交吃奶在线播放 | 岛国精品视频 | 337p粉嫩色噜噜噜大肥臀 | 亚洲图片在线播放 | 大地资源影视在线播放观看高清视频 | 91九色网| 中文字幕乱伦视频 | 色桃av| 四虎精品一区二区 | 亚洲精品无amm毛片 国内一区二区三区 | 欧美日韩中文国产 | 久久久久噜噜噜亚洲熟女综合 | 图片区小说区视频区 | 欧洲视频一区二区三区 | 性感美女被草 | 69sex久久精品国产麻豆 |